在MySQL表中复制行后如何返回行id?
我需要复制表中的一行,然后返回新行的“id”值。我的“id”列是一个自动递增字段在MySQL表中复制行后如何返回行id?,mysql,pdo,last-insert-id,Mysql,Pdo,Last Insert Id,我需要复制表中的一行,然后返回新行的“id”值。我的“id”列是一个自动递增字段 $sth = $dbh->prepare("DROP TEMPORARY TABLE IF EXISTS tmp_users; CREATE TEMPORARY TABLE tmp_users SELECT * FROM users WHERE user_id
$sth = $dbh->prepare("DROP TEMPORARY TABLE IF EXISTS tmp_users;
CREATE TEMPORARY TABLE tmp_users
SELECT * FROM users
WHERE user_id = $user_id
UPDATE tmp_users
SET id = NULL;
INSERT INTO users
SELECT * FROM tmp_users;
DROP TEMPORARY TABLE IF EXISTS tmp_users;");
$sth->execute();
如果我执行
$id\u new=$dbh->lastInsertId()代码>返回“0”,但不确定原因。有什么想法吗?您的查询中有语法错误,您的创建临时表
语句末尾缺少分号:
CREATE TEMPORARY TABLE tmp_users
SELECT * FROM users
WHERE user_id = $user_id
UPDATE tmp_users
SET id = NULL;
尽管您相信该语句“执行得很好”,但您可以清楚地看到上面的摘录末尾只有一个分号;i、 e.这是一个包含语法错误的语句,not两个独立的CREATE
和UPDATE
语句
PDO似乎处理多语句查询的能力非常差,无法报告其中的错误。我已经执行了以下测试:
$sth = $dbh->prepare("INSERT INTO test VALUES ('test1');
INVALID STATEMENT;
INSERT INTO test VALUES ('test2');");
$sth->execute();
如您所见,我在两个有效的INSERT
语句之间包含了一个无效语句。运行上述代码后,我的测试表只插入了'test1'
值,但没有执行'test2'
插入,PDO也没有报告任何错误
CREATE TEMPORARY TABLE
中的语法错误阻止了表的实际创建,这也阻止了其余语句的正常运行,因此您没有在users
表中插入新行,也没有最后插入的ID
更新:这是此PDO行为的实际情况,显然尚未解决。似乎不支持一个字符串中的多个语句;即使是这样,您的CREATE TEMPORARY TABLE
语句后面也缺少一个分号,因此它仍然会被证明是无效的。上面的语句似乎使用prepare执行得很好。但是,我似乎无法返回新插入行的id。