我通过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();
}
Run Code Online (Sandbox Code Playgroud)
它抛出exeption:在非对象上调用成员函数execute().
我不明白SQL命令中的错误在哪里.其他代码是正确的,因为当我将SQL命令更改为其他代码(例如:SELECT:key_text为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)
Run Code Online (Sandbox Code Playgroud)
在MySQL中也不起作用.
更新2:
INSERT INTO Phrases (KeyText)
SELECT :key_text FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM Phrases WHERE KeyText = :key_text)
Run Code Online (Sandbox Code Playgroud)
这个带DUAL表的查询有效!
您的准备呼叫失败,您只是假设它成功了.
尝试
$preparedStatement = $db->prepare($query) or die($db->errorInfo());
Run Code Online (Sandbox Code Playgroud)
抓住错误.