调用多个存储过程时发生PHP mysql错误
首先,我解释我的工作环境。我使用的是调用多个存储过程时发生PHP mysql错误,php,mysql,codeigniter,Php,Mysql,Codeigniter,首先,我解释我的工作环境。我使用的是windows7、codeigniter3.0.2、php5.2.0和MySQL 5.5。当我一个接一个地调用两个不同的程序时,我遇到了困难。从第一个程序开始,我得到了可用的房间,基于此,我调用了另一个程序。第一个过程运行正常,但在调用第二个过程时,错误显示为: 命令不同步;现在无法运行此命令 CALL ConfirmRoom('40331411072018', 5,3, '2018-07-02', '2018-07-04', '27062018I10023
windows7、codeigniter3.0.2、php5.2.0和MySQL 5.5
。当我一个接一个地调用两个不同的程序时,我遇到了困难。从第一个程序开始,我得到了可用的房间,基于此,我调用了另一个程序。第一个过程运行正常,但在调用第二个过程时,错误显示为:
命令不同步;现在无法运行此命令
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
}
我以前遇到过它,这就是我解决它的方法(可能不是最好的解决方案,但它是有效的):
我认为问题在于试图从对象同时使用两个数据库函数($this)。而不是连接在另一个上可靠的“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
}
如果我的例子有意义的话。。。。。。我不知道您的代码的布局,但这里有一个使用类变量存储结果的示例,这样可以连续而不是同时调用数据库。可能重复指向显而易见的:
PHP5.2.0
?为什么?这是缓慢的,不安全的,8年来一直没有维护!或者这是一个打字错误,而你现在是7.2.0?其他的解决方案都很相似,但都没有解决我的问题。另一种解决方案适用于使用“mysqli”的用户,但我使用“mysql”函数进行连接,而这些函数不适用于我。另外,我正在使用codeigniter框架,这些功能对我来说并不适用。你好,tom,实际上我正在处理一个旧项目,并为这个项目添加了一些新功能,我想尽快完成这个项目。这就是为什么我没有考虑升级。我会在项目完成后升级。
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
}