0

我在使用 PDO 更新 mysql 数据库时遇到问题。执行更新查询时没有收到任何错误消息,但它没有更新该数据库。我认为错误报告已打开 - self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ) - 我在开始时确实收到了一个错误,表明我的列名错误,还有一个关于语法错误但自从修复这些我没有收到任何错误消息。我从其他一些类似的查询中尝试了各种不同的东西,但并不高兴。

我有一个名为 Events 的类,构造函数执行 select 语句没有问题。更新是类中的一个函数,传入的 $array 参数是 $_POST(提交的表单数据) - 我是否试图以错误的方式从 $array 访问这个 $_POST 数据?

这是功能

function update ($array) {

    $this->db = mydb::getConnection();

    try {

        // prepare statement
        $statement = $this->db->prepare("UPDATE gigs SET who = :who WHERE gig_id = :gig_id");

        // bind parameters
        $statement->bindParam(':gig_id', $array['gig_id'], PDO::PARAM_INT);
        $statement->bindParam(':who', $array['who'], PDO::PARAM_STR);

        // execute statement
        $statement->execute();

    } catch (Exception $ex) {

        throw $ex;

    }

}

感谢您的任何建议。

4

1 回答 1

0

有几点需要注意:

  • try ... catch如果您只是抛出异常而不做任何事情,则不需要该块
  • 我不认为$this->db->prepare()作品。链接很好,但您可能应该这样做($this->db)->prepare()或执行以下操作

    $pdo = $this->db;
    $pdo->prepare(...)
    

所以,请尝试以下方法:

function update ($array) {
    $this->db = mydb::getConnection();

    // prepare statement
    $pdo = $this->db;
    $statement = $pdo->prepare("UPDATE gigs SET who = :who WHERE gig_id = :gig_id");

    // bind parameters
    $statement->bindParam(':gig_id', $array['gig_id'], PDO::PARAM_INT);
    $statement->bindParam(':who', $array['who'], PDO::PARAM_STR);

    // execute statement
    $statement->execute();
}
于 2013-07-03T21:38:11.907 回答