Mysql
 sql >> база данни >  >> RDS >> Mysql

mysqli-- изявление за подготовка е неуспешно с грешка не е използвана таблица

Очевидно

SELECT * FROM (SELECT ? )

... не се разпознава като валиден MySQL синтаксис. Липсва име на таблица.

РЕДАКТИРАНЕ , Относно вашите коментари:

Преди всичко, моля, имайте предвид, че изпълнението на този израз в конзола чрез заместване на ? с константа не емулира вашата ситуация, така че бих счел резултата за невалиден за сравнение.

Но отново, изпълнявайки го без замествайки ? естествено ще даде грешка.

Това е така, защото изпълнението само на избора е без значение за вашата ситуация. Във вашия php код това не е изпълнението това се проваля, а по-скоро подготовката . Така че правилният начин за емулиране на това с помощта на конзола би бил PREPARE изявление.

Така че правим

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

ще възпроизведе проблема ви по-точно.

Сега изглежда, че PREPARE има затруднения при разбирането на параметризирани вложени заявки които се появяват в FROM клауза . Разгледайте тези примери:

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

(не работи)

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

(работи)

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

(работи)

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

(работи)

Любопитно поведение, но мога само да предполагам, че когато вложен SELECT в FROM клауза има параметри, в MySQL липсват улики, за да се подготви изявление .

Що се отнася до моето предложение, ако разбирам какво се опитвате да направите, нямате нужда от параметър във вложения избор. Можете да го преместите навън и да кодирате константа във вложения избор в името на FROM . Следният код

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

...трябва да свърши работа.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добрият начин за събиране и импортиране на данни в drupal?

  2. премахване на информация от таблицата на mysql, когато потребителят затвори своя браузър

  3. Python MySql Insert не работи

  4. Как да използвате 'select' в MySQL оператор 'insert'

  5. MySQL файл с данни за зареждане - ускорение?