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'は有効な整数ではなく、値0に強制変換されます。値は列に格納され、account_statusさらに。として解釈されfalseます。文字列に有効な数値が含まれている場合、たとえば、ブール演算で考慮'5'される整数値として格納されます。5true

于 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 に答える