PDO的bindParam,bindValue和foreach可能存在的问题

时间:2014-03-30 20:07:51

标签: php pdo bindvalue bindparam

我的代码出错了。

$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数据库中的DEFAULT和AUTO-INCREMENTING值,则会注意到以下内容。

  1. 除DATETIME字段外的所有字段在插入数据库时​​都会获取数组中最后一个元素的值。 即

    ID = $ LastName FirstName = $ LastName MiddleName = $ LastName LastName = $ LastName RegisteredDate = $ RegisteredDate

  2. 使用bindValue时会输出相同的错误。

  3. 所以我最终使用

    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 个答案:

答案 0 :(得分:-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,

答案 1 :(得分:-2)

您需要检查您的房屋。然后仔细检查。然后查看文档。

  • 使用bindParam它不是一个bug,而是必不可少的功能。
  • 使用bindValue它永远不会发生
  • 当然,将数组传递给execute()是首选,因为与其他方法相比,整体理智和代码量。