1

私は、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 構文にエラーがあります。/chroot/home/html/session.php:170 の ': LIMIT 1' at line 1' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

↑それはどうなっているのですか?

4

1 に答える 1

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();
}
于 2013-02-27T17:49:26.390 に答える