【问题标题】:Add mysqli options in Codeigniter 4在 Codeigniter 4 中添加 mysqli 选项
【发布时间】:2021-09-26 00:35:06
【问题描述】:

我的数据库中有几个字段是 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);

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

【问题讨论】:

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

标签: php codeigniter mysqli


【解决方案1】:

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

$this->db->mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);
// and then run your queries
$query = $this->db->query($sql);

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

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 2011-10-11
    • 2021-01-31
    • 1970-01-01
    • 2021-09-10
    • 2017-10-26
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多