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

use*_*019 35 php 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'")
      );
Run Code Online (Sandbox Code Playgroud)

报告:

未定义的类常量'MYSQL_ATTR_INIT_COMMAND'

它被重命名了吗?

Sk8*_*ter 47

我只是有同样的错误(使用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命令提示符或
      • php --ini | grep "Loaded" 在Linux/Mac终端中
      • 使用phpinfo(),并查找"加载配置文件"行
  2. 从以下行的开头删除分号(取消注释):

    • ;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上
  3. 您可能需要重新启动Web服务器.

这解决了我的问题.

  • 嗨,我试过这个,但现在我收到警告`PHP警告:PHP启动:无法加载动态库'/usr/lib/php/20151012/php_pdo_mysql.so' - /usr/lib/php/20151012/php_pdo_mysql. so:无法打开共享对象文件:0行上的Unknown中没有此类文件或目录 (3认同)

Sve*_*rre 28

当我还没有安装时,我在debian6上得到了同样的错误php5-mysql.

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

apt-get install php5-mysql
/etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

然后错误就消失了.

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

/etc/init.d/apache2 restart  
Run Code Online (Sandbox Code Playgroud)

类型:

service apache2 restart
Run Code Online (Sandbox Code Playgroud)


Atl*_*tli 5

它似乎只能使用mysqlnd驱动程序.
尝试用它代表的整数替换它; 1002,如果我没弄错的话.


Ari*_*ris 5

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

yum install php-mysql

service httpd restart
Run Code Online (Sandbox Code Playgroud)

php.ini 中无需启用任何扩展,默认加载。


小智 5

对于后来出现的任何人,就像我一样,看到这个......

我收到了同样的错误,因为我的 php.ini 文件中没有“启用”扩展名。我想如果您最近升级了 php 版本并且没有正确更新 php.ini 文件,您也可能会收到此错误。

如果您在升级 php 版本后不久收到此错误,以下信息可能对您有所帮助:

PHP 7.4 稍微改变了 php.ini 文件中的语法。现在,要启用 mysql pdo,请确保extension=pdo_mysql在 php.ini 文件中取消注释。(默认 php.ini 设置中的第 931 行)

该行曾经是:

extension=php_pdo_mysql.dll 在 Windows 上

extension=php_pdo_mysql.so 在 Linux/Mac 上

正如 Sk8erPeter 指出的那样。但是 .dll 和 .so 结尾将被弃用,因此最好的做法是开始摆脱这些结尾并仅使用extension=<ext>

以下是从“动态扩展”下的 php 7.4 zip 下载的默认 php.ini-production 文件中提取的:

注意:以前的 PHP 版本中使用的语法('extension=.so' 和 'extension='php_.dll')由于遗留原因受到支持,并且可能会在未来的 PHP 主要版本中被弃用。因此,如果可能,请移至新的 ( extension=<ext>) 语法。