PDO与位字段的问题

11 浏览
0 Comments

PDO与位字段的问题

尝试在具有位字段的表中执行插入操作,但结果默认情况下所有字段都被填充为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, '无法执行预处理查询!' . $this->pdo->errorInfo()[2] . ',查询:' . $query . ',参数:' . json_encode($params));
            return false;
        }
    }
    catch (PDOException $e)
    {
        $this->utility->loggerAll($this->logPrefix, __FUNCTION__, $this->logLevel, 1, '无法执行预处理查询!' . $e->getMessage() . ',查询:' . $query . ',参数:' . json_encode($params));
        return false;
    }
    return $stmt;
}

0
0 Comments

问题出现的原因是PDO在处理bit字段时存在问题。解决方法是将数据字段更改为tinyint。

原文链接:https://stackoverflow.com/questions/10540483

这个问题的解决方法是将数据字段更改为tinyint,因为在PDO中处理bit字段时会出现一些问题。具体的代码如下:

// 创建数据库连接
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password");
// 创建表结构
$pdo->exec("CREATE TABLE mytable (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    mybit BIT(1)
)");
// 插入数据
$stmt = $pdo->prepare("INSERT INTO mytable (mybit) VALUES (?)");
$stmt->bindParam(1, $mybit, PDO::PARAM_INT);
// 将bit字段的值设置为0
$mybit = 0;
$stmt->execute();
// 查询插入的数据
$result = $pdo->query("SELECT * FROM mytable");
$row = $result->fetch(PDO::FETCH_ASSOC);
// 输出结果
echo $row['mybit'];

在上述代码中,通过将数据字段从bit更改为tinyint,可以解决PDO在处理bit字段时出现的问题。这样,将值为0插入到bit字段中时,不会出现写入为1的情况。

0