PDO 约束错误 1062,但工作已完成?

PDO Contraint Error 1062, but work is complete?

我有一个奇怪的情况,我的 PDO 语句出现错误,但实际上工作已经完成。

我试图复制 tables,首先删除给定 table 中的旧数据,然后将新数据从临时 tables 写入真实 [=20] =]s.

$tables = array('tbl1', 'tbl2', 'tbl3');
foreach ($tables as $table) {
    $temp_table = $table."_temp";
    $stmt = $connection->query("DELETE FROM $table");
    $stmt->execute();
 
    $stmt = $connection->query("INSERT INTO $table (SELECT * FROM $temp_table)");
    $stmt->execute();
}

我在中间放置了一个 sleep 以确保它正常工作并且我的 table 数据被删除然后重写,但我收到以下错误:

Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'

我确定我要么遗漏了某些东西,要么以从未打算完成的方式执行此操作,但我真的不知道是哪个。 有什么想法吗?

虽然这是一个快速简单的修复方法,但我还是将问题留在这里以防其他人遇到此问题。毕竟这个站是用来学习的吧?

在执行准备语句时,需要执行语句,因为您传递的是未知参数。

$stmt = $connection->prepare("INSERT INTO users (`first_name`,`last_name`,`username`) 
                            VALUES (:first_name, :last_name, :username)");
$parameters = array(":first_name" => $user_details['first_name'], 
                    ":last_name" => $user_details['last_name'], 
                    ":username" => $user_details['username']);
$stmt->execute($paramArray);

但是,在执行标准查询时,不需要执行,因为不需要额外的参数。事实上,添加带有查询的执行只会复制查询。

$stmt = $connection->query("SELECT * FROM users");

有很多关于此的文档,但找到答案并不总是那么容易,而且有些事情(例如)根本没有讨论。这里有一些很好的来源:

https://www.php.net/manual/en/book.pdo.php

https://www.w3resource.com/php/pdo/php-pdo.php