2012-03-31 59 views
1

我目前正在更新所有sql查詢到pdo,我將使用準備語句來防止sql注入攻擊。到目前爲止這麼好,我現在用pdo來計算行數。 我嘗試以下操作:打開php的pdo,計數行

$sqlQuery = "SELECT COUNT(*) FROM News"; 
$STIH = $DBH->query($sqlQuery); 
$rows_affected = $STIH->rowCount(); 
echo($rows_affected); // returning result is 1, it should be 1038 

然而,當我使用這樣的

$query = "SELECT COUNT(*) AS numrows FROM News"; 
$result = mysql_query($query) or die('Error, query failed'); 
$row = mysql_fetch_array($result, MYSQL_ASSOC); 
$numrows = $row['numrows']; 
echo ($numrows); // it return result which I expected which is 1038 rows. 

舊的代碼是什麼,我在這裏失蹤。 謝謝

+2

你爲什麼認爲'rowCount'和'fetch_array'做同樣的事情?!? – 2012-03-31 17:27:09

+0

@tereško認爲?這是什麼? PHP不是想着。它關於把代碼放在一起。 – 2012-03-31 17:41:08

回答

1

使用$sth->fetchColumn()來獲取數據。

$sqlQuery = "SELECT COUNT(*) FROM News"; 
$STIH = $DBH->query($sqlQuery); 
$rows_affected = $STIH->fetchColumn(); 
echo ($rows_affected); 
1

由於某些原因,您正在提取的數據不是數據,而是使用PDO進行計數。
只需用PDO讀取數據,就像用普通的mysql一樣操作

2

你會感到困惑。要獲得1038,您需要該行的結果。目前,您正在獲取SELECT COUNT返回的行數,即1行,其中有1個值。

0

由於您正在使用COUNT(),查詢返回標量。由於它是一個標量,因此它只有一行,因此它返回1.如果要獲得行數,只需使用查詢結果即可。