通过 PDO 向 MySQL 插入查询时,我遇到了非常奇怪的错误。
如果此表中尚不存在此记录,我想在表中插入记录。
$query = "INSERT INTO Phrases (KeyText)
SELECT * FROM (SELECT :key_text) as tmp WHERE NOT EXISTS (SELECT 1 FROM Phrases WHERE KeyText = :key_text)";
try
{
$preparedStatement = $db->prepare($query);
foreach ($phrases as $phrase)
{
$preparedStatement->execute(array(':key_text' => $phrase));
echo "-";
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
它抛出异常:在非对象上调用成员函数 execute()。
我不明白我在 SQL 命令中的错误在哪里。其他代码是正确的,因为当我将 SQL 命令更改为其他(例如:SELECT :key_text as kt)时,它可以正常工作。
感谢您的回答。
更新:错误是:
[0] => HY000 [1] => 1096 [2] => 未使用表
如何为 MySQL 制作正确的 SQL 命令?变体
INSERT INTO Phrases (KeyText)
SELECT :key_text WHERE NOT EXISTS (SELECT 1 FROM Phrases WHERE KeyText = :key_text)
在 MySQL 中也不起作用。
更新 2:
INSERT INTO Phrases (KeyText)
SELECT :key_text FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM Phrases WHERE KeyText = :key_text)
这个带有 DUAL 表的查询有效!