【发布时间】:2016-10-07 07:40:58
【问题描述】:
我知道已经有人问过这个问题,但我似乎在当前正在进行的项目中实施解决方案时遇到了问题。我试图更新 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 中的一个,而似乎没有正确地对它们进行转义。请问我该如何解决这个问题?
【问题讨论】:
-
我知道我可以通过交易实现我希望实现的目标,但我固执的自己不想这样做!
-
什么版本的 CodeIgniter?
-
@eggyal 我目前正在使用 CodeIgniter 3.0.6
-
试试
$this->db->update("tin t, taxpayer tp");。虽然我认为它不会起作用,因为它将整个字符串作为一张表转义。你只需要使用事务。 -
$this->db->from('tin AS t')->join('taxpayer AS tp', 't.taxpayer_id = tp.id')->set($data)->where('t.tin', $usertin)->update();应该这样做吗?
标签: php mysql codeigniter model-view-controller