未定义类常量中未定义的类常量“MYSQL_ATTR_INIT_COMMAND”(PHP 5.5.3)

时间:2014-04-14 12:06:44

标签: php mysql

我有一个连接到远程数据库的配置文件,但是我一直收到一个我不知道如何解决的错误。在早期版本中,它本来是一个bug,但我认为它将由5.5.3修复。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');

$host = "localhost";
$dbname = "registration";
$username = "databaseEditor";
$password = "yolo10";

// 1002 = MYSQL_ATTR_INIT_COMMAND
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');

try
{
    $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username$
}
catch(PDOException $ex)
{
    die("Failed to connect to the database: " . $ex->getMessage());
}

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

header('Content-Type: text/html; charset=utf-8');

echo "File works";
?>

我一直收到错误"Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'"。我试图使用1002而不是'MYSQL_ATTR_INIT_COMMAND',但后来我最终得到了错误 "syntax error, unexpected '1002' (T_LNUMBER)"代替,我也安装了最新的php-mysql扩展。

3 个答案:

答案 0 :(得分:3)

尝试编辑你的php.ini:

在Windows服务器上,您可以在php.ini中添加以下行

 extension=php_pdo.dll
 extension=php_pdo_mysql.dll

在Linux服务器上,您可以使用以下选项编译php:with-pdo-mysql

在php.ini中,添加以下行

 extension=pdo.so
 extension=pdo_mysql.so

答案 1 :(得分:0)

PDO::MYSQL_ATTR_INIT_COMMAND常量由PDO扩展的MySQL驱动程序定义。你很可能忘了安装它们。

安装相应的扩展程序后,您可以忘记PDO::MYSQL_ATTR_INIT_COMMAND。设置连接编码的正确方法是你已经做的 - 构造函数中的DSN参数:

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username$
                                                   ^^^^^^^^^^^^

最后但并非最不重要的是,您的代码似乎有很多语法错误。您需要在php.ini文件中启用完整的错误报告,因为这些行:

error_reporting(E_ALL);
ini_set('display_errors', 'on');
如果脚本甚至无法运行,

...将无法执行。

答案 2 :(得分:0)

在Ubuntu 14.04

安装php5-mysql包

sudo apt-get install php5-mysql

如果已安装上述内容

sudo php5enmod pdo

sudo php5enmod pdo_mysql

重新启动Web服务器