我的表格定义如下:
CREATE TABLE `reputables` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`subject` varchar(200) NOT NULL,
`type` int(11) NOT NULL,
`verification_key` varchar(45) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`date_associated` datetime DEFAULT NULL,
`request_user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `subject_UNIQUE` (`subject`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1$$
执行
$query = DB::select() ->from( 'reputables')->where('subject', '=', $key)->as_object()->execute();
$reputable = $query->current();
返回一个对象,但属性的类型都是字符串,即使 db 列定义为 int 也是如此。这会导致 json_encode 出现问题,因为它将双引号括在应该是整数的值周围。
如何让数据库在设置对象属性时保留列类型?
更新:
看起来这可能是一个 php 问题。这做同样的事情。
$testres = mysql_query('SELECT * from reputables WHERE id = 1');
$obj = mysql_fetch_object($testres);
所有 $obj 属性都是字符串类型。
最佳答案
返回的类型始终是字符串。
之后您可以使用一些自动检测、使用 ctype_* 函数来转换列,或者创建一个小例程来查询数据库中的字段类型并相应地设置类型
关于php - 即使列类型为整数,Kohana DB::select 也会以字符串形式返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8023048/