Anscheinend
SELECT * FROM (SELECT ? )
...wird nicht als gültige MySQL-Syntax erkannt. Ein Tabellenname fehlt.
BEARBEITEN , Zu Ihren Kommentaren:
Beachten Sie zunächst, dass Sie diese Anweisung in einer Konsole ausführen, indem Sie ?
ersetzen mit einer Konstante emuliert Ihre Situation nicht, daher würde ich das Ergebnis für einen Vergleich als ungültig erachten.
Aber andererseits, es ohne auszuführen durch Ersetzen von ?
würde natürlich einen Fehler ausgeben.
Das liegt daran, dass es für Ihre Situation irrelevant ist, nur die Auswahl auszuführen. In Ihrem PHP-Code ist es nicht die Ausführung das scheitert aber eher an der Vorbereitung . Der richtige Weg, dies mit einer Konsole zu emulieren, wäre also PREPARE
Aussage.
Also ein
machenPREPARE myStmt
FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
SELECT Identifier FROM eeg WHERE Identifier = ?
) LIMIT 1'
würde Ihr Problem genauer reproduzieren.
Nun, es scheint, dass PREPARE
hat Schwierigkeiten, parametrisierte verschachtelte Abfragen zu verstehen, die in FROM
erscheinen Klausel . Sehen Sie sich diese Beispiele an:
PREPARE myStmt FROM "select * from (select ? from eeg) tmp";
(funktioniert nicht)
PREPARE myStmt FROM "select *,? from (select * from eeg) tmp";
(funktioniert)
PREPARE myStmt FROM "select *,? from (select 'asdf') tmp";
(funktioniert)
PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)";
(funktioniert)
Seltsames Verhalten, aber das kann ich nur vermuten bei einem verschachtelten SELECT
im FROM
-Klausel hat Parameter, MySQL fehlen Hinweise, um die Anweisung vorzubereiten .
Was meinen Vorschlag betrifft, so benötigen Sie, wenn ich verstehe, was Sie zu tun versuchen, keinen Parameter in der verschachtelten Auswahl. Sie könnten es nach draußen verschieben und eine Konstante in der verschachtelten Auswahl hartcodieren, um FROM
willen . Der folgende Code
if ($usertest = $datasqli->prepare("INSERT INTO eeg (Identifier)
SELECT ? from (select 1) tmp WHERE ? NOT IN
(SELECT Identifier FROM eeg WHERE Identifier = ?)")) {
...sollte reichen.