Mysql
 sql >> база данни >  >> RDS >> Mysql

Предупреждение:PDOStatement::execute():SQLSTATE[HY093]:Невалиден номер на параметър:параметърът не е дефиниран във... файлов текст

Ако използвате позиционни параметри, масивът от параметри, който предавате на execute() трябва да бъде порядков масив. По същия начин, ако използвате именувани параметри, масивът трябва да е асоциативен масив.

Ето тест за потвърждение на поведението:

$stmt = $db->prepare("SELECT ?, ? ,?");

$params = array( 'a', 'b', 'c' );
// OK
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// ERROR!
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$stmt = $db->prepare("SELECT :A, :B, :C");

$params = array( 'a', 'b', 'c' );
// ERROR!
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

$params = array( 'A'=>'abc', 'B'=>'def', 'C'=>'ghi' );
// OK
if ($stmt->execute($params)) {
  print_r($stmt->fetchAll());
}

Имайте предвид, че в текущите версии на PHP, асоциативните клавиши за масив не трябва да има префикс с : като коментари на @prodigitalson. : префиксът се изискваше в ключовете на масива в по-старите версии на PHP.

Също така си струва да споменем, че срещнах грешки и непредвидимо поведение, когато се опитах да смеся позиционни параметри и наименувани параметри в една заявка. Можете да използвате всеки стил в различен заявки във вашето приложение, но сте избрали един или друг стил за дадена заявка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи SQL инжекцията и как да се предпазя от нея

  2. „pip install MySQL-python“ се проваля с „IndexError“

  3. Mysql, PHP, търсене на няколко думи

  4. Съкращаване с условие

  5. Съхранени функции в MySQL – имена на таблици и колони на динамични/променливи