2

PHP で PDO を学習して使用しようとしています。query() メソッドで問題が発生しました。

ウェブサイトのタイトルをランダムに選択しようとしてい$sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");ますが、何らかの理由で$sth常に false です。と を使用するprepare()と機能execute()しますが、 の何が問題なのかを見つけようとしていますquery()

呼び出されている関数全体は次のとおりです。

function getTitle($db)
    {
    if($db)
        {
            $db->exec("USE " . $dbsite); 
            $sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");
            $title = $sth->fetch(PDO::FETCH_ASSOC);

            $db->exec("UPDATE titles SET count = count + 1 WHERE id = " . $title['id']);

            return $title['title'];
        }
    else
            return 'Home - Database Offline';

}
4

1 に答える 1

25

その理由を調べるには、PDO のerrorinfo()関数を使用します。

if( ! $sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1") ) {
  die(var_export($db->errorinfo(), TRUE));
}

遅い更新

私の古い答えをより良くするために、エラー時に例外をスローするように PDO を設定することは、すべての関数の戻り値をチェックするよりもはるかに扱いやすいです。

$dbh = new PDO($connstr, $user, $pwd);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

または、より簡潔に:

$dbh = new PDO($connstr, $user, $pwd, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
于 2012-10-25T18:07:56.697 に答える