php - CodeIgniter 将所有字段作为字符串返回

标签 php codeigniter postgresql

我在 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
}

idgroup_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(可能不适用于所有系统):

  1. 从系统 > 数据库 > 驱动程序 > mysqli_driver.php 打开 mysqli_driver.php 文件
  2. 在代码中添加以下行

代码:

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/

相关文章:

php - 从 symfony 2.1 中的实体获取服务容器(Doctrine)

php - 在 View 内的函数中访问 Codeigniter 数据变量

sql - 在 PostgreSQL 中重写查询

linux - JPA 命名查询集

database - 使用索引在数据库中进行不区分大小写的搜索?

php - 这是验证我的 CSRF token 的正确方法吗?

php - 多个 MySQL 查询集中在一个中,同时忽略重复的匹配 ID

PHPExcel - Excel 报告生成期间的数据填充不正确

php - 如何使用 codeigniter 事件记录在数据库中插入双引号字符串值?

php - 在 mySQL 中构造 php 数据