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

Bangun pernyataan yang disiapkan secara dinamis dengan call_user_func_array()

Saya tidak mengerti cara apa yang sudah Anda coba, tetapi saya akan mencoba menjawab:

menurut bind_param manual :

argumen pertama bind_param adalah string , seperti 'ssss' .

argumen kedua dan lainnya - adalah nilai yang akan dimasukkan ke dalam kueri.

Jadi, $a_params your Anda larik harus tidak

0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"

Tapi:

0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"

Melihat? Semua nilai adalah string. Dan tipe placeholder adalah yang pertama.

Pertimbangkan juga urutan argumen di $a_params harus sama dengan urutan parameter di bind_param . Ini berarti bahwa, yaitu, $a_params seperti

0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"

salah. Karena elemen pertama $a_params akan menjadi argumen pertama bind_param dan dalam hal ini bukan "ssss" string.

Jadi, ini berarti setelah Anda mengisi $a_params dengan nilai, string placeholder harus ditambahkan ke awal $a_params , dengan array_unshift misalnya:

// make $a_param_type a string
$str_param_type = implode('', $a_param_type);

// add this string as a first element of array
array_unshift($a_params, $str_param_type);

// try to call
call_user_func_array(array($stmt, 'bind_param'), $a_params);

Jika ini tidak berhasil, Anda dapat merujuk ke bagian dari jawaban yang Anda berikan , di mana nilai $a_params diteruskan dengan referensi ke array lain $tmp , dalam kasus Anda, Anda dapat mencoba sesuatu seperti:

// make $a_param_type a string
$str_param_type = implode('', $a_param_type);

// add this string as a first element of array
array_unshift($a_params, $str_param_type);

$tmp = array();
foreach ($a_params as $key => $value) {
    // each value of tmp is a reference to `$a_params` values
    $tmp[$key] = &$a_params[$key];  
}

// try to call, note - with $tmp, not with $a_params
call_user_func_array(array($stmt, 'bind_param'), $tmp);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Masalah dengan membuat fungsi yang ditentukan pengguna (UDF)

  2. Menghitung nilai rata-rata selama bagian tanggal/waktu

  3. Menghubungkan Heroku ke RDS menggunakan MySql2

  4. Bagaimana cara menambahkan nol di depan ke panjang char yang berbeda di mysql?

  5. Membandingkan string dengan yang satu memiliki ruang kosong sebelumnya sementara yang lain tidak