• ベストアンサー

php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

  • PHP
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

書き方自体はおかしくないように見えます。 普通に、前方一致で抽出されたものが返ってくるはずです。 SQL文を echo してみて、それを コピペして phpMyAdmin に放り込んでみた場合は、結果がどうなるのか知りたいところです。

souitirou1
質問者

お礼

自己解決しました。 phpファイルの文字コードとデータベースの文字コードが違うのが原因でした。 エラーメッセージは出ないので、苦労しましたよ。 こんな初歩的なミスに気づくのに3日かかるとは。。。

souitirou1
質問者

補足

回答ありがとうございます。 >SQL文を echo してみて、それを コピペして~ この場合、取得したい内容が返ってきます。 phpでmysql_queryを使うときだけ、何かが起こっているのでしょうか。

その他の回答 (1)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

$変数に考えている内容のものが入っていないか、 見ただけでは判らない文字が入っているからではないでしょうか?

souitirou1
質問者

補足

回答ありがとうございます。 sql文をechoした限りでは、意図していない文字やよくわからない文字などは入っていないのですが。。。

関連するQ&A

  • phpMyadminとPHP上からの違い?

    おせわになります よろしくお願いします SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%' というSQL文があり、 phpMyadmin上からSQLを実行すると 4と表示されるのですが PHPから $sql = "SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_row($result); とすると0、$row[0]は0となります 特にエラーの表示もなく データベースへの接続も問題ないようなのですが 原因がわかるかたいらっしゃいましたら 教えて下さい 以上よろしくお願いします

    • ベストアンサー
    • PHP
  • 検索結果件数を取りたいです。

    環境は、php + mysqlで作ってます。 DBのテーブルに格納されている文字列をセレクト文で取り出して 対象件数が何個あるか知りたいです。 DBのテーブルに格納されている文字列はURLの文字列が入ってます。 例えば http://www.yahoo.com/ 確認のため、予め $obj = "http://www.yahoo.com/"; として、DBに入っているデータを書いておいて以下を実行しました。 $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/~~ といったエラーが出てしまいました。。。 今度は、予め数字を入れておいて実行してみました。 入れた文字は「123」です。 $obj = "123"; $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果:正しく対象件数がブラウザに表示されてました。 数字だと正しく処理されて、英文字だとエラーになる原因がわかりません。。 アドバイスいただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PhpMyAdmin

    PhpMyAdminを使ってMySQLのデータ確認をしていますが、 左フレームのテーブル名をクリックするとすぐに内容が表示されるようにしたいです。 現状は、左フレームのテーブル名をクリックするとカラムの型が表示されるので、右フレームのSQLをクリックし、SQL文を実行するか、右フレームの表示をクリックし、limit 30 をlimit 1000 ぐらいにしなければなりません。 FFFTPでPhpMyAdminのフォルダが見えます。

    • 締切済み
    • PHP
  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • プログラム内のINSERT文が実行されない。

    CGIのソース内でINSERT INTO テーブル名 SELECT文を使って行追加しているのですが、処理がエラーの場合の処理が動いてしまい実行されません。 ただ、同じSQL文をphpMyAdminのデータベースサーバーのSQLにコピペして実行すると問題なく行追加されました。 なので、問題があるとしたらそのプログラムだと思うのですが、原因がつかめません。 SQL文を変数に格納してから実行させてその結果によってエラーメッセージを出す処理は以下の通りです。 $sql = (INSERT INTO テーブル名 SELECT ****** FROM ***** WHERE ******) $ins_result = $db->prepare($sql); $num = $ins_result->execute; if ( not $num ) { &db_rollback; &db_disconnect; &msgout("エラー1","エラーメッセージ","システムエラー"); } すでに作られているプログラムを修正しています。ちなみに、そのプログラムを作った人はすでに現場にはいませんので聞けません。 msgout内に$ins_resultと$numを表示してみましたら、前者は「DBI::st=HASH(0x9f38560)」で、後者は何も入っていないつまり空でした。 【if ( not $num )】のif文も意味が分からないです。私の知識から解読すると $numの否定が真だったらカッコ内の処理を実行するという意味だと思いますが、$numは空なので空でないことが真だったらとなりますが、どういう意味なんでしょうか? プログラム内のSQL文がなぜ実行できなかったのかその原因を調べることができるツールとかあれば試すことができるのですが、データベースで実行して成功したところを考えるとあまり意味ないかもしれませんが。 過去カラム数が違ってたとか、追加データの長さが範囲外だったとかが原因だったことがありましたが今回はそのどちらでもなさそうです。

    • ベストアンサー
    • CGI
  • phpMyAdminのSQLクエリ実行について

    MySQLでデータベースを作ろうとしてphpMyAdminの、SQL>>『テキストファイルの場所』みたいなとこに.sqlのファイルを.gzに圧縮して、"gzip 方式"にチェックをして実行をしようとしましたがいかんせん時間がかかりすぎてなかなか実行できません。.gzのファイルの重さは1000KB足らずなのですが・・・。 1000KBは実行には重いんでしょうか?また、このような状況になったときに他にクエリを実行するにはどうしたらいいでしょうか? クエリはCREATE TABLEとINSERT INTOです。長文失礼しました。

    • ベストアンサー
    • MySQL
  • PHP phpMyAdmin

    hetemlのmysqlを利用しているのですが phpからmysqlへの格納が上手くいきません。 ■phpソース <?php $link = mysql_connect('サーバー名','ユーザー名','パスワード'); mysql_select_db('データベース名'); mysql_query("INSERT INTO myname VALUES ('test')"); echo mysql_errno($link); echo mysql_error($link); ?> ■phpMyAdmin テーブル myname を作成済 phpはエラーを出していないのですが テーブル myname のフィールドに test が格納されません。(変化ありません)

    • 締切済み
    • PHP
  • php+mysql sql文実行について

    データベースに「日付」「文章」を登録し、今日の日付に対応した文章が表示される仕組み(正確には朝の5時に変更)を作りたいと考えております。 以前は日付をタイトルとしたtxtファイルを作成し、その中身を読み込ませる仕組みだったのですが、今回mysqlを使用して同様のものを作成できればと思い試行錯誤しております。 データベースは 「maxim」というテーブルの中に、 date   main 071018 (文章)  071019 (文章) 071020 (文章) 071021 (文章) のように格納してあります。 date:主キー、varchar(6)、not null main:text、not null 作成したスクリプトは以下の通りですが、これを実行すると「エラー」が表示されてしまいます。 $dateによる文字列の取得、DBへの接続までは、echo、or dieにて確認済、またsql文をphpMyadminから実行した場合($dateを071018に書き換えて)、こちらも正常に取得できたのですが。 $dateをsql文に記述する際の囲みの問題かとも思い、「''」や「()」や「[]」で囲ってもみたのですがだめでした。 どなたかお知恵を拝借できますでしょうか。 宜しくお願い致します。 *サーバー、mysqlはともに「ロリポップ」を使用しております。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>テスト</title> </head> <body> <?php $date=strftime("%y%m%d",time()-5*3600); $server="mysql**.***.jp"; $dbname="********"; $user="********"; $pass="*****"; $conn = mysql_connect($server,$user,$pass); $sql="SELECT main FROM maxim WHERE date = '$date'"; $res=mysql_query($sql,$conn) or die("エラー"); echo "<b>$res</b>"; mysql_close($conn); ?> </body> </html>

    • ベストアンサー
    • PHP
  • SQL whereの中のif文について

    SQLの中にif文を使いたいですが、 うまくいきません。 やはりwhereの中で使えないですか? アドバイスお願いします。 実際のSQL文: $sql = "select * from room";     $sql = $sql . " WHERE ((Keisai = 1)"; if(Chinryou1>0){ $sql = $sql . " and (Chinryou1 <= {$rent1})";     }else if(Chinryou1==0){ $sql = $sql . " and (Chinryou2 <= {$rent1})";    } $sql = $sql . ")"; $sql = $sql . " order by Narabijun desc, Name"; $sql = $sql . ";"; $result = mysql_query($sql, $conn); $num = mysql_num_rows($result);

    • ベストアンサー
    • MySQL
  • phpmyadminのリレーション

    SELECT * FROM table1,table2 WHERE table1.id=table2.data_id; phpmyadminにて、上記のようなSQL文を実行してtable1とtable2のデータを リレーションにより表示します。 この時に表示した内容のテーブルを新規作成するにはどうすれば良いでしょうか?

    • ベストアンサー
    • MySQL

専門家に質問してみよう