0

我需要增加 CodeIgniter 数据库中某个字段的值。

我知道 CI 不允许转义值,将 $this->db->set() 中的第三个参数设置为 FALSE。

我正在从一个数组中插入多个数据,据我所知,将它们全部转义并不安全(数据来自表单),因为我只需要在一个字段中增加。

如何避免单独插入此值?

我当前的代码:

$dataCliente = array(
    'nombre'          => $nombre,
    'email'           => $email,
    'genero'          => $genero,
    'reserva_next'    => $fecha,
    'reserva_next_id' => $reserva_id,
    'reserva_lastreq' => time(),
    'reservas'        => "reservas+1"
);
$this->db->where('telefono', $telefono);
$this->db->update('clientes', $dataCliente);

编辑:我已经用简单和双引号进行了测试,在这两种情况下,字段的值都保存为 0(零)

前面的代码不会产生预期的结果。但这有效:

$dataCliente = array(
    'nombre'          => $nombre,
    'email'           => $email,
    'genero'          => $genero,
    'reserva_next'    => $fecha,
    'reserva_next_id' => $reserva_id,
    'reserva_lastreq' => time(),
    //'reservas'        => "reservas+1"
);
$this->db->where('telefono', $telefono);
$this->db->update('clientes', $dataCliente);


$this->db->set('reservas', 'reservas+1', FALSE);
$this->db->where('telefono', $telefono);
$this->db->update('clientes', $dataCliente);

我的意图是只使用一个语句来插入数据。使用第一个代码是否可以不转义数组的单个元素?

非常感谢!

4

2 回答 2

1

简单的答案是否定的。这是一个非常简单的数组。

可以看到 SET 语句有 3 个参数。您打算如何将其添加到您的数据阵列中。

其他原因大概是……

  1. 使用 set with false 已经涵盖了它。
  2. 在数组中添加更多字段并且必须解析它们以确定哪个需要错误标志是一件非常痛苦的事情。

像你一样使用 Set 是完全可以接受的,当你在你的情况下考虑它时......

每次对条目执行更新时,总是会增加该"reservas"值。这不是而且绝对不应该是您希望从表单更新的“数据”的一部分。它是更新本身的功能。

所以那种导致......让我们做一个函数。这并不是您问题答案的一部分,但我已将其添加为简单的思考。

你可以把它放在任何你喜欢的地方,但为了简单起见,我假设你有一个客户端控制器,我会在这个例子中把它全部放在那里......

所以设置你的 $telefono 和 $dataCliente 只有你知道它来自哪里......然后创建一个简单的单个函数。

private function update_client_details($data, $telefono) {
    $this->db->set('reservas', 'reservas+1', FALSE);
    $this->db->where('telefono', $telefono);
    $this->db->update('clientes', $data);
}

并调用上述方法进行更新。它已成为一个声明。

如果它在控制器中,最好将其设为私有。在模型中,它需要是公开的。

于 2019-12-18T03:32:09.413 回答
0

使用单引号而不是双引号

$dataCliente = array(
    'nombre'          => $nombre,
    'email'           => $email,
    'genero'          => $genero,
    'reserva_next'    => $fecha,
    'reserva_next_id' => $reserva_id,
    'reserva_lastreq' => time(),
    'reservas'        => 'reservas+1'
);

请参阅此链接以获取更多信息

于 2019-12-17T03:33:49.603 回答