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

Lỗi bind_param - Số phần tử trong chuỗi định nghĩa kiểu không khớp với số biến ràng buộc

Xem xét quá trình tạo trình giữ chỗ động của bạn:

$in = "'" . implode("','", array_fill(0, count($finalArray), '?')) . "'";

Vì vậy, dường như đã tạo chúng bằng ' danh ngôn. Phần giữ chỗ không cần trích dẫn.

$in = implode(',', array_fill(0, count($finalArray), '?'));

$query = "UPDATE products SET Status = 'Reserved' WHERE SerialNumber IN ($in)";
$statement = $mysqli->prepare($query);

Sau đó, khi gán các loại, bạn cũng không cần chúng được trích dẫn:

$statement->bind_param(str_repeat('s', count($finalArray)), $finalArray);

Ghi chú bên lề:Hãy lưu ý rằng bạn cũng sẽ phải gọi động bind_param qua call_user_func_array() vì bạn sẽ sử dụng một mảng. Phần này thảo luận kỹ về nó .

Mặc dù tôi đề xuất / thích sử dụng ->execute() của PDO :

$pdo = new PDO('mysql:host=localhost;dbname=DATABASE NAME', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$in = implode(',', array_fill(0, count($finalArray), '?'));
$query = "UPDATE products SET Status = 'Reserved' WHERE SerialNumber IN ($in)";
$statement = $pdo->prepare($query);
$statement->execute($finalArray);

Một cách khác với việc sử dụng Reflection :

$in = implode(',', array_fill(0, count($finalArray), '?'));
$type = str_repeat('s', count($finalArray));
$query = "UPDATE products SET Status = 'Reserved' WHERE SerialNumber IN ($in)";
$statement = $mysqli->prepare($query);

$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod('bind_param');
array_unshift($finalArray, $type); // prepend the 'sss' inside
$method->invokeArgs($statement, $finalArray);

$statement->execute();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NodeJS mySQL Chèn Blob

  2. Cách triển khai Percona XtraDB Cluster 8 để có tính khả dụng cao

  3. B-Tree vs Bash Table

  4. Cách nhanh nhất để kết xuất và tải cơ sở dữ liệu MySQL InnoDB bằng mysqldump là gì?

  5. Lưu trữ datetime php trong cơ sở dữ liệu mysql