Подтвердить что ты не робот

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'

Переименовано ли оно?

4b9b3361

Ответ 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 или более позднюю версию.