在 Codeigniter 4 中添加 mysqli 选项

Add mysqli options in Codeigniter 4

提问人:alvaro237 提问时间:7/17/2021 最后编辑:hakrealvaro237 更新时间:10/27/2022 访问量:362

问:

我的数据库中有几个字段是 DECIMAL(10,2) 或 INT 值,当我返回结果时,所有内容都以字符串形式返回。

例:

    $sql = "SELECT id, operacion_id FROM operaciones";
    $query = $this->db->query($sql);
    $result = $query->getResultArray();

    return $this->response->setStatusCode(200)
                    ->setContentType('application/json')
                    ->setJSON($result);

这返回:

[{
    "id": "31",
    "operacion_id": "ES-2021-0031"
},
{
    "id": "30",
    "operacion_id": "ES-2021-0030"
}]

我尝试直接放入 system\Database\MySQLi\Connection.php connect() 方法:

$this->mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);

这很好用,但我知道它升级不安全。

php codeigniter mysqli

评论

2赞 hakre 7/18/2021
这听起来更像是错误报告或功能请求。请考虑将问题报告给实际项目,而不是 Stackoverflow。
0赞 hakre 7/18/2021
您认为升级安全吗?到目前为止,是什么阻止了您安全地进行此升级?(只是要求更多的上下文,没有技巧问题)
0赞 alvaro237 7/18/2021
你好!Dharman下面的回答是正确的。当我说不可升级时,基本上是由于我正在修改核心文件,所以如果我升级 Codeigniter 版本,此更改将被覆盖。谢谢!
0赞 hakre 7/18/2021
恕我直言,这应该已经在数据库配置中(使)成为可能,否则,当您编写更新驱动程序时,它会将其删除(例如,在应用安全性或其他更新时)。自从我使用代码点火器以来已经很多年了,是否可以将{在配置中](codeigniter.com/user_guide/database/configuration.html)放在某个地方?
0赞 hakre 7/18/2021
我快速研究了 Codeigniter 4,在我看来,Mysqli 驱动程序在其配置中不支持此选项。正如 Dharman 所提到的,使用准备好的语句可以规避 db 驱动程序的无能。你需要考虑一下是否可以将准备好的语句与 Codeigniter 和(默认)Mysqli 驱动程序一起使用。接下来,我建议提交驱动程序支持此选项的功能请求(对我来说,mysqli支持这样的选项似乎是合理的)。

答:

1赞 Dharman 7/18/2021 #1

您应该能够将此选项应用于数据库对象的属性。mysqli

// run this after your DB connection has been initialized
$this->db->mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);
// and then run your queries
$query = $this->db->query($sql);

使用预准备语句时,不必应用此设置,因为预准备语句始终以正确的类型返回数据。