位置パラメータを使用する場合、 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では、配列キーにプレフィックスが必要でした。
また、単一のクエリで位置パラメータと名前付きパラメータを混在させようとしたときに、バグや予測できない動作が発生したことにも言及する価値があります。 異なるではどちらのスタイルも使用できます アプリでクエリを実行しますが、特定のクエリに対していずれかのスタイルを選択しました。