我正在开发一个使用pdo和memcache的“智能”缓存系统。但是,我遇到了这个错误。你能救我一下吗?
我的代码:
$session = "a121fd4ztr6";
cache_query("SELECT * FROM `session` WHERE `session` = :session: LIMIT 1;", array(':session:' => $session));
// CACHE QUERY
function cache_query($sql, $params) {
global $db;
global $memcache;
$name = 'querycache-'.md5(serialize(array($sql, $params)));
$result = $memcache->get($name);
if (!$result) {
if(!($db)){
require("db.php");
}
$stmt = $db->prepare($sql);
$exec = $stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$memcache->add($name, $result);
}
return $result;
}
db.php建立与PDO的连接。已建立Memcache连接。我总是收到以下错误:
编辑:添加错误模式属性后,我现在得到更详细的错误:
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在/chroot/home/html/session.php:170
的第1行''LIMIT 1'附近使用正确的语法^那是怎么回事?
答案 0 :(得分:1)
看起来$db->prepare()
会返回错误,因此您的$stmt
变量不是真正的PDOStatement
对象。使用$db->errorInfo()
查看出现了什么问题。如果您设置了适当的属性,也可以将它放到try-catch块中(参见Errors and error handling)。
要查看您的连接是否正常,您还可以使用try-catch:
try {
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}