这是一个网络应用,当用户搜索要添加到其列表中的项目并且搜索结果显示之前已添加到其列表中的项目时,该应用程序可用。
但是,如果搜索结果找到之前未添加到用户列表中的项目,则用户应该能够将此新项目添加到其列表中。
这是第一个用于添加以前在用户列表中的项目的函数; (注意“if($ user_item_id =='null'...”行......这应该调用另一个名为“addToUserItems”的函数)
function addItem() {
$user_item_id = $this->uri->segment( 3 );
$master_item_id = $this->uri->segment( 4 );
$store = $this->uri->segment( 5, '' );
$user_id = $this->main_model->getMasterUser( $this->user_id );
if ( $user_item_id == 'null' ) $user_item_id = $this->main_model->addToUserItems( $master_item_id, $user_id );
$quantity = $this->main_model->addToShoppingList( $user_item_id, $store, $user_id );
$message = ( $quantity == '1' ) ? 'Added to list.' : 'On shopping list ' . $quantity . ' times.';
$message .= ' <span class="undo_button" params="unadd/' . $user_item_id . '">Undo?</span>';
$return = array(
'message' => $message,
'user_item_id' => $user_item_id,
);
echo json_encode( $return );
}
这是应该设置“user_item_id”的第二个函数,但显然不是;
function addToUserItems( $master_item_id, $user_id ) {
$query = $this->db->query( "
INSERT INTO user_item ( master_item_id, user_id, custom_category, custom_name, custom_store, expires_after, on_hand )
SELECT id, " . $user_id . ", original_category, original_name, '', default_expiration, 0
FROM master_item
WHERE id = '" . $master_item_id . "'
;" );
return $this->db->insert_id();
}
为什么我们看到“user_item_id”未定义的任何想法?我猜测,经过数小时的测试假设后,第二个函数不会为$ user_item_id设置值。
答案 0 :(得分:0)
可能是由于一个错误:http://bugs.mysql.com/bug.php?id=9481&amp; http://bugs.mysql.com/bug.php?id=27033
如果您负担得起,请尝试拆分查询..根据master_item_id
选择数据,然后在单独的insert
查询中将其插入user_item
表中。最后,运行last_insert_id()
。
$masterItem = $this->db->query('SELECT * FROM master_item WHERE master_item_id = $master_item_id');
$userItem = array();//add master item and user_id stuff
$this->db->insert('user_item',$userItem);
return $this->db->insert_id();
答案 1 :(得分:0)
感谢您提供的建议修补程序;事实证明,如果user_item_id字段没有值,则没有设置user_item_id变量。其他文件中的代码更正为包含$ result ['user_item_id'] ='null';此外,上面的addItem函数正在寻找'null'的user_item_id变量值,而我原始问题中未提及的javascript文件正在寻找user_item_id变量为null。所以,我们有一个需要设置的变量和其他文件中的代码,需要一致地查找“null”和null。