$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 5.2.6),而我要做的就是enable the MySQL-specific PDO driver:
在php.ini
文件中,您应该有以下行(未注释):
extension=php_pdo_mysql.dll
extension=php_pdo_mysql.so
在文本编辑器中打开php.ini
C:\Program Files (x86)\PHP\v5.X\php.ini
(用安装的版本替换v5.x)或C:\Windows\php.ini
等。/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()
,并查找行“ Loaded Configuration File”]和从下一行的开头删除分号(以取消注释):
;extension=php_pdo_mysql.dll
在Windows上;extension=php_pdo_mysql.so
php.ini
中将如下所示:extension=php_pdo_mysql.dll
extension=php_pdo_mysql.so
您可能需要重新启动Web服务器。
这解决了我的问题。
当我尚未安装php5-mysql
时,在debian6上遇到了相同的错误。
所以我安装了它,然后重新启动了apache2
apt-get install php5-mysql
/etc/init.d/apache2 restart
然后错误消失了。
如果您在Ubuntu上有相同的错误,而不是:
/etc/init.d/apache2 restart
类型:
service apache2 restart
似乎仅使用mysqlnd驱动程序才可用。尝试用它代表的整数替换它; 1002,如果我没记错的话。
我刚刚尝试使用PHP 5.2,并且该常量似乎存在:
var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);
给我:
int 1002
但是似乎PHP 5.3中存在一个错误,导致该常数不再存在-或至少在使用mysqlnd驱动程序时不存在
[我想根据this bug report的建议,一个临时解决方案可能是直接使用整数1002
值,而不是紧随其后的...但是请注意,您应该尽快返回使用常量,因为这会使代码更易于理解。
yum install php-mysql
service httpd restart
不需要在php.ini中启用任何扩展名,它是默认加载的。
--with-pdo-mysql
选项重新编译了PHP,安装并重新启动了apache,并且一切正常。>1002
似乎适用于PHP 5.3.0: