web-dev-qa-db-ja.com

pdoを使用した未定義のクラス定数 'MYSQL_ATTR_INIT_COMMAND'

$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」

名前が変更されましたか?

35
user260019

私はちょうど同じエラーがありました(PHP 5.2.6)で、私がしなければならなかったのは MySQL固有のPDOドライバーを有効にする

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コマンドプロンプトOR
      • _php --ini | grep "Loaded"_ Linux/Macターミナル
      • phpinfo()を使用して、行 "Loaded Configuration File"を探します
  2. そして、次の行の先頭からセミコロンを削除します(コメントを外します):

    • _;extension=php_pdo_mysql.dll_ Windowsの場合
      • またはLinux/Macでは_;extension=php_pdo_mysql.so_
    • もちろん、この行が存在しない場合は貼り付けてください
    • resultとして、期待される行は_php.ini_:のようになります
      • _extension=php_pdo_mysql.dll_ Windowsの場合
      • またはLinux/Macでは_extension=php_pdo_mysql.so_
  3. Webサーバーの再起動が必要になる場合があります。

これで私の問題は解決しました。

46
Sk8erPeter

まだインストールしていないときに、debian6で同じエラーが発生しましたphp5-mysql

だから私はそれをインストールし、Apache2を再起動しました

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

その後、エラーはなくなりました。

Ubuntuで次の代わりに同じエラーが発生する場合:

/etc/init.d/Apache2 restart  

タイプ:

service Apache2 restart
27
Sverre

mysqlndドライバーを使用している場合にのみ利用できるようです。
それを表す整数に置き換えてみてください。 1002、私が間違っていなければ。

5
Atli

Centosでは、php-mysqlライブラリがありませんでした:

yum install php-mysql

service httpd restart

Php.iniで拡張機能を有効にする必要はありません。デフォルトでロードされます。

3
Aris

私にとっては、MySQL PDOが欠落していたため、PHPで--with-pdo-mysqlオプション、インストールし、Apacheを再起動しましたが、すべて機能していました

2
Reza S

PHP 5.2で試したところ、その定数が存在するようです:

var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);

私に与えます:

int 1002


しかし、PHP 5.3にはバグがあり、この定数がもう存在しないか、少なくともmysqlndドライバーが使用されていない場合(デフォルトで設定されているものです)

このバグレポート で提案されている一時的な解決策は、定数の代わりに整数1002値を直接使用することです...

しかし、できるだけ早く定数を使用することに戻る必要があることに注意してください-これによりコードが理解しやすくなります。

2
Pascal MARTIN

接続を開いた直後に1002に置き換えるか、初期化クエリを発行してみてください。

1
Andrew

これは、MYSQL_ATTR_INIT_COMMANDが利用できないWindowsでのPHP 5.3.0バグによるものです。PHPバグレポートは次のとおりです。

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

これが発生している場合は、PHP 5.3.1以降のバージョンを使用するバージョンにWAMP製品を更新してください。

0
Siraj Khan

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
JDelage

今朝このエラーが発生しました。Fedora14を新規インストールし、ローカルプロジェクトをオンラインに戻そうとしました。 php-mysqlがありませんでした。yumでインストールしましたが、エラーはなくなりました。

0
Jeff Busby