Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tự động tạo một câu lệnh đã chuẩn bị sẵn với call_user_func_array ()

Tôi không hiểu bạn đã thử những cách nào, nhưng tôi sẽ cố gắng trả lời:

theo bind_param manual :

đối số đầu tiên của bind_param là một chuỗi , như 'ssss' .

thứ hai và các đối số khác - là các giá trị được chèn vào một truy vấn.

Vì vậy, $a_params của bạn mảng phải không

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

Nhưng:

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

Nhìn thấy? Tất cả các giá trị là chuỗi. Và các loại trình giữ chỗ là loại đầu tiên.

Cũng hãy xem xét thứ tự của các đối số trong $a_params phải giống với thứ tự của các tham số trong bind_param . Điều này có nghĩa là $a_params thích

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

sai. Vì phần tử đầu tiên của $a_params sẽ là đối số đầu tiên của bind_param và trong trường hợp này, nó không phải là "ssss" chuỗi.

Vì vậy, điều này có nghĩa là sau khi bạn điền $a_params với các giá trị, chuỗi của trình giữ chỗ phải được thêm vào đầu $a_params , với array_unshift ví dụ:

// 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);

Trong trường hợp cách này không hiệu quả, bạn có thể tham khảo một phần của câu trả lời bạn đã cung cấp , trong đó các giá trị của $a_params được chuyển bằng tham chiếu đến một mảng khác $tmp , trong trường hợp của bạn, bạn có thể thử một cái gì đó như:

// 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. php không lưu dữ liệu vào mysql

  2. Cập nhật biểu mẫu bằng Ajax, PHP, MYSQL

  3. Lỗi WAMP / MySQL không đúng ngôn ngữ

  4. Hộp chọn động MYSQL trong PHP

  5. chèn dữ liệu được thu thập dưới dạng Khóa ngoại và SQLSTATE [23000]:Vi phạm ràng buộc toàn vẹn:1048