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()
を見つけて色々調べているのですが、
いまだに使用方法がきちんとつかめない状況です。
これで複数のクエリを送ることは可能でしょうか。
アドバイス宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>2回目のときの$resで上書きされてしまいそうに思うのですが、
上書きさせています。
実際には、
$link=mysql_connect($host,$user,$pass);
$query = "INSERT INTO `table_a` VALUES 10";
$res=mysql_query($query,$link);
mysql_free_result($res);
$query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1";
$res=mysql_query($query,$link);
mysql_free_result($res);
mysql_close($link);
とするのですが、そこは手抜きです。
再利用する予定がない結果=$resはとっておいても仕方ないので
上書してもいいんじゃないですか?
(とくに今回の1回目の$resは出力があるわけでもないし)
ありがとうございます。
上書きさせている理由がわかってすっきりいたしました。
ご丁寧にありがとうございました。
これでいろいろテストしながら勉強させていただきます!
No.2
- 回答日時:
>複数行処理ができるのでしょうか。
原則できません。
別に2回投げるだけですがそれではだめなのでしょうか?
工夫すればユーザー関数つくって複数クエリーを分割して
実行するなり、ライブラリでちゃっちゃとやるなりすればいいでしょ?
$link=mysql_connect($host,$user,$pass);
$query = "INSERT INTO `table_a` VALUES 10";
$res=mysql_query($query,$link);
$query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1";
$res=mysql_query($query,$link);
mysql_free_result($res);
mysql_close($link);
この回答への補足
ありがとうございます!
頂いたサンプルですと、
$resを2回使っていて、
2回目のときの$resで上書きされてしまいそうに思うのですが、
この$resを2回使うとエラーになりませんでした。
これは一体、なぜなんでしょうか。。。?
No.1
- 回答日時:
>わざわざ、一度DBにコネクトして、切断、そしてまたコネクトして、切断ということを繰り返さないとダメなのでしょうか。
。?いえ、コネクションは切断する必要はありません。
流れ的には
[DBにアクセス]→[クエリの実行]→[データ取得]→[クエリの実行]→[データ取得]→[DBをクローズ]
という感じでしょうか
クエリの結果を毎回得るのは実行後データ取得をしないと
いけないですから、結局こうなるんじゃないですか?
また旧来のPHPのシステムではSQLを複数実行する際に
インジェクションの危険が大きかったこともあり、
複数のSQLを投げないという仕組みになっていたのかもしれません。
実際には、データベースに複数SQLをなげるPEARなどのライブラリ
もありますし、プリペアド系の技術も実装されてきているので
以前ほど脅威は少なくなっていますが、結局人間のやること
なので、なにがあるかわかりません。一つ一つSQLをなげるほうが
確実だと思いますよ
この回答への補足
クエリの書き方が間違っていました・・・。こちらです。
$query = "INSERT INTO `table_a` VALUES 10;
SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1";
ありがとうございます。
コネクションはつなげたまま
クエリとデータ取得をセットに繰り返していけばいいわけですね。
単純にデータ取得をしないと駄目な場合はクエリを二回発行しないと駄目だというのはわかったのですが、
それでは一度目のクエリがINSERTで、
2度目のクエリがSELECTだった場合は、
複数行処理ができるのでしょうか。
質問の意図としては以下のようなクエリの書き方が可能なのかということです、
$query = "INSERT INTO `table_a` count(*) VALUES 10;
SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1";
よろしくお願い致します
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WHERE `年月日` = '晴' OR `年...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
SQLの検索について
-
SQLです教えてくださいお願いし...
-
utf8bomとutf8mb4の違いがいま...
-
XamppでインストールしたMySQL...
-
あってますか?SQL
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
「総降水量が100mm以上になる...
-
SQLで漢字名称を都道府県や市区...
-
SQLあってますか?こう?
-
SQL構文です 画像のようにした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpで複数のDBを使用した場合の...
-
mysqlのデータベースの内容をph...
-
複数行のクエリを、まとめて実...
-
トランザクションが効かない
-
データベースの選択エラー
-
[MySQL]全くクエリーキャッシュ...
-
新規ユーザ作成・ログインでき...
-
PHP+MySQL on さくらサーバー
-
show databasesコマンドが効かない
-
緊急です。insert文が実行されない
-
MySQLが動かない(テーブルレコ...
-
Warning: mysql_num_rows()
-
C言語で変数の内容をINSERTする...
-
MySQLの更新が固まってしまう...
-
MySQLのINSERT文で変数展開がで...
-
初心者ですがupdateがうまくい...
-
PHPでMySQLテーブルロック一覧取得
-
接続ができません
-
ODP.NETのバージョン確認
-
副問合せにLIKE文を使う方法は...
おすすめ情報