1

MySQLで直接動作する次のSQLがあります

 INSERT INTO `my_tabel` (`data`) VALUES ("my_value");
 SELECT * from `my_tabel` ORDER BY `id` DESC LIMIT 1

行を挿入し、新しい行を取得して、後で使用する新しい ID を返すことができるようにします。

codeIgniterで SQL を実行しようとすると、SQL にエラーがあるというエラー メッセージが表示されます。

$m = new my_model();
$sql = 'INSERT INTO `my_tabel` (`data`) VALUES ("'.$my_value.'"); SELECT * from `my_tabel` ORDER BY `id` DESC LIMIT 1';
$m->query($sql);

単一の SQL ステートメントの実行はcodeIgniterでは正常に機能しますが、2 番目の SELECT... ステートメントを追加すると機能しません。

アイデア(または代替ソリューション)はありますか?

ありがとう

4

7 に答える 7

2

これは CI の制限ではなく、データベース クライアント ライブラリの制限です。

一度に実行できるクエリは 1 つだけです。

于 2012-05-17T16:06:15.277 に答える
0

他の回答で述べたように、 $this->db->insert_id()別のユーザーが 2 つのクエリの間に行を挿入する可能性があるため、使用する方が適切です。PHP は一度に 1 つのクエリしか実行できないため、競合状態になる可能性があります。

于 2012-05-18T05:19:40.947 に答える
0

$m->query()2 つのステートメントを実行してみませんか? そうすれば、CI からそれぞれの成功を個別に確認できます。

ほとんどの SQL インターフェイスでは、クエリに複数のステートメントを含めると、それぞれの結果のタイプが異なるため、問題が発生します。ストアド プロシージャを呼び出す場合でも、無関係な結果を返さないようにストアド プロシージャを慎重に作成する必要があります。

于 2012-05-17T16:02:47.963 に答える
0

2 つのクエリを実行する代わりに、挿入クエリの使用後に作成された ID を取得するには:

$this->db->insert_id();
于 2012-05-17T16:04:07.743 に答える
0

http://www.codeigniter.com/userguide2/database/active_record.html#caching キャッシングを使用して、競合することなく複数のクエリを制御できます。

于 2015-05-04T05:11:58.813 に答える
0

insert_id() はあなたの友達です!

$this->db->insert_id()

ここからhttp://codeigniter.com/user_guide/database/helpers.html

次のようなものです:

$insert_data = array(
  'data' => $my_value
);

$this->db->insert('my_table', $insert_data);

$last_id = $this->db->insert_id();
于 2012-05-17T16:06:33.230 に答える
0

みんなの助けに感謝します。私のために働いた解決策は

$m = my_model();
$m->data = $value;
$m->save();
echo $m->id;
于 2012-05-18T08:22:37.570 に答える