我在 CodeIgniter 中有这个查询:
$query = $this->db->query("
SELECT u.id
, u.first_name, u.last_name
, u.email_address
, g.id AS group_id
, g.name AS group_name
, g.human_readable_name AS human_readable_group_name
FROM users AS u
JOIN groups AS g
ON u.group_id = g.id
ORDER BY u.last_name
");
return $query->result();
当我 var_dump
一行时,我得到这个:
object(stdClass)#22 (4) {
["id"]=>
string(2) "19"
["first_name"]=>
string(9) "rightfold"
// etc
}
id
和 group_id
在 PostgreSQL 中都是 integer
,但是 $query->result()
返回它们作为字符串。我如何告诉 CodeIgniter 使用正确的数据类型返回字段(text
作为字符串,integer
作为整数,timestamp
作为 DateTime
对象等...)?
我在 PHP 5.3.15 上使用 CodeIgniter 2.1.4。
最佳答案
解决此问题的正确方法是在 Codeigniter 驱动程序中设置 mysqli 选项。 以下方法适用于使用 mysqli 作为数据库驱动程序的用户。
方法一:
在您的 php 扩展中启用 mysqlnd 驱动程序。这将主要解决您的问题。如果不是,则尝试方法 2
方法 2(可能不适用于所有系统):
- 从系统 > 数据库 > 驱动程序 > mysqli_driver.php 打开 mysqli_driver.php 文件
- 在代码中添加以下行
代码:
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
...
代码更改后,您会得到如下响应
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
关于php - CodeIgniter 将所有字段作为字符串返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18068645/