Tilsyneladende
SELECT * FROM (SELECT ? )
... genkendes ikke som en gyldig MySQL-syntaks. Et tabelnavn mangler.
REDIGERING , Angående dine kommentarer:
Først og fremmest skal du være opmærksom på, at udførelse af denne sætning i en konsol ved at erstatte ?
med en konstant efterligner ikke din situation, så jeg ville betragte resultatet som ugyldigt til sammenligning.
Men så igen, at udføre det uden erstatte ?
ville naturligvis give en fejl.
Det er fordi det er irrelevant for din situation at udføre kun det udvalgte. I din php-kode er det ikke udførelsen det mislykkes, men snarere forberedelsen . Så den rigtige måde at efterligne dette ved at bruge en konsol er kode>PREPARE erklæring.
Så gør en
PREPARE myStmt
FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
SELECT Identifier FROM eeg WHERE Identifier = ?
) LIMIT 1'
ville gengive dit problem mere præcist.
Nu ser det ud til, at PREPARE
har svært ved at forstå parametriserede indlejrede forespørgsler der vises i FROM
klausul . Tag et kig på disse eksempler:
PREPARE myStmt FROM "select * from (select ? from eeg) tmp";
(virker ikke)
PREPARE myStmt FROM "select *,? from (select * from eeg) tmp";
(virker)
PREPARE myStmt FROM "select *,? from (select 'asdf') tmp";
(virker)
PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)";
(virker)
Nysgerrig adfærd, men jeg kan kun gætte det når en indlejret SELECT
i FROM
klausulen har parametre, MySQL mangler ledetråde for at forberede sætningen .
Med hensyn til mit forslag, hvis jeg forstår, hvad du prøver at gøre, behøver du ikke en parameter i det indlejrede udvalg. Du kan flytte den udenfor og hardkode en konstant i det indlejrede udvalg af hensyn til FROM
. Følgende kode
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øre tricket.