sql >> Databáze >  >> RDS >> Mysql

mysqli--příkaz připravit selže s chybou, není použita žádná tabulka

Zřejmě

SELECT * FROM (SELECT ? )

...není rozpoznáno jako platná syntaxe MySQL. Chybí název tabulky.

UPRAVIT , Pokud jde o vaše komentáře:

Nejprve si prosím uvědomte, že provedení tohoto příkazu v konzole nahrazením ? s konstantou nenapodobuje vaši situaci, takže bych výsledek považoval za neplatný pro srovnání.

Ale znovu, vykoná se to bez nahrazením ? by přirozeně způsobilo chybu.

Je to proto, že provedení pouze výběru je pro vaši situaci irelevantní. Ve vašem php kódu to není spuštění to selže, ale spíše příprava . Správný způsob, jak to emulovat pomocí konzole, by byl PREPARE prohlášení.

Takže děláte

PREPARE myStmt 
  FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
    SELECT Identifier FROM eeg WHERE Identifier = ?
    ) LIMIT 1'

by přesněji reprodukoval váš problém.

Nyní se zdá, že PREPARE má potíže s pochopením parametrizovaných vnořených dotazů které se objevují v FROM doložka . Podívejte se na tyto příklady:

PREPARE myStmt FROM "select * from (select ? from eeg) tmp"; 

(nefunguje)

PREPARE myStmt FROM "select *,? from (select * from eeg) tmp"; 

(funguje)

PREPARE myStmt FROM "select *,? from (select 'asdf') tmp"; 

(funguje)

PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)"; 

(funguje)

Zajímavé chování, ale mohu jen hádat, když je vnořen SELECT v FROM klauzule má parametry, MySQL postrádá vodítka pro přípravu příkazu .

Pokud jde o můj návrh, pokud rozumím tomu, co se snažíte udělat, nepotřebujete parametr ve vnořeném výběru. Mohli byste ji přesunout ven a napevno zakódovat konstantu do vnořeného výběru, kvůli FROM . Následující kód

if ($usertest = $datasqli->prepare("INSERT INTO eeg (Identifier) 
    SELECT ? from (select 1) tmp WHERE ? NOT IN
      (SELECT Identifier FROM eeg WHERE Identifier = ?)")) {

...by měl udělat ten trik.




  1. Jak vyřešit tuto chybu--dbWriteTable()

  2. Serializovat vs Implode

  3. Popisovač databáze DBI s AutoCommit nastaveným na 0 nevrací správná data pomocí SELECT?

  4. 4 způsoby, jak najít řádky, které obsahují malá písmena v Oracle