Undefined константа класса 'MYSQL_ATTR_INIT_COMMAND' с pdo
$db = new PDO('mysql:dbname=xnews;host=localhost;port=' . $LOCAL_DB_PORT,
$LOCAL_DB_USER,
$LOCAL_DB_PASS,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'")
);
сообщает:
Undefined постоянная класса 'MYSQL_ATTR_INIT_COMMAND'
Переименовано ли оно?
Ответы
Ответ 1
У меня была такая же ошибка (с PHP 5.2.6), и все, что мне нужно было сделать, это включить MySQL-специфический драйвер PDO
TL; DR
В вашем файле php.ini
у вас должна быть следующая строка (без объявления):
-
extension=php_pdo_mysql.dll
в Windows
-
extension=php_pdo_mysql.so
на Linux/Mac
Более длинное объяснение:
-
откройте php.ini
в текстовом редакторе
- <суб > например. его путь по умолчанию в Windows:
C:\Program Files (x86)\PHP\v5.X\php.ini
(замените v5.x с установленной вами версией) или C:\Windows\php.ini
и т.д.
- или в Linux:
/etc/php5/apache2/php.ini
(например, это путь на Ubuntu) или /etc/php5/cli/php.ini
, /etc/php5/cgi/php.ini
и т.д.
- или вы можете узнать, где это похоже на это:
-
php --ini | find /i "Loaded"
в командной строке Windows OR
-
php --ini | grep "Loaded"
в терминале Linux/Mac
- , используя
phpinfo()
, и ищет строку "Загруженный файл конфигурации"
-
и удалите точку с запятой в начале следующей строки (чтобы раскомментировать ее):
-
;extension=php_pdo_mysql.dll
в Windows
- ИЛИ
;extension=php_pdo_mysql.so
на Linux/Mac
- конечно, если эта строка не существует, вы должны вставить ее
- так как результат ожидаемая строка будет выглядеть так:
php.ini
:
-
extension=php_pdo_mysql.dll
в Windows
- ИЛИ
extension=php_pdo_mysql.so
на Linux/Mac
-
Возможно, вам придется перезагрузить веб-сервер.
Это решило мою проблему.
Ответ 2
Я получил ту же ошибку, на debian6, когда я еще не установил php5-mysql
.
Итак, я установил его, а затем перезапустил apache2
apt-get install php5-mysql
/etc/init.d/apache2 restart
Затем ошибка исчезла.
Если у вас такая же ошибка в Ubuntu, а не:
/etc/init.d/apache2 restart
Тип:
service apache2 restart
Ответ 3
Похоже, что он доступен только с помощью драйвера mysqlnd.
Попробуйте заменить его на целое число, которое оно представляет; 1002, если я не ошибаюсь.
Ответ 4
Для Centos мне не хватало библиотеки php-mysql:
yum install php-mysql
service httpd restart
Нет необходимости включать расширение php.ini, оно по умолчанию загружается.
Ответ 5
Я просто попытался с PHP 5.2, и эта константа существует:
var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);
Дает мне:
int 1002
Но кажется, что в PHP 5.3 есть ошибка, которая заставляет эту константу больше не существовать - или, по крайней мере, не тогда, когда используется драйвер mysqlnd (и тот, который настроен по умолчанию)
Я предполагаю, что временное решение, предложенное в этот отчет об ошибках, могло бы непосредственно использовать значение integer 1002
, а не contant...
Но обратите внимание, что вы должны вернуться к использованию константы как можно скорее, так как это упрощает понимание кода.
Ответ 6
Вы можете попробовать заменить его на 1002 или выполнить запрос инициализации сразу после открытия соединения.
Ответ 7
Мне недоставало MySQL PDO, я перекомпилировал свой PHP с помощью опции --with-pdo-mysql
, установил его и перезапустил apache, и все это работало
Ответ 8
Я получил эту ошибку сегодня утром, я только что сделал новую установку Fedora 14 и пытался вернуть свои локальные проекты в Интернете. Мне не хватало php-mysql, я установил его через yum, и ошибка теперь исчезла.
Ответ 9
Использование значения int 1002
, похоже, работает для PHP 5.3.0:
public static function createDB() {
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="whatever";
$dbOptions=array(1002 => 'SET NAMES utf8',);
return new DB($dbHost, $dbName, $dbUser, $dbPassword,$dbOptions);
}
function createConnexion() {
return new PDO(
"mysql:host=$this->dbHost;dbname=$this->dbName",
$this->dbUser,
$this->dbPassword,
$this->dbOptions);
}
Ответ 10
Это связано с ошибкой PHP 5.3.0 в Windows, где MYSQL_ATTR_INIT_COMMAND недоступен. Отчет об ошибке PHP:
http://bugs.php.net/bug.php?id=47224
Если вы это испытываете, обновите свой продукт WAMP до версии, использующей PHP 5.3.1 или более позднюю версию.