CI 获取数据库数据类型总是为STRING 的解决方案

使用php的CI框架的时候,发现在数据库中是int型的数据,返回的时候全变成了string了。对于弱类型的语言来说,这个没多大关系,但是,如果是做APP接口,在进行JSON转对象的时候,可能要求score这种字段是int类型,这个时候就不行了。其实这不是CI框架的问题,PHP与mysql的通讯全都用string。

方法一:
从PHP环境层面解决,在 php 扩展中启用 mysqlnd 驱动程序。
php应用mysql扩展的话,不能获取数据库中的数据类型,而当用mysqlnd的时候,是可以获取的。

在php7以后,mysql扩展已经摒弃了,建议用mysqli,而mysqli是可以获取数据库中的数据类型的,但是默认并没有开启。需要设置option参数  MYSQLI_OPT_INT_AND_FLOAT_NATIVEtrue,也就是下面的方法二。

方法二:
在 Codeigniter 驱动程序中设置 mysqli 选项。 下面的方法适用于使用 mysqli 作为数据库驱动程序的用户(可能不适用于所有系统)。
Open mysqli_driver.php file from system > database > drivers > mysqli_driver.php
Add below line to the code

1
2
3
4
5
public function db_connect($persistent = FALSE)
...
$this->_mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10); // already exits
$this->_mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE,TRUE); // add this line
...

After the code change, you get response like below

1
2
3
4
5
6
7
array (size=16)
'auth_id' => int 1
'role' => string 'admin' (length=5)
'permissions' => string 'all' (length=3)
'login_attempt' => int 0
'active' => int 1
'mobile_verified' => int 1