2017-07-02 163 views
0

我正在開發一個數據庫類,它在執行返回數據集的查詢的情況下也執行數據安排。我的問題是:我使用一種單一的方法來執行所有查詢,但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。第二個看起來更有趣,但它並沒有解決問題,但是,因爲對於非數據返回查詢以及對於返回空數據查詢的結果,我會得到錯誤。任何精彩的想法,鄉親們?

+1

函數query'執行查詢,這就是它應該做的。提取recodrs應該用另一個函數完成。 –

+1

我同意@u_mulder,但是如果這是你想要的方向,那麼看看'$ res-> columnCount()' - 如果沒有結果集,它將爲零,如果有結果則爲非零設置,即使它是空的。 –

+0

謝謝@NiettheDarkAbsol!我會檢查這個columnCount方法。 –

回答

0
public function query($sqlobj) { 
    $stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues)); 
    $res = $stmt->execute(); 

    if ($res) { 
     $result = $stmt->fetchAll(); 
     foreach ($result as $key => $row) { 
      echo $link['your_column1']; 
     } 
    } 

} 
0

在評論中,用戶@NiettheDarkAbsol給了我正確的答案和他沒有張貼答案本身,我會做到這一點。

現在的問題是:如果所有的信息PDO給我的成功或失敗的失敗,我該如何檢查它的查詢結果是否可以獲取?答案是PDOStatement對象::信息columnCount()方法:

<?php 
    public function query($sqlobj) { 
     $stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues)); 
     $res = $stmt->execute(); 

     if ($stmt->columnCount() > 0) { 
      $res = $stmt->fetchAll(); 
     } 

     return $res; 
    } 
?> 

正如他所說的,信息columnCount()將返回我的查詢結果集的列數,即使它是空的。如果查詢返回不可捕獲的結果,則columnCount()將返回0.

謝謝@NiettheDarkAbsol!