数据库中的 SELECT 位值在 NAS 上工作,而不是在服务器上工作


SELECT bit-value in db worked on NAS, not on server

我有一些带有是/否(值 1/0)的组合框,我将其存储在我的数据库中。为了将该值放在对象的正确成员中,我这样做:

class Member {
    var $active;
    public function refreshData() {
        $mysqli = connectdbMySQLI();
        $query = "SELECT * FROM tblMember WHERE ID = " . $this->id;
        $result = $mysqli->query($query);
        $row = $result->fetch_array(MYSQLI_ASSOC);
        $this->setData($row);
        $mysqli->close();
    }
    public function setData($row) {
        $this->active = $row['active'];
    }
}

Alle varchars,int和text-values或被分配,除了这些位值。我用var_dump检查,得到一个空字符串

["active"]=> string(1) "" 

保存也不起作用:

$member = new Member(isset($_POST['id']) ? $_POST['id'] : null );
if(isset($_POST['active'])) {
    $member->active = $_POST['active'];
$member->save();
}

我用它来在组合框中选择正确的值:

<select type="text" name="active" id="active" class="txt">
    <option value="0" <?php echo $member->active == 0 ? 'selected="selected"' : ''; ?>>No</option>
    <option value="1" <?php echo $member->active == 1 ? 'selected="selected"' : ''; ?>>Yes</option>
</select>**

本地 NAS 有何不同?

编辑:

我试过这个(所有结果都是 1):

$this->active = $row['active'] == true ? '1' : '0';

而这个(所有结果均为 0):

$this->active = $row['active'] == 1? '1' : '0';

编辑2:

刚刚尝试了一个简单的查询(没有mysqli),我得到了我所有位字段的空结果

以下

条件仅在从活动下拉列表中选择了值 1 时才有效

if(isset($_POST['active'])) 

您需要将其替换为以下内容

if(!$_POST['active']) {
    $_POST['active'] = 0;
}else{
   $_POST['active'] = 1;
}

或解决方案 2

在下拉列表中更新以下值

<select type="text" name="active" id="active" class="txt">
    <option value="1" <?php echo $member->active == 1 ? 'selected="selected"' : ''; ?>>No</option>
    <option value="2" <?php echo $member->active == 2 ? 'selected="selected"' : ''; ?>>Yes</option>
</select>**

它不会绕过您的 IF 条件。