1

我得到了这个用 1 或 0 更新帐户的函数,
注意 account_status 的数据类型是布尔值。

我知道 $this->db->query(); 在写查询中返回 TRUE 或 FALSE,

但我遇到了麻烦,因为当我尝试在 account_status 上放置一个非布尔值时,响应仍然是成功的,但显然它不会更新,因为数据不是布尔值。

public function approve_account($id='0'){
        if($id == '0' OR $id== ''){
            return FALSE;
        }else{
            try{
                $id = (int)htmlentities($id,ENT_COMPAT,'UTF-8');
                $sql= "UPDATE elibrary.elib_user_account e 
                       SET account_status = 'hg' 
                       WHERE t_user_id = ?
                       LIMIT 1;";

                if($this->db->query($sql,$id) === TRUE){
                    echo 'sucess';
                }else{
                    echo 'FAIL';
                }
            }catch(Exception $e){
                echo $e;
            }
        }
    }
4

3 回答 3

3

MySQL 没有原生boolean类型,布尔值表示为tinyint(1). 将字符串值存储在数字列中会将它们强制转换为数值 - 在您的情况下,字符串'hg'不是有效的整数,并被强制转换为 value 0,该 value 存储在account_status列中并进一步解释为false. 如果您的字符串包含一个有效数字,例如'5',它将被存储为整数值5,这被认为true是布尔运算。

于 2012-09-03T08:39:34.480 回答
2

试试这个,受影响的行数

如果它给出 0 则没有行受到影响。

$this->db->affected_rows()

于 2014-05-12T05:53:28.237 回答
0

尝试使用mysql_errno()从 mysql 获取有关 SQL 错误的信息。
您应该在query命令之后执行此操作。

if (mysql_errno()) { 

这样,您将能够向用户提供有关错误原因的真实信息

于 2012-09-03T08:47:40.333 回答