Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL表中复制行后如何返回行id?_Mysql_Pdo_Last Insert Id - Fatal编程技术网

在MySQL表中复制行后如何返回行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

我需要复制表中的一行,然后返回新行的“id”值。我的“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。