Неопределенная константа класса 'MYSQL_ATTR_INIT_COMMAND' с pdo - PullRequest
32 голосов
/ 11 марта 2010
$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'")
      );

отчеты:

Неопределенная константа класса 'MYSQL_ATTR_INIT_COMMAND'

Это переименовано?

Ответы [ 10 ]

44 голосов
/ 18 июля 2011

У меня была та же самая ошибка (с PHP 5.2.6), и все, что мне нужно было сделать, это включить драйвер PDO для MySQL :

TL; DR

В вашем файле php.ini должна быть следующая строка (без комментариев):

  • extension=php_pdo_mysql.dll в Windows
  • extension=php_pdo_mysql.so в Linux / Mac

Более длинное объяснение:

  1. открыть 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 ИЛИ
      • php --ini | grep "Loaded" в терминале Linux / Mac
      • с использованием phpinfo() и поиском строки «Загруженный файл конфигурации»
  2. и уберите точку с запятой в начале следующей строки (чтобы раскомментировать):

    • ;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
  3. Возможно, вам потребуется перезагрузить веб-сервер.

Это решило мою проблему.

27 голосов
/ 19 мая 2014

Я получил ту же ошибку на debian6, когда я еще не установил php5-mysql.

Итак, я установил его, затем перезапустил apache2

apt-get install php5-mysql
/etc/init.d/apache2 restart

Тогда ошибка ушла.

Если у вас такая же ошибка в Ubuntu, вместо:

/etc/init.d/apache2 restart  

Тип:

service apache2 restart
5 голосов
/ 11 марта 2010

Похоже, что он доступен только при использовании драйвера mysqlnd .
Попробуйте заменить его на целое число, которое оно представляет; 1002, если я не ошибаюсь.

3 голосов
/ 11 мая 2015

Для Centos мне не хватало библиотеки php-mysql:

yum install php-mysql

service httpd restart

Нет необходимости включать какое-либо расширение в php.ini, оно загружается по умолчанию.

2 голосов
/ 11 марта 2010

Я только что попробовал с PHP 5.2, и эта константа, кажется, существует:

var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);

дает мне:

int 1002


Но, похоже, в PHP 5.3 есть ошибка, из-за которой эта константа больше не существует - или, по крайней мере, не при использовании драйвера mysqlnd (и он настроен по умолчанию)

Полагаю, что временное решение, предложенное в этом отчете об ошибке , может заключаться в прямом использовании целочисленного значения 1002 вместо константы ...

Но учтите, что вам следует вернуться к использованию константы как можно скорее, поскольку это облегчает понимание кода.

1 голос
/ 16 июня 2012

Для меня не хватало MySQL PDO, я перекомпилировал свой PHP с опцией --with-pdo-mysql, установил его и перезапустил apache, и все заработало

1 голос
/ 13 апреля 2010

Вы можете попробовать заменить его на 1002 или выполнить запрос инициализации сразу после открытия соединения.

0 голосов
/ 13 июня 2013

Это связано с ошибкой PHP 5.3.0 в Windows, где MYSQL_ATTR_INIT_COMMAND недоступен. Отчет об ошибке PHP:

http://bugs.php.net/bug.php?id=47224

Если вы испытываете это, обновите продукт WAMP до версии, использующей PHP 5.3.1 или более позднюю версию.

0 голосов
/ 19 февраля 2012

Использование значения 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); 
}
0 голосов
/ 10 января 2011

Я получил эту ошибку этим утром, я только что сделал новую установку Fedora 14 и пытался вернуть свои локальные проекты в оперативный режим. Мне не хватало php-mysql, я установил его через yum, и теперь ошибка исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...