我试图更新表中包含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();
答案 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);