通过一些检查,即使我的主机上安装了MysqLi,显然MysqLnd驱动程序也不存在。因此,不能使用get_result()(PHP手册将get_result定义为MysqLnd依赖),取而代之的是,需要做一些额外的编码以按我希望的方式处理我的结果。
因此,我决定尝试并了解PDO的工作原理,几分钟之内,瞧!
将上面的代码替换为:
function checkUsernameEmailAvailability($username, $email) {
echo 'pdo about to be created';
$dsn = 'MysqL:dbname='.C_BASE.';host='.C_HOST;
$user = C_USER;
$password = C_PASS;
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection Failed: ' . $e->getMessage();
}
$params = array(':username' => $username, ':email' => $email);
try{
$sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
} catch(PDOException $e) {
echo 'Prepare Failed: ' . $e->getMessage();
}
try{
$sth->execute($params);
} catch(PDOException $e) {
echo 'Execute Failed: ' . $e->getMessage();
}
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
}
我可以想到的错误检查量不多,而且一开始就完全没有问题!
function checkUsernameEmailAvailability($username, $email) {
$dsn = 'MysqL:dbname='.C_BASE.';host='.C_HOST;
$user = C_USER;
$password = C_PASS;
new PDO($dsn, $user, $password);
$params = array(':username' => $username, ':email' => $email);
$sth = $dbh->prepare('SELECT username,email FROM tb_users WHERE username = :username OR email = :email ');
$sth->execute($params);
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
}