2012-03-31 56 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.如果要获得行数,只需使用查询结果即可。