【问题标题】:PDO update issuePDO 更新问题
【发布时间】:2018-05-12 11:50:33
【问题描述】:

我正在尝试编写一些控制器来使用 PDO 执行一些 CRUD,并且遇到了这个问题,即什么都没有发生并且不会抛出。我很确定我绑定正确,但是在转储后,我看不到任何问题并且表格没有更新。

有人可以看看吗?

public function update($query, $array)
{
    try
    {
        $stm = $this->conn->prepare($query);

        foreach($array AS $key=>$value)
        {
            if(gettype($value) == "integer")
            {
                $stm->bindParam($key,$value,PDO::PARAM_INT);
            }
            if(gettype($value) == "string")
            {
                $stm->bindParam($key,$value,PDO::PARAM_STR);
            }

        }
        $stm->execute();

        return ($stm->rowCount()<=0) ? FALSE : $stm->rowCount();
    }
    catch(Exception $e)
    {
        echo 'Error with the query on line: ' . __LINE__ . ' in file: ' . __FILE__;
    }       
}   

$test = new SQL('127.0.0.1', 'test', '*************', 'mike_test');
$pull = $test->update('UPDATE names SET name=:name WHERE id=:id;',[':name'=>'James',':id'=>2]);

【问题讨论】:

    标签: php sql pdo sql-update


    【解决方案1】:

    问题在于使用绑定到变量的bindParam(),并且由于您将每个参数绑定到同一个变量($value),因此您实际上对所有参数都使用了最后一个值。

    解决方案:使用bindValue()

    我看不出有任何问题,并且表格没有更新。

    然后 ID 值与表中的任何内容都不匹配,因为它确实在我的测试系统上更新。

    【讨论】:

      【解决方案2】:

      你只是让你的代码过于臃肿。但是有一个规则:你写的代码越多,你引入的错误就越多。所以把这个函数做成这样

      public function update($query, $array)
      {
          $stm = $this->conn->prepare($query);
          $stm->execute($array);
          return $stm->rowCount();
      }  
      

      【讨论】:

        猜你喜欢
        • 2014-03-20
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 2015-06-08
        • 2011-02-10
        相关资源
        最近更新 更多