我有一个像这样的控制器:
$r_result = $this->storedprocedure->user_email_exist($in_email);
if($r_result->num_rows() == 1)
{
foreach ($r_result->result() as $row)
{
$salt = $row->salt;
$hash = $row->hash_password;
if(strcasecmp(Application_Helper::hash_password($aData['password'], $salt),
$hash)==0)
{
//Login success
echo('login success');
$newdata = array('user_id' => $row->id);
$this->session->set_userdata($newdata);
}
}
}
在Storedprocedure模型中,是这样的:
public function user_email_exist($aEmail)
{
$r_result = $this->db->query("CALL user_email_exist('".$aEmail."')");
return $r_result;
}
我测试了它,它可以登录成功,但是打印错误:
发生数据库错误
错误号码:2014
命令不同步;你现在不能运行这个命令
更新
ci_sessions
SETlast_activity
= 1358764263,user_data
= 'a:2:{s:9:\“user_data \”; s:0:\“\”; s:7:\“user_id \”; s:2:\“35 \”;}''在哪里session_id
='05e340b2aa6bd9b21261ed0d20354b3c'文件名:libraries / Session.php
行号:289
问题是,我必须使用MySQL procedure
来实现模型层,但似乎ci_session之间存在一些冲突。该问题的任何推荐解决方案?感谢。
答案 0 :(得分:0)
此错误是由于mySQL存储过程返回MULTI RESULTS引起的 即使其中只有一个select语句。解决方法是简单地调用$ r_result-> next_result()来释放预期的无关结果集。
我从这个link得到了这个想法。
请更换以下控制器代码:
$r_result = $this->storedprocedure->user_email_exist($in_email);
if($r_result->num_rows() == 1)
{
$row = $r_result->row_array();
$r_result->next_result(); // Dump the extra resultset.
$r_result->free_result(); // Does what it says.
$salt = $row->salt;
$hash = $row->hash_password;
if(
strcasecmp(Application_Helper::hash_password($aData['password'], $salt),$hash)==0
) {
//Login success
echo('login success');
$newdata = array('user_id' => $row->id);
$this->session->set_userdata($newdata);
}
}