みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpでmysql操作について

↓DB

id name
1 a
2 ab
3 abc


↓php

$a = mysql_query("select name from information where name = 'abc'");

DBにabcがあったかなかったかを
$aに返してほしいのですが、
これの$aが常に0です。
どこか間違っているのか、それともそういう
動きをしないものなのでしょうか?

あれば1またはtrue
なければ0またはfalse

みたいな動きをする関数はありませんか?

投稿日時 - 2012-02-03 16:08:38

QNo.7283014

困ってます

質問者が選んだベストアンサー

mysql_query関数の戻り値は、データでは無く実行結果のリソースが入っています。
http://www.php.net/manual/ja/function.mysql-query.php

そのままではDBをSELECTした結果を見られませんので、mysql_fetch_row関数などリソースからデータを取り出す関数を使ってデータを取り出しましょう。

abcがあったかなかったかを知りたいのであれば
$a = mysql_query("select count(*) as count from information where name = 'abc'");
$b = mysql_fetch_row($a);
echo $b[0];
とすると、name = 'abc' の条件に合致したレコード数が出力されますので、0なら無し、1以上なら有りと言う事になります。

投稿日時 - 2012-02-03 17:20:11

お礼

お陰様でやりたいことが
出来ました。
ありがとうございました。

投稿日時 - 2012-02-06 09:28:40

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

かなり違います。
mysql_queryはクエリを実行して結果セットを返します。
じゃぁクエリを何処に対して実行するのか?
それはDB接続オブジェクトです。掲題ではSQLしか
ありません。この場合、現在アクティブなDB接続が
存在しないとエラーになります。DB接続を開くのが
先決です。
次に結果セットはデータの集合なので、いきなり
覗いても値は得られません。
フェッチしてレコードを取得し、レコードが取れるか
どうかで決定すべきです。
$a = mysql_query("select ~",DB接続$);
$x = mysql_fetch_object($a);
if ( !$x ) {
  レコードが無い時の処理
}
else {
  レコードが有る時の処理
}

投稿日時 - 2012-02-03 17:23:41

ANo.2

なにを参考にしました?
mysql_queryの戻り値はリソースです。
そこからデータを抽出するにはそれなりの処理が必要です。

今回の例だと
$res = mysql_query("select name from information where name = 'abc'");
$a=(mysql_num_rows($res)>0)?1:0;
のように戻り行数を数えるか

$res = mysql_query("select count(*)>0 as a from information where name = 'abc'");
$row= mysql_fetch_array($res,MYSQL_ASSOC);
$a=$row["a"];
のようにSQLで結果を返して変数に受けるようなやり方になります

http://www.php.net/manual/ja/function.mysql-query.php

投稿日時 - 2012-02-03 17:19:39

ANo.1

mysql_query

http://jp.php.net/manual/ja/function.mysql-query.php
----- 引用ここから
SELECT, SHOW, DESCRIBE や EXPLAIN 文、その他結果セットを返す文では、 mysql_query() は成功した場合に resource を返します。エラー時には FALSE を返します。
----- 引用ここまで

要するに「エラーになっている」としか思えません。mysql_connectやmysql_select_dbの戻り値は問題ありませんか?同じSQL文をphpMyAdminで投入したらどうなりますか?

(蛇足)
デバッグ時は、mysql_connectやmysql_select_db、mysql_queryは右側にor die('error')でも書いておくといいかもしれません(本番環境だと例外を投げて適切な処理をすることになるんでしょうけど)。

投稿日時 - 2012-02-03 17:19:22

あなたにオススメの質問