どうやら、
SELECT * FROM (SELECT ? )
...有効なMySQL構文として認識されません。テーブル名がありません。
編集 、コメントについて:
まず、?
に置き換えて、コンソールでこのステートメントを実行することに注意してください。 定数を使用すると状況がエミュレートされないため、比較のために結果が無効であると見なします。
しかし、繰り返しになりますが、なしで実行します。 ?
に置き換えます 当然、エラーが発生します。
これは、選択だけを実行することは、状況とは無関係だからです。 PHPコードでは、実行ではありません。 それは失敗しますが、むしろ準備 。したがって、コンソールを使用してこれをエミュレートする適切な方法は、<です。 code> PREPARE ステートメント。
だから
PREPARE myStmt
FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
SELECT Identifier FROM eeg WHERE Identifier = ?
) LIMIT 1'
問題をより正確に再現します。
さて、 PREPARE
のようです FROM
に表示されるパラメータ化されたネストされたクエリを理解するのが困難です 条項 。これらの例を見てください:
PREPARE myStmt FROM "select * from (select ? from eeg) tmp";
(機能しません)
PREPARE myStmt FROM "select *,? from (select * from eeg) tmp";
(作品)
PREPARE myStmt FROM "select *,? from (select 'asdf') tmp";
(作品)
PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)";
(作品)
奇妙な振る舞いですが、ネストされた SELECT
の場合にのみ推測できます FROM
で 句にパラメータがあり、MySQLにはステートメントを準備するための手がかりがありません 。
私の提案として、あなたが何をしようとしているのかを理解していれば、ネストされた選択にパラメーターは必要ありません。 FROM
のために、それを外部に移動し、ネストされたselectに定数をハードコーディングすることができます。 。次のコード
if ($usertest = $datasqli->prepare("INSERT INTO eeg (Identifier)
SELECT ? from (select 1) tmp WHERE ? NOT IN
(SELECT Identifier FROM eeg WHERE Identifier = ?)")) {
...トリックを行う必要があります。