我试图在数据库中插入 FALSE 值,但没有任何运气 - 它插入了一个空字符串。该列是 varchar。如果我插入 TRUE 值,它会插入 1。
我正在使用 mysql、PDO 和 php。
我还使用了一个 DB 类,它除了使用 PDO 准备语句准备和执行查询之外,对查询没有做任何其他事情。
心中的查询是一个非常基本的查询:
$sql = 'INSERT INTO api_logs_values (value) VALUES (?)';
然后:
$this->_db->query($sql, array(FALSE));
知道发生了什么吗?
编辑:
添加表结构:
api_logs_values | CREATE TABLE `api_logs_values` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`log_id` int(10) unsigned NOT NULL,
`name` varchar(255) DEFAULT NULL,
`value` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `log_id` (`log_id`,`name`)
ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
编辑 2:
我在这里找到了关于此的错误报告 https://bugs.php.net/bug.php?id=33876 ,但似乎没有合适的、好的解决方案。除了可能设置 PDO_PARAM_BOOL 属性。
编辑 3:
我发现我正在使用的 DB 类没有单独绑定(bind)参数,而是执行 ($param),并查看此处 http://php.net/manual/en/pdostatement.execute.php ,它将所有参数视为 PDO::PARAM_STR,这是不正确的。
最佳答案
如果要插入字符串“false”,则$this->_db->query($sql, array("FALSE"));
对于数据类型varchar
,php值为false被认为是空字符串。
如果您希望TRUE
为1
,而FALSE
为0
,设置数据类型列到 tinyint
。
关于php - 参数为 false 时插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8891584/