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.