2012-03-31 12 views
1

私は現在、pdoへのすべてのsqlクエリを更新しています。ここでは、SQLインジェクション攻撃を防ぐためにprepare文を使用します。今のところうまくいけば、私はpdoで行を数えることに悩まされています。 私は、次の試してみました:php pdoへのswithing、行数の計算

$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'が同じことをすると思いますか? –

+0

@tereškoさんと思いますか?これは何ですか? PHPは考え方に関するものではありません。コードをまとめて書くこと。 –

答えて

1

$sth->fetchColumn()を使用してデータを取得します。

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

なんらかの理由でデータは取得せず、PDOで行数を取得しています。
普通のmysqlと同様にPDOでデータを取得するだけです

2

あなたは混乱しています。 1038を得るには、行の結果が必要です。現在、SELECT COUNTが返す行の数が1行で、その中に1つの値があります。

0

COUNT()を使用しているため、クエリはスカラーを返します。これはスカラーなので、1つの行しか持たないため、1を返します。行の数を求めたい場合は、クエリの結果を使用してください。