PHP MySQL PDO更新无法正常工作

时间:2014-02-21 03:30:08

标签: php pdo

这让我非常疯狂,我已经多次改写它仍然没有去。我的插入功能非常好。我不知道我在忽视什么,你可以提出任何可能有用的建议都会非常感激。

  function update($table, $data, $idName='id')
  {
      if(empty($data) || !is_array($data))
           return false;

      $columns = $values = array();
      foreach($data as $key => $val)
           $columns[] = "$key=:$key";
      $columns = makeCSL($columns, false);

      try {
           $qStr = "UPDATE $table SET $columns WHERE $idName=:id";
           echo $qStr;
           $query = $this->dbHandle->prepare($qStr);
           foreach($data as $key => $val)
                $query->bindParam("':$key'", $val, PDO::PARAM_STR);
           $query->execute();
      } catch(PDOException $e) {
           $this->errCode = $e->getCode();
           $this->errInfo = $e->errorInfo[2];
      }
  }

2 个答案:

答案 0 :(得分:1)

你有几个问题。

首先,您不应该在占位符周围加上引号。其次,您需要使用bindValue,因为bindParam绑定到引用,因此从上次循环开始,所有内容都将绑定到$val的值。第三,您没有:id的绑定。

所以它应该是:

foreach($data as $key => $val) {
    if ($key != 'id') {
        $columns[] = "$key=:$key";
    }
}

...

foreach ($data as $key => $val) {
    $query->bindValue(":$key", $val, PDO::PARAM_STR);
}

答案 1 :(得分:-1)

使用以下代码

  function update($table, $data, $idName="id")
  {
      if(empty($data) || !is_array($data))
           return false;

      $columns = array();
      foreach($data as $key => $val)
           $columns[] = "$key=:$key";
      $columns = makeCSL($columns, false);

      try {
           $query = $this->dbHandle->prepare("UPDATE $table SET $columns WHERE $idName=:id");
           $query->execute($data);
      } catch(PDOException $e) {
           $this->errCode = $e->getCode();
           $this->errInfo = $e->errorInfo[2];
      }
  }