Pengendalian Ralat: "Nombor Parameter Tidak Sah" dalam Pertanyaan Sisipan Berbilang
Apabila cuba melakukan pertanyaan sisipan berbilang, adalah penting untuk memastikan bahawa bilangan nilai parameter sepadan dengan bilangan ruang letak dalam pertanyaan itu sendiri. Walau bagaimanapun, kod berikut menghadapi ralat "SQLSTATE[HY093]: Nombor parameter tidak sah: parameter tidak ditakrifkan," walaupun mengesahkan bahawa count($matches) dan count($values) adalah sama sejurus sebelum pertanyaan dilaksanakan.
// 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);
Percanggahan antara kod dan mesej ralat berpunca daripada kemungkinan isu dalam permulaan tatasusunan $values. Kemungkinan $values sudah mengandungi beberapa data, yang membawa kepada ketidakpadanan kiraan. Untuk mengelakkan ini, adalah penting untuk sentiasa memulakan tatasusunan sebelum gelung.
Untuk menyelesaikan isu, pertimbangkan kod yang diubah suai berikut:
$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);
Selain itu, untuk mengelakkan "Nombor parameter tidak sah" ralat dalam berbilang pertanyaan sisipan, pastikan lajur yang digunakan untuk kemas kini kunci pendua (dalam kes ini, cincang) mempunyai indeks unik yang ditentukan. Kegagalan berbuat demikian boleh mengakibatkan tingkah laku yang tidak dijangka dan kemungkinan ralat.
Atas ialah kandungan terperinci Mengapa Pertanyaan Sisipan Berbilang Saya Membuang Ralat 'Nombor Parameter Tidak Sah' Walaupun Kiraan Parameter Padan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!