Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用多个存储过程时发生PHP mysql错误_Php_Mysql_Codeigniter - Fatal编程技术网

调用多个存储过程时发生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
}