当我执行时
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。任何建议都会很棒
最佳答案
您不能同时运行两个查询,一次只能运行一个。
如果您想一次完成所有事情,请创建一个存储过程。
复杂查询也是如此,当它变得复杂时,您希望将逻辑存储在数据库中。
这是一个例子:
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
查询的形式获取数据。
关于php - SELECT 和 INSERT 未选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451787/