我有条件地使用PHP PDO命令将值插入MySQL数据库.该条件指出,如果要插入的行已经存在,则不要插入它.如果不存在,请插入行.当我通过PHPmyadmin执行代码时,代码执行得很好,因此将PDO变量(:a,:b)与静态数字交换.
我收到以下错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name '0'' in...
PHP代码如下:
我准备了sql语句…
$InsertFoo = $pdo->prepare("
INSERT INTO `MyTbl` (
`ColA`,
`ColB`
)
SELECT * FROM ( SELECT :a, :b ) AS tmp
WHERE NOT EXISTS (
SELECT `MyTbl`.`ColA`
FROM `MyTbl`
WHERE `ColA` = :aa
AND `ColB` = :bb
)
LIMIT 1
");
然后遍历数组以一次又一次地执行准备好的语句. (该数组是先前使用SimpleXML生成的,因此使用->.如果您不熟悉SimpleXML,只需将$foo-> fooA视为随每个循环而变化的变量.)
foreach ($loopme as $foo) {
// query to be executed for ticket insertion
$TicketsToInsert->execute(array(
a => $foo->fooA,
b => $foo->fooB,
aa => $foo->fooA,
bb => $foo->fooB
));
}
任何建议深表感谢:
顺便说一句,有很多类似的问题,但是我在插入时没有发现任何可以完全解决此PDO问题的问题.
非常感谢!
回答
Phil提供了一种在多个行上应用唯一约束的简单得多的解决方案,这反过来会拒绝在所述行中唯一的新插入的行.这与测试将要插入的行的不存在相反.下面有更多详细信息.