sql >> Database teknologi >  >> RDS >> Mysql

mysqli-- forberede sætning mislykkedes med fejl ingen tabel brugt

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.




  1. Rails, MySQL og Snow Leopard

  2. MySql-forespørgsel MELLEM to strenge virker nogle gange ikke

  3. Sådan opretter du en ssh-tunnel i ruby ​​og opretter derefter forbindelse til mysql-serveren på fjernværten

  4. Hvordan kan jeg fjerne hver kolonne i en tabel i MySQL?