sql >> Database teknologi >  >> RDS >> Mysql

Advarsel:PDOStatement::execute():SQLSTATE[HY093]:Ugyldigt parameternummer:parameter blev ikke defineret i...filtekst

Hvis du bruger positionelle parametre, vil den række af parametre, du sender til execute() skal være et ordinært array. Ligeledes, hvis du bruger navngivne parametre, skal arrayet være et associativt array.

Her er en test for at bekræfte adfærden:

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

Bemærk, at de associative array-nøgler i de nuværende versioner af PHP ikke skal præfikses med : som @prodigitalson kommenterer. : præfiks plejede at være påkrævet i array-nøgler i ældre versioner af PHP.

Det er også værd at nævne, at jeg har stødt på fejl og uforudsigelig adfærd, da jeg forsøgte at blande positionsparametre og navngivne parametre i en enkelt forespørgsel. Du kan bruge begge stilarter i forskellige forespørgsler i din app, men valgte en eller anden stil til en given forespørgsel.




  1. indtastede formulardata gemmes ikke i mysql db?

  2. psql ugyldig kommando \N under gendannelse af sql

  3. Hvordan kan jeg oprette forbindelse til SQL Server fra en Mac med PHP PDO?

  4. T-SQL-fejl, faldgruber og bedste praksis – determinisme