PDO与位字段的问题
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; }
问题出现的原因是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的情况。