【发布时间】:2015-12-12 19:59:52
【问题描述】:
我有一个奇怪的问题,即插入重复值时 PDO 不会引发异常。在这种情况下,我确实预计会出现错误。
相关代码:
try
{
$db_conn = new PDO("mysql:host=".$config["database"]["hostname"].";charset=utf8", $config["database"]["username"], $config["database"]["password"], []);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_conn->exec(file_get_contents("some_file_with_data.sql");
}
catch(Exception $e)
{
// PDOException extends RuntimeException extends Exception so exceptions should be catched here
// however for the duplicate key entry it will not throw an exception
}
带有 SQL 数据的文件包含多个插入,如下所示:
INSERT INTO `a` (`b`, `c`) VALUES
(1, 1),
(2, 2),
(3, 2);
INSERT INTO `a` (`b`, `c`) VALUES
(1, 1);
表a 中的字段b 设置为主键。当我使用 phpMyAdmin 在完全相同的结构中插入完全相同的数据时,出现此错误:#1062 - Duplicate entry '65533' for key 'PRIMARY'
为什么在这种情况下 PDO 不会抛出错误?即使我将错误模式设置为异常?
编辑: 这是用于此特定表的表结构
CREATE TABLE IF NOT EXISTS `a` (
`b` smallint(5) unsigned NOT NULL,
`c` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
【问题讨论】:
-
我已经在 try/catch 块中有它,让我更新我的代码来澄清这一点。
-
对表设置的确切约束是什么?
-
@deceze 我已经用表格结构更新了我的问题