$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'
是否重命名?
答案 0 :(得分:44)
我遇到了同样的错误(使用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"
或 php --ini | grep "Loaded"
在Linux / Mac终端 phpinfo()
,并查找“已加载的配置文件”行 和从以下行的开头删除分号(取消注释):
;extension=php_pdo_mysql.dll
;extension=php_pdo_mysql.so
php.ini
中看起来像这样:
extension=php_pdo_mysql.dll
extension=php_pdo_mysql.so
您可能需要重新启动网络服务器。
这解决了我的问题。
答案 1 :(得分:27)
当我还没有安装php5-mysql
时,我在debian6上遇到了同样的错误。
所以我安装了它,然后重新启动了apache2
apt-get install php5-mysql
/etc/init.d/apache2 restart
然后错误就消失了。
如果您在Ubuntu上遇到相同的错误,而不是:
/etc/init.d/apache2 restart
输入:
service apache2 restart
答案 2 :(得分:5)
似乎只能使用 mysqlnd 驱动程序。
尝试用它代表的整数替换它; 1002,如果我没弄错的话。
答案 3 :(得分:3)
对于Centos,我缺少php-mysql库:
yum install php-mysql
service httpd restart
不需要在php.ini中启用任何扩展名,默认情况下会加载它。
答案 4 :(得分:3)
对于以后跟我一样,看到这个的人
我收到相同的错误,因为我的php.ini文件中没有扩展名“ enabled”。我想如果您最近升级了php版本并且没有正确更新php.ini文件,您可能还会收到此错误。
如果您在升级php版本后不久收到此错误,则以下信息可能会对您有所帮助:
PHP 7.4在php.ini文件中略微更改了其语法。
现在,要启用mysql pdo,请确保您的php.ini文件中未注释extension=pdo_mysql
。 (默认php.ini设置中的931行)
该行以前是:
Windows上的正如Sk8erPeter指出的那样。但是.dll和.so结尾不建议使用,因此最好的方法是开始摆脱这些结尾,而仅使用extension = php_pdo_mysql.dll
在Linux / Mac上extension = php_pdo_mysql.so
extension=<ext>
以下内容是从“动态扩展”下的php 7.4 zip下载的默认php.ini-production文件中提取的:
注意:出于遗留原因,支持以前的PHP版本中使用的语法(“ extension = .so”和“ extension ='php_.dll”),并且在以后的PHP主版本中可能会弃用该语法。因此,请尽可能使用新的(
extension=<ext>
)语法。
答案 5 :(得分:2)
我刚尝试使用PHP 5.2,并且该常量似乎存在:
var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);
给我:
int 1002
但似乎PHP 5.3中存在一个错误,导致此常量不再存在 - 或者,至少,当使用mysqlnd驱动程序时(并且它是默认配置的那个)
我认为this bug report建议的临时解决方案可能是直接使用整数1002
值,而不是直接使用...
但请注意,您应该尽快使用常量 - 因为这会使代码更容易理解。
答案 6 :(得分:1)
您可以尝试将其替换为1002,或在打开连接后立即发出初始化查询。
答案 7 :(得分:1)
对我而言,它缺少MySQL PDO,我使用--with-pdo-mysql
选项重新编译了我的PHP,安装了它并重新启动了apache并且它全部正常工作
答案 8 :(得分:1)
虽然这个问题已经很老了,但我刚刚遇到了类似的问题。现在有了 PHP 命名空间,您似乎需要 \PDO
而不仅仅是 PDO
。例如:
$options = array(\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'");
代替:
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'");
答案 9 :(得分:0)
今天早上我收到了这个错误,我刚刚安装了Fedora 14,并试图让我的本地项目重新上线。我缺少php-mysql,我通过yum安装它,错误现在消失了。
答案 10 :(得分:0)
使用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);
}
答案 11 :(得分:0)
这是由于Windows上的PHP 5.3.0错误导致MYSQL_ATTR_INIT_COMMAND不可用。 PHP错误报告是:
http://bugs.php.net/bug.php?id=47224
如果您遇到此问题,请将您的WAMP产品更新为使用PHP 5.3.1或更高版本的版本。