【问题标题】:A Possible Bug with PDO's bindParam, bindValue and foreachPDO 的 bindParam、bindValue 和 foreach 可能存在的错误
【发布时间】:2014-05-10 01:25:44
【问题描述】:

我收到此代码的错误。

$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 值,请注意以下事项。

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

    ID = $LastName 名字 = $LastName 中间名 = $LastName 姓氏 = $姓氏 注册日期 = $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. If Not 有没有办法使用 bindParam 或 bindValue 和数组?

  3. 这是一个错误还是错误的编码架构。

【问题讨论】:

    标签: php pdo bindvalue bindparam


    【解决方案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,
    

    【讨论】:

    • 他的问题远不是那个错字
    • 至少这是一个开始
    • 当案件已经明确并且已经解决时,人们不需要这样的错误开始。
    【解决方案2】:

    您需要检查您的场所。然后仔细检查。然后检查文档。

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

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2014-07-28
      • 2012-02-04
      • 2023-03-28
      • 1970-01-01
      • 2013-02-15
      • 2014-08-20
      • 2013-08-16
      • 1970-01-01
      相关资源
      最近更新 更多