我有以下直接在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 ...语句时则不行。
任何想法(或替代解决方案)?
由于
答案 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 您可以使用缓存来控制多个查询而不会发生冲突。