- ベストアンサー
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 みたいな動きをする関数はありませんか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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以上なら有りと言う事になります。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
かなり違います。 mysql_queryはクエリを実行して結果セットを返します。 じゃぁクエリを何処に対して実行するのか? それはDB接続オブジェクトです。掲題ではSQLしか ありません。この場合、現在アクティブなDB接続が 存在しないとエラーになります。DB接続を開くのが 先決です。 次に結果セットはデータの集合なので、いきなり 覗いても値は得られません。 フェッチしてレコードを取得し、レコードが取れるか どうかで決定すべきです。 $a = mysql_query("select ~",DB接続$); $x = mysql_fetch_object($a); if ( !$x ) { レコードが無い時の処理 } else { レコードが有る時の処理 }
- yambejp
- ベストアンサー率51% (3827/7415)
なにを参考にしました? 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
- shimix
- ベストアンサー率54% (865/1590)
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')でも書いておくといいかもしれません(本番環境だと例外を投げて適切な処理をすることになるんでしょうけど)。
お礼
お陰様でやりたいことが 出来ました。 ありがとうございました。