2013-02-21 60 views
-1
與此類似

林執行代碼:PDO SELECT語句後返回錯誤rowCount時()

// first select 
$query = $link->prepare(" 
      SELECT id FROM table 
      WHERE name = ?;"); 

$param = 'foo'; 

$query->bindParam(1, $param); // should return 1 row 
$query->execute(); 
echo $query->rowCount(); // displays 0 (??????) 

其他例如:

// second select 
$query = $link->prepare(" 
      SELECT id FROM table 
      WHERE name = ?;"); // should return 0 rows 

$param = 'bar'; 

$query->bindParam(1, $param); 
$query->execute(); 
echo $query->rowCount(); // displays 1 (?????) 

我的表:

id | name 
--------- 
1 | foo 

我不理解。

+2

只是一個狂刺 - 我不認爲你需要在分析結束時的分號。 – Raad 2013-02-21 13:22:35

+1

順便說一句,你不需要準備2次執行。只有綁定。這是主意。 – 2013-02-21 13:23:48

+0

@YourCommonSense我不會執行它們,只是在一個代碼塊中顯示2個示例。 – Kamil 2013-02-21 16:35:28

回答

1

有些數據庫返回SELECT語句返回的行數。但是,這種行爲不能保證所有數據庫,不應該依賴。 Manual您可以使用COUNT(*)fetchColumn()作爲以下查詢來模擬rowCount()

$query = $link->prepare("SELECT COUNT(*) FROM table WHERE name = ?"); 
$param = 'bar'; 
$query->bindParam(1,$param); 
$query->execute(); 
// Check the number of rows that match the SELECT statement 
if($query->fetchColumn() == 0) { 
    echo "No records found"; 
}else{ 
     $query = $link->prepare("SELECT id FROM table WHERE name = ?") 
     //Etc 
} 
+0

謝謝。我已經與COUNT有類似的查詢。 – Kamil 2013-02-21 22:42:43

1

bindParam方法是錯誤的,它期望變量或變量的名稱。您想要使用bindValue來代替,它需要您使用的文字值。

手冊參考:

+0

在我的應用程序中,我在那裏綁定變量。我試圖簡化代碼示例,並將字符串放在那裏。無論如何,我不知道我不應該/不能調用bindParam的值。謝謝。 – Kamil 2013-02-21 16:40:40