使用PDO和Memcache的“智能”缓存系统(“Smart” Caching System usi

2019-10-17 17:53发布

我正在使用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的连接已经建立。 我总是得到以下错误:

编辑:将错误模式属性之后,我现在得到一个更详细的错误:

致命错误:未捕获的异常“PDOException”有消息“SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法错误; 检查对应于你的MySQL服务器版本正确的语法使用附近的手册:在/chroot/home/html/session.php:170第1'行“LIMIT 1”

^这是怎么回事与该?

Answer 1:

貌似$db->prepare()返回一个错误,那么你的$stmt变量是不是一个真正的PDOStatement的对象。 使用$db->errorInfo()看看有什么地方出了错。 你也可以把它放到一个try-catch块,如果您已设置适当的属性(见错误和错误处理 )。

要看到,如果你的连接正常,您还可以使用的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();
}


文章来源: “Smart” Caching System using PDO and Memcache