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テーブルを使用したこのクエリは機能します!