运行Update Query MySQL时,所有数据都变为NULL

时间:2017-09-11 05:34:56

标签: php mysql database codeigniter

我的mysql查询更新有问题,我认为这很奇怪。我在我的代码中使用该查询中的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子句中的数据。也许服务器导致该问题或任何可能导致该问题。我希望有人可以告诉我为什么会这样。感谢。

2 个答案:

答案 0 :(得分:3)

如果没有与您用于where condition

的变量相关联的值,则会发生这种情况

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

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);
   }
}

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

答案 1 :(得分:0)

也许试试这个

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

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

希望这有帮助