Php 运行更新查询MySQL时,所有数据都变为空
我对mysql查询更新有一个问题,我觉得这太奇怪了。我使用查询中的Php 运行更新查询MySQL时,所有数据都变为空,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,我对mysql查询更新有一个问题,我觉得这太奇怪了。我使用查询中的Where子句在代码中运行Update查询。但是,当我停止该查询时,表中的所有数据都将变为NULL,这不仅仅是在Where子句中包含的数据中,而是在所有表中 这是我的代码: $book = json_decode($this->input->post('stringify')); foreach ($book as $row) { $data = array( 'price' =&
Where
子句在代码中运行Update查询。但是,当我停止该查询时,表中的所有数据都将变为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
子句中的数据。可能是服务器导致了这个问题,或者是任何可能导致这个问题的原因。我希望有人能告诉我为什么会这样。谢谢。也许试试这个
$this->db->update('mytable', $data, "id = 4");
因此,您可以将WHERE子句传递到update函数中
我建议您构建WHERE子句,将其分配给变量,然后将其作为第三个参数提供给update函数
希望这有帮助,也许试试这个
$this->db->update('mytable', $data, "id = 4");
因此,您可以将WHERE子句传递到update函数中
我建议您构建WHERE子句,将其分配给变量,然后将其作为第三个参数提供给update函数
希望这有助于如果没有与用于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);
}
}
现在,只有当您具有给定变量的值时,才会更新DB数据。您可以使用更多的验证,如检查id是否为数字(根据您的数据库结构)或无效。如果没有与用于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);
}
}
现在,只有当您具有给定变量的值时,才会更新DB数据。您可以使用更多验证,如检查id是否为数字(根据您的数据库结构)或无效。是否定义了
$id
当我看不到完整的代码时,很难看到,但您有:update where id=something查看echo的上次查询$this->DB->last_query()@Ghost是的,当然,$id
是defined@AndersKink我编辑了我的问题。$id
defined?当我看不到完整的代码时很难看到,但是你有:updatewhere id=something通过echo$this->db->last_query()查看最后一个查询@Ghost是的,当然,$id
是defined@AndersKink我编辑了我的问题如果我以前用过我的代码,而我用过你的代码,有什么不同?如果我用这个有什么好处吗?@Antonio Hey man这只是一种方法,可以100%确保你正在根据你给它的3个参数更新你的记录,就像你知道表、数据和WHERE子句一样,因此,如果它仍然不起作用,那么您的WHERE子句可能是错误的,我可以在第三个参数中使用数组数据吗?您可以这样做$this->db->update('mytable',$data,array('id'=>$id))@Antonio如果我以前用过我的代码和你的代码有什么不同?如果我用这个有什么好处吗?@Antonio Hey man这只是一种方法,可以100%确保你正在根据你给它的3个参数更新你的记录,就像你知道表、数据和WHERE子句一样,因此,如果它仍然不起作用,那么您的WHERE子句可能是错误的,我可以在第三个参数中使用数组数据吗?您可以这样做$this->db->update('mytable',$data,array('id'=>$id))@安东尼奥