Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

bind_param त्रुटि - प्रकार परिभाषा स्ट्रिंग में तत्वों की संख्या बाइंड चर की संख्या से मेल नहीं खाती

अपने प्लेसहोल्डर्स के गतिशील निर्माण को देखते हुए:

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



  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 टेक्स्ट मेमोरी आवंटन

  2. दिनांक सीमा में दिनों की गणना करें?

  3. MySQL डुप्लिकेट रिकॉर्ड हटाएं

  4. MySQL GREATEST () फ़ंक्शन - तर्कों की सूची में सबसे बड़ा तर्क खोजें

  5. जांचें कि क्या आईपी सबनेट में है