执行时
INSERT INTO `survey`
(`id`,`name`,`date_start`,`date_end`)
values
(:id,:name,NULL,DATE_ADD(NOW(), INTERVAL 1 MINUTE))
on duplicate key UPDATE `name`=:name;
SELECT coalesce(:id,LAST_INSERT_ID()) as 'id'
它可以很好地插入新数据,但不会选择id(以后我的php代码中需要它)
我试过了this suggestion
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
但是这个SQL会抛出错误(由于重复的参数)
SELECT ASCII(substr(`perm` FROM floor(:i/8)+1))&(1<<(:i%8))>0 as perm FROM `user` WHERE `id`=:id
我处于双输局面,重写我所有的SQL代码都没有重复的参数会非常凌乱,插入后单独选择可能不会返回我想要的id。任何建议都会很棒
答案 0 :(得分:1)
您不能同时运行两个查询,当时只能运行一个。
如果您想立即执行整个操作,请创建存储过程。
复杂查询也是如此,当它变得复杂时,你想要在数据库中拥有你的逻辑。
以下是一个例子:
DELIMITER //
CREATE PROCEDURE sp_insert_survey(IN `p_id`,
IN `p_name`,
IN `p_date_start`,
IN `p_date_end`)
BEGIN
INSERT INTO `survey`(`id`,`name`,`date_start`,`date_end`)
VALUES (p_id, p_name, p_date_start, p_date_end);
SELECT `id`,`name`,`date_start`,`date_end`
FROM survey WHERE `id` =LAST_INSERT_ID();
END //
DELIMITER ;
从PDO调用sp:
$stmt = $db->prepare('CALL sp_insert_survey(?, ?, ?, ?)');
然后将数据作为SELECT
查询获取。
答案 1 :(得分:0)
在输入时,右侧getting last inserted row id with PDO (not suitable result)出现的类似问题之一在问题本身中给出了一个合适的答案,尽管考虑到该方法本身受到质疑,我有点怀疑。
$db->lastInsertId();
似乎对我有用,但在问题链接中,提问者的工作效果并不理想,所以我对此答案并不完全满意。它似乎有点像黑客。