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 :

$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 :

$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. Създайте Insert... Изберете оператор в Laravel

  2. SqlNullValueException при изпълнение на съхранена процедура с MySqlCommand

  3. MySQL/MariaDB - подреждане по вътрешна подзаявка

  4. Изтрийте дублирани записи от таблица без pk или id или уникални колони в mysql

  5. Използване на DISTINCT и COUNT заедно в MySQL заявка