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.