プロが教えるわが家の防犯対策術!

mysql> SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' ) ; で
+------+
| rows |
+------+
| 9 |
+------+
と出すことができます。 この rows の数「9」を php の変数に入れたいのです。
<?php
// DB接続省略
$sql = "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' )" ;
$result = mysql_query($sql, $conn);
var_dump($sql."<br />");
echo ($result."--result"."<br/>");
$rows= mysql_num_rows($result);
echo ($rows."--rows"."<br/>");
?>
として、ブラウザで確認すると
string(80) "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' )
" Resource id #3--result
1--rows
となって、 $rows に値’9’が入りません。$rows にレコード数を取得させるには、どうすれば良いでしょうか?

A 回答 (1件)

mysql_num_rowsはクエリを実行した結果セットの行数です。

つまり列名rowsに値として9が入っている1行だけです(count()をselectしていますから当然ですね)。

どの関数がどういうものを返すのかはマニュアルを読めば書いています。熟読すればこういう間違いはあり得ません。

select count(*) as rows from ・・・ というSQL文を実行したのであれば、

if ($row = mysql_fetch_array($result)) {
$rows = $row['rows'];
} else {
die('cannot fetch data');
}

です。

mysql_num_rowsを使うなら、SQL文は「select * from ・・・」です(全部の結果セットを得て、その行数を調べます)。



なお、mysql_queryが返すのはリソースIDですから$resultという変数名には違和感があります。またネイティブなMySQL関数は(マニュアルに記載があるとおり)すでに非推奨です。今から覚えるならMySQLiもしくはPDOを使ってください。
    • good
    • 0
この回答へのお礼

ご教示ありがとうございました。ご指摘の諸点は、なるほど、と納得です。
rows の値も取得できました。
また少しづつでも前進していく所存です。重ねて、ありがとうございました。

お礼日時:2012/11/08 19:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!