Apabila cuba melaksanakan pertanyaan sisipan berbilang, anda mungkin menghadapi ralat seperti "SQLSTATE[HY093]: Parameter tidak sah nombor: parameter tidak ditakrifkan". Ralat ini berlaku apabila bilangan nilai pemegang tempat (?) dalam pertanyaan tidak sepadan dengan bilangan parameter yang dihantar masuk.
Pertimbangkan contoh kod berikut:
// BUILD VALUES $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash"); $q->execute($matches);
Dalam senario ini , anda mungkin hairan kerana count($matches) adalah sama dengan count($values) sejurus sebelum execute dipanggil. Walau bagaimanapun, ralat berterusan.
Isu Asas:
Isu asas timbul apabila $values dimulakan dengan nilai sedia ada sebelum mengisinya dengan nilai pemegang tempat. Akibatnya, ketidakpadanan kiraan berlaku.
Penyelesaian:
Untuk menyelesaikan ralat ini, pastikan anda memulakan tatasusunan kosong untuk $values sebelum mengisinya dalam gelung. Ini menjamin bahawa bilangan nilai pemegang tempat sepadan dengan bilangan titik data yang dimasukkan.
Pertimbangan Tambahan:
Contoh Kod Disemak:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches);
Atas ialah kandungan terperinci Mengapa Pertanyaan Sisipan Berbilang Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!