运行 Update Query MySQL 时所有数据都变为 NULL [已关闭]

问题描述 投票:0回答:2

我的 mysql 查询更新有问题,我觉得这很奇怪。我在代码中运行 Update 查询,并在该查询中使用

Where
子句。但是,当我停止该查询时,表中的所有数据都变为 NULL,这不仅存在于
Where
子句中包含的数据中,而且存在于所有表中。

这是我的代码:

$book = json_decode($this->input->post('stringify'));

foreach ($book as $row)
{
    $data = array(
              'price' => $row->price,
              'date_modified' => date("Y-m-d H:i:s"),
              'modified_by' => $row->username
           );

    $this->db->where('id', $row->id);
    $this->db->where('book_id', $row->book_id);
    $this->db->update('book_availability', $data);
}

我使用 codeigniter 框架创建该查询。我只想知道为什么该查询更新表中的所有数据,而不仅仅是

Where
子句中的数据。也许服务器导致了这个问题或者任何可能导致这个问题的事情。我希望有人能告诉我为什么会发生这种情况。谢谢。

php mysql database codeigniter
2个回答
3
投票

如果没有与您用于 where 条件的变量关联的值,则可能会发生这种情况

在插入数据库之前验证数据总是好的:

foreach ($book as $row)
{
  if(isset($row->id) && $row->id != '' && isset($row->book_id) && $row->book_id != '' ) {
    $data = array(
              'price' => $row->price,
              'date_modified' => date("Y-m-d H:i:s"),
              'modified_by' => $row->username
           );

    $this->db->where('id', $row->id);
    $this->db->where('book_id', $row->book_id);
    $this->db->update('book_availability', $data);
   }
}

现在,只有当您有给定变量的值时,数据库数据才会更新。您可以使用更多验证,例如检查 id 是否为数字(根据您的数据库结构)或无效。


0
投票

试试这个

$this->db->update('mytable', $data, "id = 4");

因此您可以将 WHERE 子句传递到更新函数中 我建议建立 WHERE 子句,将其分配给一个变量,然后将其作为第三个参数传递给更新函数。

© www.soinside.com 2019 - 2024. All rights reserved.