PHP PDO bindParam()和MySQL BIT

时间:2014-06-20 11:30:07

标签: php mysql pdo

我试图更新表中包含BIT类型值的数据,如下所示:

// $show_contact is either '1' or '0'
$query->bindValue(':scontact', $show_contact, PDO::PARAM_INT);

问题是,它永远不会改变价值,它仍然是' 1'在PHPMyAdmin上设置。我尝试了不同的PDO::PARAM_类型但没有成功,其他一切都正常。

编辑完整脚本

        $sql = "UPDATE users SET password = :password, address = :address, postal = :postal, city = :city, contact = :contact, show_contact = :scontact WHERE id = :id";

        $query = $dbh->prepare($sql);

        $query->bindValue(':id', $user->id, PDO::PARAM_INT);
        $query->bindValue(':password', md5($password), PDO::PARAM_STR);
        $query->bindValue(':address', $address, PDO::PARAM_STR);
        $query->bindValue(':postal', $postal, PDO::PARAM_STR);
        $query->bindValue(':city', $city, PDO::PARAM_STR);
        $query->bindValue(':contact', $contact, PDO::PARAM_STR);
        $query->bindValue(':scontact', $show_contact, PDO::PARAM_INT);
        $query->execute();

2 个答案:

答案 0 :(得分:3)

PDO有一个错误,其中传递给查询的任何参数,即使特别是作为PDO :: PARAM_INT给出时被视为字符串并用引号括起来。的 READ THIS

解决这个问题的唯一方法是尝试以下方法:

$show_contact = (int)$show_contact;
$query->bindValue(':scontact', $show_contact, PDO::PARAM_INT);

答案 1 :(得分:1)

我相信BIT类型已映射到PDO' PARAM_BOOL。尝试使用严格的布尔输入。

$show_contact = (bool) $show_contact; // '0' => FALSE, '1' => TRUE
$query->bindValue(':scontact', $show_contact, PDO::PARAM_BOOL);