这真的困扰着我,我读过的所有问答都不能解决我的问题。我在 php 手册中读到,PDO"驱动程序从 PHP 5.1.0 开始默认启用"。我有 php 5.5.18。
php_info(( 显示:
PDO Driver for MySQL enabled
我使用 fedora,并且:
yum install php-pdo
GIV:
php-pdo-5.5.19-3.fc20.x86_64 already installed and latest version
一些代码
$dsn = '
mysql:host=' . MY_HOST . '
;dbname=' . MY_DB . '
;charset=utf8;"';
$user = MY_USER;
$password = MY_PASS;
try {
$this->_dbh = new PDO($dsn, $user, $password);
$this->_dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
这给了我:
Connection failed: could not find driver
您是否重新启动了 Web 服务器?
当您发出时
yum install php-pdo
它给了
php-pdo-5.5.19-3.fc20.x86_64 already installed and latest version
这很好,但你需要发布:
sudo service httpd stop/start or restartor sudo/etc/init.d/httpd stop/start restart
将扩展加载到 Apache WebServer 否则无论您对它做什么都不起作用。 驱动程序已启用,但您需要发出 Web 服务器重新启动以使其加载扩展!
我的DSN字符串中有换行符,我认为这就是问题所在。
我已将其更改为:
$host = MY_HOST;
$db = MY_DB;
$user = MY_USER;
$password = MY_PASS;
try {
$this->_dbh = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8;",
$user,
$password
);
} catch (PDOException $e) {
printf(
'Connection failed: %s<br>',
$e->getMessage()
);
}