Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysqli-- instrukcja przygotowania nie powiodła się z błędem, nie użyto tabeli

Najwyraźniej

SELECT * FROM (SELECT ? )

...nie jest rozpoznawany jako poprawna składnia MySQL. Brak nazwy tabeli.

EDYTUJ , Jeśli chodzi o Twoje komentarze:

Przede wszystkim zwróć uwagę, że wykonanie tej instrukcji w konsoli przez zastąpienie ? ze stałą nie naśladuje twojej sytuacji, więc uznałbym wynik za nieważny do porównania.

Ale z drugiej strony, wykonanie go bez zastępując ? naturalnie dałoby błąd.

Dzieje się tak, ponieważ wykonanie samego zaznaczenia nie ma znaczenia w Twojej sytuacji. W twoim kodzie php to nie jest wykonanie to się nie udaje, ale raczej przygotowanie . Więc właściwym sposobem emulowania tego za pomocą konsoli byłby PREPARE oświadczenie.

Więc robię

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

odtworzy Twój problem dokładniej.

Wygląda na to, że PREPARE ma trudności ze zrozumieniem sparametryzowanych zapytań zagnieżdżonych które pojawiają się w FROM klauzula . Spójrz na te przykłady:

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

(nie działa)

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

(działa)

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

(działa)

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

(działa)

Ciekawe zachowanie, ale mogę się tylko domyślać gdy zagnieżdżony SELECT w FROM klauzula ma parametry, w MySQL brakuje wskazówek do przygotowania instrukcji .

Co do mojej sugestii, jeśli rozumiem, co próbujesz zrobić, nie potrzebujesz parametru w zagnieżdżonym zaznaczeniu. Możesz przenieść go na zewnątrz i zakodować stałą w zagnieżdżonym zaznaczeniu, ze względu na FROM . Poniższy kod

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

...powinien załatwić sprawę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dopasuj Regex w MySQL dla powtarzającego się słowa z warunkiem wykluczenia nawiasów

  2. Tworzenie bezpiecznego skryptu logowania w PHP i MySQL bez HTTPS

  3. Wybierz z jednej tabeli, gdzie nie w innej

  4. PHP Zaktualizuj tabelę MySQL za pomocą formularza HTML

  5. zapytanie mysql, aby wybrać wszystko oprócz