我正在開發一個數據庫類,它在執行返回數據集的查詢的情況下也執行數據安排。我的問題是:我使用一種單一的方法來執行所有查詢,但PDO總是返回真或假執行,我沒有找到一種方法來檢查,如果我必須獲取數據並返回它或只是返回執行結果。檢查PDO查詢是返回數據還是布爾值
會發生什麼,例如,當它是一個select語句時,它將返回提取的數據,但是當它是非返回數據查詢時,例如更新,它只需返回布爾執行結果。
這裏的方法:
<?php
public function query($sqlobj) {
$stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues));
$res = $stmt->execute();
if ([$res IS A DATASET]) {
$res = $stmt->fetchAll();
}
return $res;
}
?>
在mysqli的,這是非常簡單的,原因查詢返回false失敗,真正爲不返回數據(例如:update語句)成功查詢和數據成功的查詢集合資源,從DB帶來數據(SELECT,COUNT,DESCRIBE等),所以這是一個簡單的檢查:
<?php
if($res !== true && $res !== false){
// fetch results
}
?>
是否有執行上的PDO此檢查的方式,太?我做了大量的研究,並且發現了關於PDOStatement :: rowCount和關於使用PDOStatement :: fetch()的一些事情,並檢查它是否返回false。第二個看起來更有趣,但它並沒有解決問題,但是,因爲對於非數據返回查詢以及對於返回空數據查詢的結果,我會得到錯誤。任何精彩的想法,鄉親們?
函數query'執行查詢,這就是它應該做的。提取recodrs應該用另一個函數完成。 –
我同意@u_mulder,但是如果這是你想要的方向,那麼看看'$ res-> columnCount()' - 如果沒有結果集,它將爲零,如果有結果則爲非零設置,即使它是空的。 –
謝謝@NiettheDarkAbsol!我會檢查這個columnCount方法。 –