アプリ版:「スタンプのみでお礼する」機能のリリースについて

同じ質問が数多くあるようですが、どうにもうまくいかない為恐縮ですが質問させて頂きました。
私はPHPとMYSQLを使ってホームページを作成しております。
やりたいことは、DBのTBに数百ある情報をPHPで幾つかの条件で絞り込み検索をかけることで、それ自体はできたのですが、何件の結果が抽出されたかを表示することができません。

例:○○件の検索結果が表示されました。 ←こんな感じにしたいのです。


他の質問を参考に以下のように記述をしたのですがどうにもうまくいきません。

$sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2'";
print 'sql_num_fields( $sql ) . "\n"件の検索結果が表示されました';

どのような点が問題なのか教えていただけますでしょうか?
できればソースを教えていただけると助かります。

A 回答 (10件)

以下簡素化したPDOサンプルです。


今のコードに合わせてカスタマイズしてみてください。

<?php

#以下データベース名、ユーザー名、パスワードをセット
$dbname='';
$username='';
$password='';

#PDOのデータベースオブジェクト作成
$db = new PDO("mysql:host=localhost;dbname=".$dbname,$username,$password);

#$dbを使って結果セット取得
$sql="SELECT * FROM estate WHERE 価格 BETWEEN $price1 AND $price2 AND 駅距離1 BETWEEN $minute1 AND $minute2 AND 市区町村 ='$area1'";
$res=$db->query($sql);
$rows=$res->fetchAll(PDO::FETCH_ASSOC);

#結果セットを使ってリスト出力
foreach($rows as $r){
echo $r['施設名'].' '.$r['価格'].' '.$r['交通'].' '.$r['所在地']."<br />\n";
}

#合計件数出力
echo '<br />合計'.$res->rowCount().'件です';
    • good
    • 1
この回答へのお礼

ありがとうございます!
ようやく待ちに待った結果が出てきました!
感無量です。
長い間おつきあい頂き本当にありがとうございます。

お礼日時:2012/11/23 17:09

こんにちは。



あらら、PDOでしたか・・・。
すでに#8さんが回答しておられるので控えます。
    • good
    • 0

最近の書籍でしたら、今メジャーなPDOを使ってると想定しまして、


PDOはrowCount()で件数取得します。

結果セット取得コマンド
$res = $db->query('SELECT * FROM table ');

件数出力
echo $res->rowCount();
    • good
    • 0
この回答へのお礼

ありがとうございます。
仰る通りにやってみたのですがほんとに情けなくなるのですがまだできません。
アマゾンで評価が高かった本を買ってみたもののどうやら古いらしくアドバイス頂いた$resやPDO については調べても何も書いてありませんでした…

その結果
Notice: Undefined variable: db in C:\xampp\htdocs\pub004\src\kensaku.php on line 67
のエラーが出てしまいます。

既にちゃんと動いている
$sql =("SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2 AND 駅距離1 BETWEEN $minute1 AND $minute2 AND 市区町村 ='$area1'");
こちらからコピーをしてるのでつまらないミスはないと思うのですがなぜでしょうか?


こちらがアドバイスを元に作ったものです。上記$sqlのすぐ下に置いております。
$res = $db->query("SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2 AND 駅距離1 BETWEEN $minute1 AND $minute2 AND 市区町村 ='$area1'");
echo $res->rowCount();

何度もお付き合い頂いて恐縮ですがよろしくお願いいたします。

お礼日時:2012/11/22 20:26

ひとつ気になるんですが、


phpにはmysqlにアクセスする手段が複数あるんですが、mysql_query()でmysqlにアクセスしてますよね?
pdoとかmysqliとかでないですね?
方法ごとにコマンド群が微妙に違いますから、mysql_query()以外で検索かけた場合、件数の摂りかたが変わりますよ。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
お返事が遅くなってしまい申し訳ございません。
そもそもmysql_query()自体使ってないと思います。

なんとなくそのあたりが自分でもあまり理解できてなく、
ネットでみなさんが使ってる手段と比べると私の手法はマイノリティな気がしています。

とりあえず改めて本を買って現在にらめっこをしているところです。
やっぱりそのあたりの基礎がわかっていないのかなと。。。

お礼日時:2012/11/21 22:22

こんにちは。



エラーが発生している行が67行目なので、
そのあたりをコピペで掲載できますか?

できれば1から67行目まであれば有難いです・・・。
※個人情報に当たる部分はマスクしてください。
    • good
    • 0
この回答へのお礼

こんばんわ。
完全に諦めていてお返事が遅くなって申し訳ありません。
以下、SQLについて記載いたします。
先日色々試した時と多少の行のずれはあるかもしれませんが、phpの頭から終わりまで記載いたしました。(一部大勢に影響がない範囲で表示しておりませんが)
エラーメッセージは
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pub004\src\kensakuQQQ.php on line 68
という記載になっております。

たびたびお力添え頂きありがとうございます。
よろしくお願いいたします。

