Codeigniter查询始终返回TRUE

时间:2012-09-03 08:34:02

标签: php mysql codeigniter

我得到了这个功能,用1或0更新帐户,
请注意,account_status的数据类型为boolean。

我理解$ 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;
            }
        }
    }

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

试试这个,受影响的行数

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

$this->db->affected_rows()

答案 2 :(得分:0)

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

if (mysql_errno()) { 

通过这种方式,您可以向用户提供有关错误原因的真实信息