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