sql >> Databasteknik >  >> RDS >> Mysql

mysqli-- prepare-sats misslyckas med fel ingen tabell används

Tydligen

SELECT * FROM (SELECT ? )

... inte erkänns som en giltig MySQL-syntax. Ett tabellnamn saknas.

REDIGERA , Angående dina kommentarer:

Först av allt, vänligen notera att exekvering av denna sats i en konsol genom att ersätta ? med en konstant efterliknar inte din situation, så jag skulle betrakta resultatet som ogiltigt för jämförelse.

Men sedan igen, att köra det utan ersätter ? skulle naturligtvis ge ett fel.

Det beror på att det är irrelevant för din situation att bara utföra det valda. I din php-kod är det inte exekveringen som misslyckas utan snarare förberedelserna . Så det korrekta sättet att emulera detta med en konsol är code>FÖRBERED uttalande.

Så gör en

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

skulle återge ditt problem mer exakt.

Nu verkar det som om PREPARE har svårt att förstå parametriserade kapslade frågor som visas i FRÅN klausul . Ta en titt på dessa exempel:

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

(fungerar inte)

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

(fungerar)

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

(fungerar)

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

(fungerar)

Nyfiket beteende, men jag kan bara gissa att när en kapslad SELECT i FRÅN sats har parametrar, MySQL saknar ledtrådar för att förbereda satsen .

När det gäller mitt förslag, om jag förstår vad du försöker göra, behöver du inte en parameter i det kapslade urvalet. Du kan flytta den utanför och hårdkoda en konstant i det kapslade urvalet, för FROMs skull . Följande kod

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öra susen.




  1. MySQL automatisk ökning?

  2. Hur konverterar man sekunder (eller millisekunder) till en tidsstämpel (eller bara en sträng som ser ut som ett datum) i mySql

  3. Vad betyder följande Oracle-fel:ogiltigt kolumnindex

  4. Uppdatera värden från MYSQL-tabellen utan att ladda om sidan?