我对MySQL和PHP还是很陌生,所以请耐心等待。经过一番研究,我发现……令我非常困扰的是……显然我的网站托管在GoDaddy上的Windows服务器(默认情况下)上,该服务器不支持PDO。
我最近刚通过发布的另一个问题的建议,将所有数据库调用切换为使用准备好的语句。现在,我发现它们没有运行,并且出现了一个令人讨厌的错误:
Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php:8
Stack trace: #0 D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php(8): PDO->__construct('mysql:host=HOSTNAME', 'DBNAME', 'PASSWORD')
#1 D:\Hosting\8446415\html\ROOTFOLDER\admin.php(67): Connect->connect()
#2 {main} thrown in D:\Hosting\8446415\html\ROOTFOLDER\php\Connect.php on line 8
这是Connect.php:
<?php
class Connect {
const expAddress = "HOSTNAME";
const expUser = "USERNAME";
const expPwd = "PASSWORD";
function connect() {
$db = new PDO('mysql:host='.self::expAddress.';dbname='.self::expUser.';charset=UTF-8', self::expUser, self::expPwd);
if(!$db) {
die("<p>Could not establish a connection to the database.</p>");
include('footer.php');
}
else {
return $db;
}
}
}
?>
那么这里的解决方法是什么?我不知道支持什么,并且被告知不要使用所有mysql_ *语句。
我不能将托管帐户升级到Linux,尽管那是最简单的。我需要使用mysqli_ *语句吗?这个特定的呼叫将如何变化,以确保输入不会注入?
$stmt = $db->prepare("SELECT * FROM logins WHERE username=? AND password=?");
$stmt->execute(array($user, $pass));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
最佳答案
您需要确保已安装pdo_mysql
。检查phpinfo()
中的pdo_mysql
...如果知道已安装,则可能只需要取消注释php.ini中的extension=php_pdo_mysql.dll
...
为了捕获您的创建错误并很好地显示它,您可以这样修改代码:
try{
$db = new PDO('mysql:host='.self::expAddress.';dbname='.self::expUser.';charset=UTF-8', self::expUser, self::expPwd);
} catch (PDOException $e) {
die('Connect Failed: ' . $e->getMessage());
}
return $db;
关于php - Windows Server上的PDOException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11474281/