php - SELECT 和 INSERT 未选择

标签 php mysql pdo

当我执行时

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/

相关文章:

php - 使用 php 进行 Javascript 验证示例 1

mysql - 插入列正确的数据时,MySQL 中出现错误 1136

PHP - 使用 postman 更新查询返回成功但不更新数据库中的值

返回 PHP PDO 错误消息,但回滚不起作用

php - 如何使用 PHP MySQL 插入记录?

php - 如何在 php 中使用 in_array 作为子数组?

MYSQL数据归档

mysql - 在 MySQL 中查找距纬度经度最近的邮政编码

mysql - 在 mysql 注入(inject)和 xss 之前清理数据 - 我用 pdo 和 htmlpurifier 做对了吗?

具有可变数字表名称的 PHP-SQL 准备语句