2

我正在尝试在 PHP 中学习和使用 PDO。我在 query() 方法中遇到了一个问题。

我试图用$sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");随机选择一个网站的标题,但由于某种原因,$sth总是错误的。当我使用prepare()and时它可以工作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 回答