अपने प्लेसहोल्डर्स के गतिशील निर्माण को देखते हुए:
$in = "'" . implode("','", array_fill(0, count($finalArray), '?')) . "'";
तो लगता है उन्हें '
. के साथ बना रहे हैं उद्धरण। प्लेसहोल्डर्स को कोटेशन की जरूरत नहीं है।
$in = implode(',', array_fill(0, count($finalArray), '?'));
$query = "UPDATE products SET Status = 'Reserved' WHERE SerialNumber IN ($in)";
$statement = $mysqli->prepare($query);
फिर, प्रकार निर्दिष्ट करने में, आपको उन्हें उद्धृत करने की भी आवश्यकता नहीं है:
$statement->bind_param(str_repeat('s', count($finalArray)), $finalArray);
सिडेनोट:ध्यान दें कि आपको गतिशील रूप से bind_param
. पर भी कॉल करना होगा call_user_func_array()
. के माध्यम से चूंकि आप एक सरणी का उपयोग करने जा रहे हैं। इस भाग में इस पर चर्चा की गई है पूरी तरह से
.
हालांकि मैं पीडीओ के ->execute()
. का उपयोग करने का सुझाव/पसंद करूंगा :
$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);
Reflection
using का उपयोग करने का दूसरा तरीका :
$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();