【发布时间】:2012-07-12 01:51:43
【问题描述】:
我有两张桌子:employee 和 employee_group。插入第一个表后,我将从该表中获取最后插入的 id。接下来我需要插入表employee_group。 SQL:
INSERT INTO employee_group (employee_id, group_id)
SELECT {$currentEmpId}, group_id
FROM employee_group
WHERE employee_id = {$anyId}
MySQL 已返回 TRUE。但是没有插入记录。
我注意到如果尝试为之前插入的员工插入记录,那么查询将成功。示例:
- 插入员工,将返回
$currentEmpId作为最后插入的 ID INSERT INTO employee_group (employee_id, group_id) SELECT {$currentEmpId - 1}, group_id FROM employee_group WHERE employee_id = {$anyEmpId}
或者,如果我尝试同时为当前员工和上一个员工插入记录,那么第一次查询将不成功,但第二次查询正常。
数据库没有触发器、外键或函数。没什么,只是数据。
我陷入了僵局。
UPD:如果我将记录保存到 php 变量中,然后对其进行 foreach 并将每条记录插入为一个项目,例如 INSERT INTO employee_group (employee_id, group_id) VALUES (xxx, yyy) 我也会遇到这个问题。
【问题讨论】:
-
{$currentEmpId - 1}会导致 PHP 语法错误,而 definitley 会导致 sql 语法错误。 -
我很抱歉那个代码,确实有
sprintf(".. SELECT %u ..", $currentEmpId - 1)但我已经替换它以便更好地理解。 -
你成功的插入使用
{$anyEmpId},但失败的插入使用{$anyId}。哪个是正确的变量? -
{$anyEmpId} 和 {$anyId} 都是正确的。对于测试,我采用了另一个变量名称,而不是“生产”查询。问题不是空的或不正确的输入变量,一切正常。使用
employee_id = <last inserted id of employee>插入employee_group记录的问题。如果我尝试分配给employee_id不是最后插入的 id 而是以前或将来的 id,我会成功的。