在codeIgniter中插入多个SQL语句

时间:2012-05-17 16:00:07

标签: php mysql codeigniter

我有以下直接在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);

codeIgniter中运行单个SQL语句可以正常工作,但在添加第二个SELECT ...语句时则不行。

任何想法(或替代解决方案)?

由于

7 个答案:

答案 0 :(得分:2)

这不是CI的限制,而是数据库客户端库的限制。

一次只能执行一个查询。

答案 1 :(得分:0)

为什么不运行两个$m->query()语句?这样,您可以从CI中单独检查每个成功。

在大多数SQL接口中,在查询中包含多个语句是有问题的,因为每个语句的结果类型不同。即使在调用存储过程时,也必须仔细制作存储过程而不返回无关的结果,尽管通常可以使用特殊的,轻松的api来处理,这样可以产生多个结果。

答案 2 :(得分:0)

取代运行2个查询,以获取在插入查询之后创建的id:

$this->db->insert_id();

答案 3 :(得分: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();

答案 4 :(得分:0)

如其他答案中所述,使用$this->db->insert_id()会更好,因为其他用户可能会在您的两个查询之间插入一行。由于PHP一次只能执行一个查询,因此可能会成为竞争条件。

答案 5 :(得分:0)

感谢大家的帮助。对我有用的解决方案是

$m = my_model();
$m->data = $value;
$m->save();
echo $m->id;

答案 6 :(得分:0)

http://www.codeigniter.com/userguide2/database/active_record.html#caching 您可以使用缓存来控制多个查询而不会发生冲突。