2012-10-25 112 views
2

我試圖學習和使用PHP中的PDO。我在query()方法中遇到過一個問題。PDO :: Query()返回false

我試圖用$sth = $db->query("SELECT * FROM titles ORDER BY RAND() LIMIT 1");爲網站隨機選擇一個標題,但由於某種原因,$sth始終是錯誤的。它適用於我使用prepare()和​​,但我試圖找到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'; 

} 
+0

嘗試讀取錯誤消息。 ''db-> getLastError()'的一些東西' –

+1

http://php.net/manual/en/pdo.errorinfo.php –

+0

找到它了。我在配置文件中定義了'$ dbsite',但我沒有將它設置爲全局函數....我的問題是變量範圍。 –

回答

17

使用PDO的errorinfo() function找出原因。

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]); 
+0

這個終於保存​​了幾個小時後我的屁股想知道爲什麼我沒有得到一個PDO異常,但同時使用直接查詢和準備語句時有一個虛假變量。願上帝保佑你,@Sammitch。 – armadadrive