PHP PDO INSERT WHERE NOT EXISTS语句不起作用

Dmi*_*riy 2 php mysql pdo

我通过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表的查询有效!

Mar*_*c B 5

您的准备呼叫失败,您只是假设它成功了.

尝试

    $preparedStatement = $db->prepare($query) or die($db->errorInfo());
Run Code Online (Sandbox Code Playgroud)

抓住错误.