位域的 PDO 问题 [重复]

Posted

技术标签:

【中文标题】位域的 PDO 问题 [重复]【英文标题】:PDO issue with bit fields [duplicate] 【发布时间】:2021-03-13 10:07:18 【问题描述】:

尝试在带有位字段的表中执行插入,但结果所有字段默认填充为 1。不明白我的错误在哪里,或者这是 PDO 中的特定错误。

预查询示例:

INSERT INTO TABLE (is_hidden, is_on_net, is_off_net, is_international)
VALUES (:is_hidden, :is_on_net, :is_off_net, :is_international)

[is_hidden] => 0
[is_on_net] => 1
[is_off_net] => 0
[is_international] => 0


$this->db->preparedQuery($query, $data);

public function preparedQuery($query, $params)

    try
    
        $this->checkConnection();
        $stmt = $this->pdo->prepare($query);
        
        if (!$stmt->execute($params))
        
            $this->utility->loggerAll($this->logPrefix, __FUNCTION__, $this->logLevel, 1, 'Failed to execute prepared query! ' . $this->pdo->errorInfo()[2] . ', query: ' . $query . ', params: ' . json_encode($params));
            
            return false;
        
    
    catch (PDOException $e)
    
        $this->utility->loggerAll($this->logPrefix, __FUNCTION__, $this->logLevel, 1, 'Failed to execute prepared query! ' . $e->getMessage() . ', query: ' . $query . ', params: ' . json_encode($params));
        
        return false;
    
    
    return $stmt;

【问题讨论】:

请使用设置查询和参数的 real php 代码编辑您的问题。您刚刚向我们展示了一些伪代码。还有一个var_dump() 的参数,所以我们可以看到它们的值和数据类型。谢谢。 我从这个主题看到的是 PDO 中的问题,准备查询的位字段,需要更改为 tinyint - ***.com/questions/10540483/… 啊,好的。所以你要改成TINYINT(1) 是的,已经改变了。效果很好! 【参考方案1】:

问题已通过将数据字段更改为tinyint 解决,因为 PDO 中的位字段存在一些问题。

同样的问题:PDOstatement (mysql): inserting value 0 into a bit(1) field results in 1 written in table

【讨论】:

以上是关于位域的 PDO 问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

零长度位域的实际使用

零长度位域的实际使用

使用整数作为位域的缺点?

c语言 关于位域的使用

何时在 C 中使用位域?

从Nginx源码中学习C语言位域的使用DaemonCoder