无法使用 Codeigniter 更新数据库中的数据
Posted
技术标签:
【中文标题】无法使用 Codeigniter 更新数据库中的数据【英文标题】:Can't update data in database with Codeigniter 【发布时间】:2014-03-07 07:46:43 【问题描述】:我无法更新 CodeIgniter 中记录中的数据。而不是更新它在数据库表中添加新记录。'hotelres_id'是我表的主键。
我已经发布了下面的代码:-
更新的控制器代码:-
function edit($id)
$this->load->model('hotel_reservation','mb');
$data['message'] = '';
$data['object'] = $this->mb->find_by_id($id);
if($data['object'])
$this->form_validation->set_rules('roomno', 'Room Number', 'required|is_unique[hotel_reservation.roomno]');
$this->form_validation->set_rules('checkin', 'Check In', 'required|is_unique[hotel_reservation.checkin]');
$this->form_validation->set_rules('checkout', 'Check Out', 'required|is_unique[hotel_reservation.checkout]');
if ($this->form_validation->run() == TRUE)
$this->mb->eventreg_id = $_POST['hotelres_id'];
$this->mb->eventreg_id = $_POST['eventreg_id'];
$this->mb->eventhotel_id = $_POST['eventhotel_id'];
$this->mb->roomno = $_POST['roomno'];
$this->mb->checkin = $_POST['checkin'];
$this->mb->checkout = $_POST['checkout'];
$this->mb->comment = $_POST['comment'];
$this->mb->update();
$data['message'] = 'Details updated successfully';
$data['object'] = $this->mb;
$this->load->view('core/hotel_reservation/edit',$data);
else
$data['message'] = 'No details available!! Fill It!!';
$this->load->view('core/hotel_reservation/save',$data);
查看代码:-
<html>
<head>
<title>Hotel Reservation</title>
</head>
<body>
<h2>Hotel Reservation</h2>
<?php if(isset($message)&&$message!='') echo "<span class=\"message\">$message</span>"; ?>
<form action="<?php echo site_url('core/hotel_re/edit/'.@$object->hotelres_id); ?>" method="POST" >
<table class="formtable">
<tr><td>hotelres_id</td><td><input type="text" name="hotelres_id" id="hotelres_id" class="textbox" value="<?php echo @$object->hotelres_id; ?>" readonly></td></tr>
<tr><td>eventreg_id</td><td><input type="text" name="eventreg_id" class="textbox" value="<?php echo @$object->eventreg_id; ?>" readonly></td></tr>
<tr><td>eventhotel_id</td><td><input type="text" name="eventhotel_id" class="textbox" value="<?php echo @$object->eventhotel_id; ?>" readonly></td></tr>
<tr><td>Room Number</td><td><input type="text" name="roomno" value="<?php echo @$object->roomno; ?>" class="textbox" ></td></tr>
<tr><td>Check In</td><td><input type="text" name="checkin" value="<?php echo @$object->checkin; ?>" class="textbox"></td></tr>
<tr><td>Check Out</td><td><input type="text" name="checkout" value="<?php echo @$object->checkout; ?>" class="textbox"></td></tr>
<tr><td>Comment</td><td><textarea type="text" name="comment" value="<?php echo @$object->comment; ?>" class="textarea" ></textarea></td></tr>
<tr><td> </td><td><input type="submit" name="submit" value="Update" class="submitbutton"></td></tr>
</table>
</form>
<span class="validation-errors"><?php echo validation_errors(); ?></span>
</body>
</html>
型号代码:-
<?php
class hotel_reservation extends CI_Model
var $hotelres_id;
var $eventreg_id;
var $eventhotel_id;
var $roomno;
var $checkin;
var $checkout;
var $comment;
static $tablename = 'hotel_reservation';
static $tableid = 'hotelres_id';
function find_by_id($id)
$tableid = self::$tableid;
$resultset = $this->db->get_where(self::$tablename,array($tableid=>$id),1);
if($resultset->num_rows()==1)
return array_shift($resultset->result(get_class($this)));
return false;
function find_all()
$resultset = $this->db->get(self::$tablename);
return $resultset->result(get_class($this));
function save()
$tableid = self::$tableid;
if(isset($this->$tableid)&&$this->$tableid!=''&&$this->$tableid!=0)
$this->update();
else
$this->insert();
private function insert()
$this->db->insert(self::$tablename,$this);
function update()
$tableid = self::$tableid;
$this->db->where($tableid,$this->$tableid);
$this->db->update(self::$tablename,$this);
function delete()
$tableid = self::$tableid;
$this->db->where($tableid,$this->$tableid);
$this->db->delete(self::$tablename);
【问题讨论】:
在更新功能中这个$this->db->where($tableid,$this->$tableid);
不是这个$this->db->where($tableid,$this->$hotelres_id);
@kakashihatake2 不,它不起作用....我已经将 hotelres_id 存储在 $tableid 中。给我一个错误 undefined symbol $hotelres_id.
【参考方案1】:
错误就在这里!!
在你的控制器中,你已经完成了这个......
$this->mb->eventreg_id = $_POST['hotelres_id'];
$this->mb->eventreg_id = $_POST['eventreg_id'];
应该是这个
$this->mb->hotelres_id = $_POST['hotelres_id'];
$this->mb->eventreg_id = $_POST['eventreg_id'];
就像我说的那样,更新术语应该这样写......
$this->db->where($tableid,$this->hotelres_id);
解决了吗?
【讨论】:
是的,它正在工作:) ...谢谢....但只有“$this->mb->hotelres_id = $_POST['hotelres_id'];”需要进行此更正...使用此“$this->db->where($tableid,$this->$hotelres_id);”它给出了与我上面所说的相同的错误..未定义..但现在工作正常再次感谢 我明白了,它不起作用...我正在这样做$this->$hotelres_id
而不是$this->hotelres_id
...实际上, where 函数应该就像我让你写的那样。 $
符号只是一个错误。因此,请使用我在答案中编辑的更新行,以便您的hotelres_id
能够在您的表中找到与$this->hotelres_id
匹配的值,并将其发送到您的控制器。很高兴帮助:)
是的,它可以工作。实际上我上次尝试过...但是由于另一个错误,它没有工作。【参考方案2】:
据我所知,我认为您的问题在于这一行:
$this->db->update(self::$tablename,$this);
由于您应该向更新函数传递一个数组,其中包含与您的 TB 列匹配的键和要更新的值,当您发送整个对象 ($this) 时,不会同时发送 tableid 和 tablename?
【讨论】:
【参考方案3】:根据您的代码 ($this->mb->update();
),它正在调用 mb 模型。但是您提供了 hotel_reservation 模型的代码。那里可能有些不匹配。
【讨论】:
请阅读此CodeIgniter Model Docs,然后再以这种方式回答...:| Y 在这件事上被给了-1? 希望你得到你的答案:)以上是关于无法使用 Codeigniter 更新数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter 3.1.10:无法通过 DSN 使用 ODBC 连接到远程数据库
插入批处理,如果在Codeigniter 3 HMVC中有重复的密钥更新
更新数据库中的一个 JSON 字段 - CodeIgniter