2015-01-09 159 views
-3

有人可以向我解釋爲什麼函數1中的prepare語句不返回結果,但函數2中的查詢語句確實返回結果(12)。PDO準備語句不返回結果

class Test 
{ function function1($db) 
    { 
     //date_default_timezone_set('America/Chicago'); // CDT 
     $month = "January"; //date('F'); 
     $day = "9"; //date('j'); 
     // let's query for died today 
     $stm = $db->prepare("SELECT * FROM graves WHERE dod_month = ? AND dod_day = ? ORDER BY dod_year DESC"); 
     $stm->bindValue(1, $month, PDO::PARAM_STR); 
     $stm->bindValue(2, $day, PDO::PARAM_STR); 
     // $stm = $db->query("SELECT * FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC"); 
     $affected_rows = $stm->rowCount(); 

     $stm->execute(); 

     var_dump($affected_rows,$month,$day); 
    } 

function function2($db) 
{ 
     //date_default_timezone_set('America/Chicago'); // CDT 
     //$month = "January"; //date('F'); 
     //$day = "9"; //date('j'); 
     // let's query for died today 
     // $stm = $db->prepare("SELECT * FROM graves WHERE dod_month = ? AND dod_day = ? ORDER BY dod_year DESC"); 
     // $stm->bindValue(1, $month, PDO::PARAM_STR); 
     //$stm->bindValue(2, $day, PDO::PARAM_STR); 
     $stm = $db->query("SELECT * FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC"); 
     $affected_rows = $stm->rowCount(); 

     $stm->execute(); 

     var_dump($affected_rows); 
    }   


} 

結果的var_dump的是:

INT 0

字符串 '一月'(長度= 7)

字符串 '9'(長度= 1)

INT 12

回答

3

因爲在第一個函數中,實際執行語句的那一行是可執行的在之後你可以得到行數

+1

它被執行。 '$ stm-> execute()'除了OP在execute語句之前請求受影響的行之外。所以它返回0. – Mouser 2015-01-09 23:21:50

+0

@Mouser謝謝! – GolezTrol 2015-01-09 23:25:07

+0

謝謝,這不是我第一次這麼做......知道它必須是簡單的東西,因爲類似的代碼在過去有效。 – Artie 2015-01-09 23:56:58

0

根據文檔:

PDOStatement對象:: rowCount時()返回受 最後刪除行,插入或更新語句由相應 PDOStatement對象對象所執行的數目。

如果由關聯的PDOStatement執行的最後一條SQL語句是 的SELECT語句,某些數據庫可能會返回該語句返回的行數 。但是,對於所有數據庫,此行爲不保證 ,不應依賴便攜式 應用程序。

你可以通過調用SELECT COUNT(*) FROM graves WHERE dod_month = 'January' AND dod_day = '9' ORDER BY dod_year DESC

1

設法扭轉在第一個查詢語句的順序如下簡單QUERTY行數:

$stm->execute();  
$affected_rows = $stm->rowCount(); 
+0

是的,這是...謝謝。我的經驗是,查詢語句將返回結果而不發出執行,並且在函數2中不需要執行 – Artie 2015-01-10 00:03:22