我知道这个问题已被提出,但我似乎在目前正在进行的项目中实施解决方案时遇到问题。我试图更新CodeIgniter中的两个表,但框架的escape()数据库函数似乎做错了。下面是我正在处理的代码片段:
public function update_taxpayer( $usertin, $data ){
$this->usid = $usertin;
if( $this->verify_user_tin( $this->usid ) ){
$this->db->set($data);
$this->db->where('t.taxpayer_id','tp.id');
$this->db->where('t.tin', $usertin);
$this->db->update("tin AS t, taxpayer AS tp");
$updated_rows = $this->db->affected_rows();
}
}
尝试从我的控制器运行更新时出现此错误:
Error Number: 1146
Table 'crsirs.tin as t, taxpayer' doesn't exist
UPDATE `tin AS t, taxpayer` AS `tp` SET `t`.`address` = '', `t`.`name` = 'MAPS PROJECT CROSS RIVER STATE', `tp`.`lastModified` = '2016-06-07 13:54:27', `tp`.`city` = '', `tp`.`email` = '', `tp`.`mobile` = '', `tp`.`phone` = NULL WHERE `t`.`taxpayer_id` = 'tp.id' AND `t`.`tin` = '1902406349-0001'
Filename: C:/Program Files/wamp/www/CRSIRS/system/database/DB_driver.php
Line Number: 691
escape()函数似乎将这两个表合并为此行tin AS t, taxpayer
中的一个,而不会正确地逃避它们。请问我该如何解决这个问题呢?
答案 0 :(得分:0)
这是暂时的,但希望它会对你有所帮助。有很多不同的方法可以做到这一点,但我们来看看这个部分:
public function update_taxpayer( $usertin, $data ){
$this->usid = $usertin;
if( $this->verify_user_tin( $this->usid ) ){
这有什么问题?如果未验证用户 - 则不会发生任何其他情况。该方法的其余部分是无用的。因此,验证 - 应该先于其他任何方法和其他方法进行。然后你可以采取适当的行动。换句话说,如果用户未经过验证,那么您不应该使用期望进行两次更新的方法。
答案 1 :(得分:0)
有人正确地说这可以通过多种方式实现,但我最终做的是使用查询绑定,可能不是最好的方法,但它解决了我想要做的事情;
public function update_taxpayer( $usertin, $data, $data_tp = null ){
//Tax payers TIN
$this->usid = $usertin;
//Rows Affected by update
$updated_rows = 0;
/*
* Since CodeIgniter ActiveRecord doesn't seem to work with
* multiple table updates, we'll attempt to update a user's record
* using Query Binding.
*/
$sql = 'UPDATE tin t, taxpayer tp
SET t.address = ?, t.name = ?,
tp.street1 = ?, tp.street2 = ?,
tp.lastModified = ?,tp.city = ?, tp.email = ?,
tp.mobile = ?, tp.phone = ?
WHERE t.taxpayer_id = tp.id
AND t.tin = ?';
$this->db->query($sql,
array(
$data[0], $data[1], $data[2],
$data[3], $data[4], $data[5],
$data[6], $data[7], $data[8],$this->usid
)
);
$updated_rows = $this->db->affected_rows();
/**
* return true on success | false on failure
**/
return ($updated_rows > 0) ? true : false;
}
如果您有更好的方法,我希望您能让我们知道!谢谢!!