42 <?php
43 $area1=$_POST['area1'];
44 $price1=$_POST['price1'];
45 $price2=$_POST['price2'];
46 $minute1=$_POST['minute1'];
47 $minute2=$_POST['minute2'];
48
49
50 $dsn ='mysql:dbname=phpkiso;host=localhost';
51 $user ='root';
52 $password ='';
53 $dbh = new PDO($dsn,$user,$password);
54 $dbh->query('SET NAMES UTF-8');
55
56
57 $sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2 AND 駅距離1 BETWEEN $minute1 AND $minute2 AND 市区町村 ='$area1'";
58 $stmt =$dbh->prepare($sql);
59 $data[]=$price1;
60 $data[]=$price2;
61 $data[]=$minute1;
62 $data[]=$minute2;
63 $data[]=$area1;
64
65 $stmt->execute($data);
66
67 $test1=mysql_query($sql);
68 print mysql_num_rows($test1) . '件の検索結果が表示されました';
69
70 while(1)
71 {
72$rec =$stmt->fetch(PDO::FETCH_ASSOC);
73if($rec==false)
74{
75break;
76}
77echo '<table border="1" cellspacing=0 cellpadding=5 width=770>';
78
79echo '<tr><td width="25%">施設名</td>';
80echo '<td width="10%">価格</td>';
81echo '<td width="15%">交通</td>';
82echo '<td width="20%">所在地</td>';
85echo '<td width="8%">リンク</td></tr>';
86
87
88echo '<tr><td>'.$rec['施設名'].'</td>';
89echo '<td>'.$rec['価格'].'万円</td>';
90echo '<td>'.$rec['交通'].'</br>'.$rec['最寄駅1'].' '.$rec['駅距離1'].'分 91</td>';
92echo '<td>'.$rec['所在地'].'</td>';
95echo '<td><a href="'.$rec['URL'].'"></a></td></tr>';
96echo '</table>';
97echo '</br>';
98
99 }
100
101
102 $dbh =null;
103 ?>

お礼日時:2012/11/21 22:16

もしかして件数表示の行で何かタイプミスとかしてないですか?



あるいは
echo mysql_num_rows($r);
とか
print_r($r);

したらどうなりますか?($rはmysql_queryの結果セット)
    • good
    • 0
この回答へのお礼

いろいろとやり方を教えて頂きありがとうございます。
thezen5さんの仰るようにやりながら、何か落ち度はないかとあれこれやってみたのですがどうにもうまくいきませんでした。
自分にはまだ早かったのかと思い、今回は諦めることにしました。
たびたびアドバイス頂き本当にありがとうございました。

お礼日時:2012/11/17 22:51

こんばんは。



>>元になっているSQLからの呼び出しは正常に作動していて、検索結果も思った通りに表示されているのです。

だとすれば、そこで

変数1=mysql_query($sql);
while (変数2=mysql_fetch_row) {
・・・

とかってやってますよね?
この変数1を
mysql_num_rows(変数1)
とすれば、エラーにはならないはずですが・・・。
    • good
    • 0
この回答へのお礼

たびたびありがとうございます。
どうにもおっしゃる通りやってみているのですができませんでした。
ロジックも理解して他に自分のミスがないか確認はしているのですがうまくいきませんでした。

taka451213さんには何度もお答え頂いて恐縮なのですが諦めることにしました。
本当にありがとうございました。

お礼日時:2012/11/17 22:49

こんにちは。



>>Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given
SQLエラーです・・・。

エラーにならないSQLを実行してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
しつこくてすみません。

SQLエラーについて調べてみました。
元になっているSQLからの呼び出しは正常に作動していて、検索結果も思った通りに表示されているのです。
ですが、検索件数の本来数字を出したい箇所だけにエラーが表示されている状態です。
ちなみに質問をさせていただいた記述は簡素化していて実際のプログラムではBETWEENを複数回使用して検索をしています。ご相談させて頂いた前提条件に問題があるのでしょうか?

$sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2 AND 駅距離1 BETWEEN $minute1 AND $minute2 AND 市区町村 ='$area1'";

実際に使用したSQLです。
たびたび恐縮ですがよろしくお願いいたします。

お礼日時:2012/11/17 17:01

これではだめですか?


ちなみにmysql_num_fieldsは件数じゃなくてフィールド数を取得するコマンドですが

$r = mysql_query("SELECT * FROM estate WHERE 価格 BETWEEN $price1 AND $price2");
print mysql_num_rows($r) . "\n件の検索結果が表示されました";
    • good
    • 0
この回答へのお礼

お返事ありがとうございます!

さっそくやってみたのですが
print mysql_num_rows($r) . "\n件の検索結果が表示されました";
この記述に対して

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pub004\src\kensaku.php on line 67
件の検索結果が表示されました

というエラーが出てきてしまいました。
頂いたソースの前半は何も出てこなかったのでうまく働いているみたいです。
print の指示の際に何か注意しなければならないことあるのでしょうか?

お礼日時:2012/11/17 16:15

こんにちは。



そもそも、'(シングルコーテーション)で囲ったら駄目です。
ただの文字列になっちゃいますよ・・・。

件数の取得は、
mysql_num_rows()
です。

それから、引数に渡すのはSQL文字列でなくて実行結果のリソースです。

なので、件数だけほしいなら、
$sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2";
print mysql_num_rows(mysql_query($sql)) . '件の検索結果が表示されました';
みたいになりますが?
    • good
    • 0
この回答へのお礼

さっそくの投稿ありがとうございます。

print mysql_num_rows(mysql_query($sql)) . '件の検索結果が表示されました';
この結果が
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pub004\src\kensaku.php on line 66 件の検索結果が表示されました
というエラーが出てしまいます。

何か根本的な設定などでいまひとつな部分があったりするものなのでしょうか?
無知で恐縮ですがお願いいします。

お礼日時:2012/11/17 16:07

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