首先,我解释一下我的工作环境。我正在使用Windows 7, CodeIgniter 3.0.2, PHP 5.2.0 and MySQL 5.5
。我一次又一次地调用2个不同的程序时遇到了困难。从第一个过程开始,我得到了房间的可用性,并在此基础上调用了另一个过程。第一个过程运行良好,但在调用第二个过程时却显示错误:
命令不同步;您现在不能运行此命令
CALL ConfirmRoom('40331411072018', 5,3, '2018-07-02', '2018-07-04', '27062018I10023',1)
我提到以下代码:
//1st Procedure
$sql = $this->db->query("CALL CheckAvailbility(GuestHouse,RoomType,'StayDate','StayOutDate',room)");
if($sql->num_rows()>0) {
$row = $sql->first_row();
if($row->avail='Y') {
//2nd Procedure
$sql = $this->db->query("CALL ConfirmRoom('BookingId', GuestHouse,RoomType, 'StayDate', 'StayOutDate', 'GuestID',noroom)");
if($sql->num_rows()>0) {
//statement
}
}
}
else {
//statement
}
答案 0 :(得分:0)
我之前碰到过它,这就是我解决它的方式(可能不是最好的解决方案,但是它可以工作):
$this->db->close();
$this->db->initialize();
$test = $this->db->query("CALL sp_testProcedure(0, 1)");
$this->db->close();
$this->db->initialize();
$test2 = $this->db->query("CALL sp_testProcedure2(2, 3)");
$this->db->close();
$this->db->initialize();
答案 1 :(得分:0)
我认为问题出在试图从对象($ this)同时使用2个数据库函数。而不是串联另一个可靠的“ if语句”。尝试创建一个变量,该变量存储“ if语句”之外的结果计数,以确定所需的响应。
例如:
class Guest{
private $_count= 0;
public function count(){
return $this->_count;
}
}
//1st Procedure
$sql = $this->db->query("CALL
CheckAvailbility(GuestHouse,RoomType,'StayDate','StayOutDate',room)");
if($sql->num_rows()>0) {
$this->$_count++
//have the $_count value auto increment to say the room is available
}
if($this->count === 1) {
//2nd Procedure
$sql = $this->db->query("CALL ConfirmRoom('BookingId', GuestHouse,RoomType,
'StayDate', 'StayOutDate', 'GuestID',noroom)");
if($sql->num_rows()>0) {
//statement
}
}
else {
//statement
}
如果我的示例有意义的话……我不知道您的代码的布局,但这是一个使用类变量存储结果的示例,因此可以连续而不是同时调用数据库。