带pdo的未定义类常量'MYSQL_ATTR_INIT_COMMAND'

问题描述 投票:36回答:11
$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'

它重命名了吗?

php pdo
11个回答
49
投票

我只是遇到了相同的错误(使用PHP 5.2.6),而我要做的就是enable the MySQL-specific PDO driver

TL; DR

php.ini文件中,您应该有以下行(未注释):

  • Windows上的extension=php_pdo_mysql.dll
  • [在Linux / Mac上为extension=php_pdo_mysql.so

详细说明:

  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
    • you can get to know where it is like this
      • [php --ini | find /i "Loaded"在Windows命令提示符下或
      • [php --ini | grep "Loaded"在Linux / Mac终端中
      • 使用phpinfo(),并查找行“ Loaded Configuration File”]
  2. 从下一行的开头删除分号(以取消注释):

    • ;extension=php_pdo_mysql.dll在Windows上
      • 或Linux / Mac上的;extension=php_pdo_mysql.so
    • 当然,如果此行不存在,则应粘贴它
    • 因此为结果,预期行在php.ini中将如下所示:
      • Windows上的extension=php_pdo_mysql.dll
      • 或Linux / Mac上的extension=php_pdo_mysql.so
  3. 您可能需要重新启动Web服务器。

这解决了我的问题。


0
投票
这是由于Windows上的PHP 5.3.0错误,其中MYSQL_ATTR_INIT_COMMAND不可用。 PHP错误报告为:

0
投票
对于以后跟我一样,看到这个的人...

28
投票

当我尚未安装php5-mysql时,在debian6上遇到了相同的错误。

所以我安装了它,然后重新启动了apache2

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

然后错误消失了。

如果您在Ubuntu上有相同的错误,而不是:

/etc/init.d/apache2 restart  

类型:

service apache2 restart

5
投票

似乎仅使用mysqlnd驱动程序才可用。尝试用它代表的整数替换它; 1002,如果我没记错的话。


3
投票

我刚刚尝试使用PHP 5.2,并且该常量似乎存在:

var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);

给我:

int 1002

但是似乎PHP 5.3中存在一个错误,导致该常数不再存在-或至少在使用mysqlnd驱动程序时不存在

[我想根据this bug report的建议,一个临时解决方案可能是直接使用整数1002值,而不是紧随其后的...

但是请注意,您应该尽快返回使用常量,因为这会使代码更易于理解。


3
投票
对于Centos,我缺少php-mysql库:

yum install php-mysql service httpd restart

不需要在php.ini中启用任何扩展名,它是默认加载的。

2
投票
对我来说,它缺少MySQL PDO,我用--with-pdo-mysql选项重新编译了PHP,安装并重新启动了apache,并且一切正常。>

1
投票
您可以尝试用1002替换它,或者在打开连接后立即发出初始化查询。

0
投票
我今天早上遇到这个错误,我刚刚重新安装了Fedora 14,并试图使我的本地项目恢复在线。我缺少php-mysql,我通过yum安装了它,错误现在消失了。

0
投票
使用int值1002似乎适用于PHP 5.3.0:
© www.soinside.com 2019 - 2024. All rights reserved.