PHP / MySQLクエリ実行で結果が返らない理由と解決方法

このQ&Aのポイント
  • PHPからMySQLへのクエリを実行したいが結果が返らない場合の解決方法を紹介します。
  • クエリの実行部分でエラーが発生している可能性があります。phpMyAdminで実行した場合には問題なく結果が返ることから、クエリ自体に問題はないと考えられます。
  • 原因としては、変数の初期化やセットの部分で何か問題がある可能性があります。SET文の削除を試すとエラーにならないため、SET文が原因の可能性が高いです。
回答を見る
  • ベストアンサー

PHP / MySQL / クエリ実行

【概要】 PHPからMySQLへのクエリを実行したいのですが、結果が返りません。 【環境】 CentOS5 [PHP5] sakuraインターネット レンタルサーバ スタンダートプランです。 参考:http://www.sakura.ne.jp/rentalserver/matrix.html 【ソース PHP】 ------------------------------------------------------------ $query =  mysql_query(' SET @i := 0; SET @ii := 0; SET @iii := 0; SET @iiii := 0; select `sys_no`,`day`,`counter`,(@iiii := @iiii +1)as `counter2` from (select `sys_no`,`name`,`day`,(@i := @i +1) as `counter` from TBL名 ORDER BY `day` DESC ) as aa where counter BETWEEN (select a.counter from (select `sys_no`,`day`,(@ii := @ii +1) as `counter` from TBL名 ORDER BY day DESC ) as a where sys_no =5) - 1 AND (select a.counter from (select `sys_no`,`day`,(@iii := @iii +1) as `counter` from TBL名 ORDER BY day DESC ) as a where sys_no =5) + 1 '); while ($row = mysql_fetch_array($query)) { 結果取得処理 } ------------------------------------------------------------ ・上記をPHPより実行しますと、「while~」の部分で結果が無いとエラーが返ります。 ・phpMyAdminから直接クエリの部分のみを実行しますと、問題無く結果が返ります。 ・なお、クエリを簡単な一行程度の内容にしますと問題無く実行され、結果が返ります。例:select * from TBL名 ・また、上部にセットしている4つのSETを試しに削除した状態でPHPより実行しますと、結果は返りませんがエラーにはなりません。 以上、アドバイス頂戴できますでしょうか。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5083/13282)
回答No.1

PHPのマニュアルに書かれている通り、mysql_query は ひとつのクエリのみ処理でき、複数クエリの送信はサポートしていません。 質問者様が書かれているSQL文は、SETが4つとSELECTが1つの計5つのクエリーからなるモノですので処理できずにエラーになっています。

参考URL:
http://www.php.net/manual/ja/function.mysql-query.php
OracleMr
質問者

お礼

早々にお返事を頂きまして誠にありがとうございます! http://php.net/manual/ja/mysqli.multi-query.php こちらを参考に multi_query()を使用するコトで解決致しました! 本当にありがとうございます(^^

