2014-03-30 42 views
0

我一直在收到這段代碼的錯誤。PDO的bindParam,bindValue和foreach可能的錯誤

$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數據庫自動增加值。

  1. 除DATETIME字段外的所有字段在插入數據庫時​​都獲取數組中最後一個元素的值。 即

    ID = $名字 姓= $名字 中間名= $名字 名字= $名字 RegisteredDate = $ RegisteredDate

  2. 用於bindValue時輸出的相同的錯誤。

所以我結束了使用

if($Statement->execute($Array_Bind)){ 
echo 'Successfully inserted into the database'; 


}else{ 
echo 'could not insert into database'; 
}; 

質詢

  1. 建議使用execute($ array_Bind)假設所有數據已經​​消毒作爲對使用bindParam或bindValue這種情況?

  2. 如果不是有沒有辦法使用bindParam或bindValue和數組?

  3. 這是一個錯誤或錯誤的編碼體系結構。

回答

-2

你需要檢查你的房屋。然後仔細檢查。然後檢查文檔。

  • 與bindParam它不是一個錯誤,但必不可少的功能。
  • with bindValue它從來沒有發生
  • 當然,由於總體健全性和代碼量與其他方法相比,將數組傳遞到execute()是首選。
-1

我注意到你在佔位符名稱中有一個錯字。不知道這是否會排序的問題

$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 
) 

您使用佔位符MIddeName但在查詢中使用MiddleName

更改此

'MIddeName'=>$MiddleName, 

這個

'MiddleName'=>$MiddleName, 
+0

他的問題遠沒有那個錯字 –

+0

至少這是一個開始 – AdRock

+0

當案件清楚並已解決時,不需要這樣的錯誤開始。 –