База данных
Соединение с базой данных
Метод instance() принимает необязательный параметр $name — название соединения из конфигурационного файла, по умолчанию 'default'.
$oDataBase = Core_DataBase::instance();
Выполнение запроса
$oCore_DataBase = Core_DataBase::instance()
->setQueryType(0)
->query('ЗАПРОС');
Виды запросов
- 0 - SELECT
- 1 - INSERT
- 2 - UPDATE
- 3 - DELETE
- 4 - RENAME
- 5 - ALTER
- 6 - DROP
- 7 - TRUNCATE
- 8 - LOCK
- 99 - OTHER
Получить результат в виде ресурса
$oCore_DataBase->getResult();
Получить весь результат в виде массива
$aRows = $oCore_DataBase->asAssoc()->result();
Получение результата построчно
while ($row = $oCore_DataBase->asAssoc()->current())
{
print_r($row);
}
Получение последнего выполненного запроса
$sLastQuery = Core_DataBase::instance()->getLastQuery(); echo htmlspecialchars($sLastQuery);
Конфигурационный файл
Конфигурационный файл размещается в modules/core/config/database.php и содержит следующие настройки:
индекс— название соединения, например, default. Конфигурационный файл базы данных должен содержать хотя бы одно соединение с индексомdefault;массив значений— массив с данными доступа к базе данных, может содержать следующие индексы:driver— название драйвера, используемого при работе с базой данных, например, 'pdo' или 'mysql';class— название класса, используемого для драйвера, например 'Core_DataBase_Pdo', необязательный параметр;host— сервер базы данных, например, 'localhost', порт указывается через двоеточие, например, 'localhost:3306';username— пользователь базы данных;password— пароль к базе данных;database— имя базы данных;storageEngine— тип хранилища, может применять значения 'InnoDB', 'MyISAM', 'Aria', по умолчанию MyISAM;newlink— открывать новое соединение при использование таких же данных для уже существующего соединения, по умолчанию FALSE;attr— массив дополнительных атрибутов для соединения, для PDO по умолчанию передается опция array(PDO::ATTR_PERSISTENT => FALSE);charset— кодировка соединения, по умолчанию 'UTF8'.
Пример конфигурационного файла:
<?php return array ( 'default' => array ( 'driver' => 'pdo', 'class' => 'Core_DataBase_Pdo', 'host' => 'localhost', 'username' => 'srv82user', 'password' => 'megapassword', 'database' => 'hostcms' ) );
Открытие дополнительного соединения с другой базой данных
В конфигурационный файл внесите данные о дополнительном соединении и дайте ему имя, например, external. Далее Core_QueryBuilder передаете соединение через setDataBase():
$oCore_Database = Core_Database::instance('external');
$queryBuilder = Core_QueryBuilder::select();
$queryBuilder->setDataBase($oCore_Database);
$queryBuilder->...
Для смены используемой базы данных в ORM выполните следующую инструкцию, передав название соединения:
Core_Entity::setDatabaseDriver('external');
Комментарии
-
Подключение к СУБД через SSL
Для тех, кому требуется подключиться к СУБД через SSL, если, например, на сервере установлен require_secure_transport=ON
В массиве конфигурации подключения к базе данных /modules/core/config/database.php необходимо добавить элемент 'attr'
'attr' => array(
PDO::ATTR_PERSISTENT => FALSE,
PDO::MYSQL_ATTR_SSL_CA => '/path/to/your-ca-certificate.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/path/to/your-client-pulic-certificate.pem',
PDO::MYSQL_ATTR_SSL_KEY => '/path/to/your-client-certificate-private-key.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => TRUE
)
Не путайте свой клиентский сертификат сервера, где установлена HostCMS, с сертификатом сервера, где установлена сама СУБД, если они находятся на разных машинах. В этому случае у СУБД свой сертификат, у сервера с HostCMS — свой.
В случае, если и для сервера с СУБД, и для сервера HostCMS сертификат выпущен одним и тем же центром сертификации (например, у вас собственная PKI-инфраструктура), тогда в массиве 'attr' нет необходимости указывать пути к вашим клиентскому сертификату и файлу закрытого ключа. Конечно же, корневые сертификаты такого центра сертификации должны быть добавлены в перечень доверенных.
Для Ubuntu Server, например, для этого их (файлы публичных сертификатов ЦС) необходимо поместить в каталог /usr/local/share/ca-certificates/you-ca-catalog, после чего выполнить команду sudo update-ca-certificates. После этого Ubuntu Server начнет доверять всем сертификатам, выпущенным вашим Центром сертификации.
-
Без темы
А как получить ID последней вставленной записи?
Без темы
Если использовали Core_QueryBuilder::insert(), то есть метод $oInsert->getInsertId()
Без темы
$query = "INSERT INTO form_fills(form_id,ip,datetime) VALUES(2,'".$user_ip."','".$date_time."');";
$oCore_DataBase = Core_DataBase::instance()
->setQueryType(1)//1 insert
->query($query);Без темы
Используйте https://www.hostcms.ru/documentation/modules/core/querybuilder/
-
Без темы
Как прописать новый, отличный от стандартного, порт подключения к базе данных MySQL?