関連するQ&A

  • MySQL + PHP 同じテーブル内でのクエリについて

    PHP+MySQL勉強中の初心者です。 PHP+MySQL環境でのクエリについて、以下の条件でのクエリ結果を求めたいのですが、上手くできませんので、質問させてください。 MySQLのテーブルは以下のようになっています。 date        no   name ---------------------------- 2009-12-10   15   takada 2009-12-15   10   hirooka 2009-12-18   13   wakada 2010-01-10   15   takada 2010-01-11   13   wakada ----------------------------- 出力させたいクエリは、前月データを元にno列をKEYとした重複チェックです。 前月データを全件出力し、当月データに同じnoがあった場合、当月日付を 表示させたいと思っています。 (PHPで希望する出力結果) date       no   name     date2 ---------------------------------------- 2009-12-10  15   takada   2010-01-10 2009-12-15  10   hirooka 2009-12-18  13   wakada   2010-01-11 ----------------------------------------- 以下のようなソースでは、1行のみの出力結果しか表示されず、 whileの使い方に問題があると思うのですが、どのように解決すれば良いのかが解りません。 どうか、解決策をよろしくお願いいたします。 $mysql->query("SELECT * FROM xxxx where date LIKE '$y-$m%'"); while($row = $mysql->fetch()){ $date = $row["date"]; $no = $row["no"]; $name = $row["name"]; $mysql->query("SELECT * FROM xxxx where upddate LIKE '$y2-$m2%' and no = '$no'"); while($row = $mysql->fetch()){ $date2 = $row["date"]; echo <<<EOT <td>$date</td> <td>$no</td> <td>$name</td> <td>$date2</td><tr> EOT; } }

    • 締切済み
    • PHP
  • phpからquery実行

    趣味でサーバー構築を楽しんでいます phpからqueryでデータを渡そうとしたところ詰まってしまい、どうにも分からないので質問します //MSSQLQuery// DECLARE @acct varchar(32); SET @acct = 'testname'; INSERT INTO test.dbo.tblInfoA (Number,ID,) SELECT Number,@acct FROM test.dbo.tblinfoB WHERE userId = @acct このクエリをphpフォームからDBに送りたく下記をphpに記述しました */php mssql_query("INSERT INTO test.dbo.tblInfoA (Number,ID) VALUES ('SELECT Number FROM test.dbo.tblinfoB WHERE userId = $login','$login');") エラーメッセージ message: Conversion failed when converting the varchar value 'SELECT Number FROM test.dbo.tblinfoB WHERE userId = name' to data type int. (severity 16) お分かりの方いましたらご返答よろしくお願いします。

  • 複数行のクエリを、まとめて実行するには?mysqli_multi_query()?

    PHPとMySQLの環境です。 複数行のクエリを、まとめて送って取得したいと考えています。 ですが、今試行錯誤しているのですが、うまく行かない状態で、クエリをきちんと実行できません。 処理の流れとしては、 [DBにアクセス]→[2つのクエリの実行]→[データ取得]→[DBをクローズ] でいいのではないかと思ってやっているのですが、 2つのクエリを実行するのはなにやら無理なような記述もウェブ上で拝見しました。 その場合、同じDBの同じテーブル内の異なるデータを取得したいだけなのに、 わざわざ、一度DBにコネクトして、切断、そしてまたコネクトして、切断ということを繰り返さないとダメなのでしょうか。。? そもそも同一PHPファイル内で二度も接続、切断はすべきではないですか? ちなみに、 一つ目のクエリでは、テーブル(table_a)のレコード数をカウントしてPHP側で取得するという流れの処理です。 $query = "SELECT count(*) FROM `table_a`"; もう一つのクエリは、テーブル(table_a)の最新のレコードの、idカラムのidを取得するだけのものです。 $query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1"; この処理を一度のクエリで入れ込むことは可能でしょうか。 それぞれ単独では実行できます。 PHPでこのような関数 mysqli_multi_query() を見つけて色々調べているのですが、 いまだに使用方法がきちんとつかめない状況です。 これで複数のクエリを送ることは可能でしょうか。 アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLで高速化

    mysql_query()が返したresourceの行数は得られませんか? 例をあげると データが id p (フィールド) 42 651 23 357 67 123 28 385 このように4レコード有ったとして $res = mysql_query('select p from tbl where p="123"'); これで、$resから3行目というのを得て、3を使ってidの67を得たいのですが、 $res = mysql_query('select id,p from tbl where p="123"'); のようにして$resのidを見るようにする以外の方法は無理なんでしょうか? もし前者が可能ならそちらの方が速いと思うのですが。

    • ベストアンサー
    • PHP
  • php updateできないのです

    PHP初心者です。phpMyAdminでは、実行できたのですが、 PHP文上ではできません。 *************************************************************** $sql = ""; $sql = $sql."update RKTN_WK_TBL set \n"; $sql = $sql."DATA1 = (select count(*) from RKTN_WK_TBL as sub \n"; $sql = $sql." where sub.BKN_CD = RKTN_WK_TBL .BKN_CD) \n"; $affected_rows = $ms->exec( $sql ); $ms->exec("COMMIT"); *********************************************************** ↑うまく更新している。 ↓ここから更新できない *********************************************************** $sql = ""; $sql = $sql."UPDATE RKTN_WK_TBL as rk \n"; $sql = $sql."INNER JOIN (SELECT * FROM GST_KHN_INF_TBL) as gst ON rk.KYKU_NO = gst.KYKU_NO \n"; $sql = $sql." SET rk.GST_ID = gst.GST_ID \n"; $affected_rows = $ms->exec( $sql ); $ms->exec("COMMIT"); ************************************************************ どこがダメなのでしょうか? 先週からハマって困っております。 echo $affected_rowsを見ても 0件のようで表示されません。 だた、phpMyAdminで実行した時に「フォームに入力されていない値があります。」とMSGが表示され その後、更新されています。これが問題なのでしょうか? どなたかご教授いただければ助かります。 よろしくお願いします。

    • 締切済み
    • PHP
  • バラメータクエリVBAで実行

    アクセス初心者です。 バラメータクエリの変数をVBAで渡すにはどうしたらよいでしょうか? 例えば、テーブル1に、NOフィールド(1から100程度の整数)と、価格フィールドがあります。 以下のパラメータクエリをアクセスVBAで実行したいのですが、どう書けばよいでしょうか?(抽出条件 NO=IのIをVBAで定義して結果テーブルに保存) '--------------------------------------------------------------- 'VBAで実行したいパラメータクエリ 'SELECT テーブル1.[NO], テーブル1.価格 INTO 結果テーブル 'FROM テーブル1 'WHERE (((テーブル1.[NO])=[I])); '--------------------------------------------------------------- Dim I As Integer I=3 Dim mySQL As String mySQL = "SELECT テーブル1.[NO], テーブル1.価格 INTO 結果テーブル FROM テーブル1 WHERE (((テーブル1.[NO])=[I]));" この後を教えて下さい。

  • phpでmysqlを使ってデータベース内の最大値の取得

    PHPでMYSQL内テーブル(hogehoge)の「no」フィールドの最大値を取得をしたいのですが、ほしい結果が得られません。 【PHP】 -------------------------------------------------------------- $my_Max = "select max(no) from hogehoge"; $kekka_max = mysql_query($my_Max); -------------------------------------------------------------- no→今回最大値を取得したい項目(int) 【結果】 これをechoで出力すると、 ----------------------------- Resource id #4 ----------------------------- となってしまいます。 「no」の中の最大値を取得したいのですが、どうしたらよいでしょうか? 【環境】 WindowsXP mysql:5.0.51 php:5.2.5

    • ベストアンサー
    • PHP
  • MySQLのテーブル連結でクエリに4分以上かかる

    初めまして、よろしくお願いします。 現在PHPよりアクセスするクエリを作成しています。 mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%'; Empty set (4 min 42.79 sec) 上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。 テーブル内のレコード数としては以下のようになっています。 mysql> select count(*) from articles; +----------+ | count(*) | +----------+ | 738338 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from titles; +----------+ | count(*) | +----------+ | 34821 | +----------+ 1 row in set (0.00 sec) できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。 これは、やはりハードウェアの性能限界なのでしょうか? またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか? どなたかヒントでも頂ければ幸いです。 ぜひ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Access2000でVBAからパラメータクエリを実行

    Access2000でフォームからの値を参照して実行するクエリを作りました。 SQLで表すと、以下のようなものです。 クエリ名:test SELECT TEST.HAKKODTE FROM TEST WHERE (((TEST.HAKKODTE)=Format([Forms]![F_メニュー]![txtNyukinDate],"yyyymmdd"))); このクエリをダブルクリックで実行すると問題なく実行できます。 これを、VBAからレコードを参照したいと思い、 以下のように記述しました。 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs1 As ADODB.Recordset Set rs1 = New ADODB.Recordset Dim sqlstr As String sqlstr = "SELECT * FROM test;" rs1.Open sqlstr, cn, adOpenKeyset, adLockOptimistic しかし、Open処理で、「1つ以上の必要なパラメータの値が設定されていません」 というエラーになってしまいます。 VBAを実行するときに、[Forms]![F_メニュー]![txtNyukinDate]に きちんと値は入力されています。 これを実行する方法はあるでしょうか?

  • ACCESSクエリエラー

    ACCESSにてクエリをSQLビューにて直書きにて作成したところ、 『メインクエリのFROM句の予約語EXISTS を使用しないフィールドを複数返すサブクエリを 作成しました。サブクエリの SELECT ステートメントを変更し1つのフィールドだけを指定してください』 と、エラー表示がされました。 クエリは INSERT INTO 売上管理TBL VALUES ( SELECT  date() , 商品名称TBL.ID , 商品名称TBL.個数 , 商品名称TBL.単価 * 商品名称TBL.個数 AS 金額 FROM 商品名称TBL WHERE 商品名称TBL.個数 > 0 ); になっています。

専門家に質問してみよう