このコードでエラーが発生しました。
$Database = new Database('localhost','root','password','Db');
$Statement = $Database->prepare("INSERT INTO User VALUES(:ID,:FirstName,:MiddleName:LastName,:RegisteredDate")
$Array_Bind = array(
'ID'=>$ID,
'FirstName'=>$FirstName,
'MIddeName'=>$MiddleName,
'LastName'=>$LastName
'RegisteredDate'=>$Date
)
foreach($Array_Bind AS $Key=>$value){
$Statement->bindParam(':' .$Key, $value)
}
if($Statement->execute()){
echo 'Successfully inserted into the database';
}else{
echo 'could not insert into database';
};
$ID (PrimaryKey) がデフォルトで MySQL データベースの AUTO-INCREMENTING 値ではない場合、次の点に注意してください。
DATETIME フィールドを除くすべてのフィールドは、データベースに挿入されたときに配列の最後の要素の値を取得します。すなわち
ID = $LastName FirstName = $LastName MiddleName = $LastName LastName = $LastName RegisteredDate = $RegisteredDate
bindValue を使用した場合も同様のエラーが出力されます。
だから私は結局使った
if($Statement->execute($Array_Bind)){
echo 'Successfully inserted into the database';
}else{
echo 'could not insert into database';
};
質問
このシナリオで bindParam または bindValue を使用するのではなく、すべてのデータがサニタイズされていると仮定して、execute($array_Bind) を使用することをお勧めしますか?
そうでない場合、bindParam または bindValue と配列を使用する方法はありますか?
これはバグですか、それともコーディング アーキテクチャが間違っていますか。