Tydligen
SELECT * FROM (SELECT ? )
... inte erkänns som en giltig MySQL-syntax. Ett tabellnamn saknas.
REDIGERA , Angående dina kommentarer:
Först av allt, vänligen notera att exekvering av denna sats i en konsol genom att ersätta ?
med en konstant efterliknar inte din situation, så jag skulle betrakta resultatet som ogiltigt för jämförelse.
Men sedan igen, att köra det utan ersätter ?
skulle naturligtvis ge ett fel.
Det beror på att det är irrelevant för din situation att bara utföra det valda. I din php-kod är det inte exekveringen som misslyckas utan snarare förberedelserna . Så det korrekta sättet att emulera detta med en konsol är code>FÖRBERED uttalande.
Så gör en
PREPARE myStmt
FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
SELECT Identifier FROM eeg WHERE Identifier = ?
) LIMIT 1'
skulle återge ditt problem mer exakt.
Nu verkar det som om PREPARE
har svårt att förstå parametriserade kapslade frågor som visas i FRÅN
klausul . Ta en titt på dessa exempel:
PREPARE myStmt FROM "select * from (select ? from eeg) tmp";
(fungerar inte)
PREPARE myStmt FROM "select *,? from (select * from eeg) tmp";
(fungerar)
PREPARE myStmt FROM "select *,? from (select 'asdf') tmp";
(fungerar)
PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)";
(fungerar)
Nyfiket beteende, men jag kan bara gissa att när en kapslad SELECT
i FRÅN
sats har parametrar, MySQL saknar ledtrådar för att förbereda satsen .
När det gäller mitt förslag, om jag förstår vad du försöker göra, behöver du inte en parameter i det kapslade urvalet. Du kan flytta den utanför och hårdkoda en konstant i det kapslade urvalet, för FROM
s skull . Följande kod
if ($usertest = $datasqli->prepare("INSERT INTO eeg (Identifier)
SELECT ? from (select 1) tmp WHERE ? NOT IN
(SELECT Identifier FROM eeg WHERE Identifier = ?)")) {
...bör göra susen.