Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysqli-- siapkan pernyataan gagal dengan kesalahan tidak ada tabel yang digunakan

Ternyata,

SELECT * FROM (SELECT ? )

...tidak dikenali sebagai sintaks MySQL yang valid. Nama tabel tidak ada.

EDIT , Tentang komentar Anda:

Pertama-tama, harap perhatikan bahwa menjalankan pernyataan ini di konsol dengan mengganti ? dengan konstanta tidak meniru situasi Anda, jadi saya akan menganggap hasilnya tidak valid untuk perbandingan.

Tapi sekali lagi, menjalankannya tanpa mengganti ? akan, tentu saja, memberikan kesalahan.

Itu karena menjalankan hanya pilih tidak relevan dengan situasi Anda. Dalam kode php Anda, ini bukan eksekusi yang gagal melainkan persiapan . Jadi cara yang tepat untuk meniru ini menggunakan konsol, adalah PREPARE pernyataan.

Jadi melakukan

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

akan mereproduksi masalah Anda dengan lebih akurat.

Sekarang, tampaknya PREPARE mengalami kesulitan memahami kueri bersarang berparametri yang muncul di FROM klausa . Lihat contoh berikut:

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

(tidak berfungsi)

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

(berfungsi)

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

(berfungsi)

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

(berfungsi)

Perilaku penasaran, tapi saya hanya bisa menebak ketika SELECT . bersarang di FROM klausa memiliki parameter, MySQL tidak memiliki petunjuk untuk menyiapkan pernyataan .

Adapun saran saya, jika saya mengerti apa yang Anda coba lakukan, Anda tidak memerlukan parameter di pilihan bersarang. Anda dapat memindahkannya ke luar dan meng-hardcode konstanta di pilihan bersarang, demi FROM . Kode berikut

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

...harus melakukan triknya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencarian dan Pesan PHP MySQL Berdasarkan Relevansi

  2. bagaimana saya bisa menghitung status yang diubah/diperbarui berdasarkan kategori untuk bulan tertentu?

  3. Peringatan:Membuat koneksi SSL tanpa verifikasi identitas server tidak disarankan

  4. Dapatkan baris dengan nilai tertinggi atau terendah dari GROUP BY

  5. Setelah pembaruan Windows 10 1803, program saya tidak dapat membuka soket saat dijalankan dari jaringan berbagi