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

Peringatan:PDOStatement::execute():SQLSTATE[HY093]:Nomor parameter tidak valid:parameter tidak ditentukan di...filetext

Jika Anda menggunakan parameter posisi, larik parameter yang Anda berikan ke execute() harus berupa array ordinal. Demikian juga, jika Anda menggunakan parameter bernama, lariknya harus berupa larik asosiatif.

Berikut tes untuk mengonfirmasi perilaku tersebut:

$stmt = $db->prepare("SELECT ?, ? ,?");

$params = array( 'a', 'b', 'c' );
// OK
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// ERROR!
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$stmt = $db->prepare("SELECT :A, :B, :C");

$params = array( 'a', 'b', 'c' );
// ERROR!
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// OK
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

Perhatikan bahwa dalam versi PHP saat ini, kunci array asosiatif tidak harus diawali dengan : seperti komentar @prodigitalson. : awalan dulu diperlukan dalam kunci larik di versi PHP yang lebih lama.

Perlu juga disebutkan bahwa saya menemukan bug dan perilaku yang tidak dapat diprediksi ketika saya mencoba menggabungkan parameter posisi dan parameter bernama dalam satu kueri. Anda dapat menggunakan salah satu gaya dalam berbeda kueri di aplikasi Anda, tetapi pilih satu gaya atau lainnya untuk kueri tertentu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Tampilan MySQL

  2. mysql bergabung ON dan AND ke laravel fasih

  3. Bagaimana cara mengonversi kolom ke ASCII dengan cepat tanpa menyimpan untuk memeriksa kecocokan dengan string ASCII eksternal?

  4. Perbedaan antara Dalam database memori dan database memori disk

  5. Bagaimana kueri simultan ditangani dalam database MySQL?