Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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_Stored Procedures - Fatal编程技术网

在PHP中多次调用MySQL存储例程

在PHP中多次调用MySQL存储例程,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我想用PHP顺序调用多个MySQL存储例程,但我只能成功调用一个---之后我得到了错误命令不同步;现在无法运行此命令。研究这个问题,我发现这是一个常见的头痛问题(因为在下一个调用之前没有“完成”上一个调用),但我没有找到一个可以应用于代码的解决方案: for ($i=0; $i<10; $i+=1) { if (!($conn=getconn() && ($result=mysql_query("call MyStoredRoutine();", $conn)))

我想用PHP顺序调用多个MySQL存储例程,但我只能成功调用一个---之后我得到了错误命令不同步;现在无法运行此命令。研究这个问题,我发现这是一个常见的头痛问题(因为在下一个调用之前没有“完成”上一个调用),但我没有找到一个可以应用于代码的解决方案:

for ($i=0; $i<10; $i+=1) 
{
    if (!($conn=getconn() && ($result=mysql_query("call MyStoredRoutine();", $conn))))
    {
        $errorMessage = mysql_error($conn); // Error 2nd time here...
    }
    else {
        while ($row=mysql_fetch_array($result)) {
            // Retrieve data here...
        }
    }
}
PHP版本为5.3.8-1~dotdeb.1,MySQL版本为5.1.54-1ubuntu4


有人知道我应该对代码做些什么才能使其正常工作吗?

也许可以切换到MySQLi并使用


MySQLi为您提供了预先准备好的语句的额外好处,它是为支持OOP而构建的。

这是我在研究时读到的内容之一。然而,我不知道切换到MySQLi有多麻烦。如果有一个更容易的解决问题的方法,我会更喜欢。我认为你应该改变这个问题:如果你在可以的时候不改变,将来会带来多少麻烦?使用预先准备好的语句和OOP有巨大的好处。(在PHP中支持预置语句的常见库是MySQLi和PDO)。谢谢你让我清醒过来。:-)因此,用我目前的方法调用两个存储例程是不可能的?据我所知,PHP的mysql_*函数不允许在一个函数调用中进行多个查询/调用。在调用下一个存储过程之前,您只需关闭结果集以释放资源,所以调用
$result->close()
在调用下一个存储过程之前,您应该没事。这并不意味着你不应该切换到MySQLi。我相信你应该,但那是另一个问题。MySQLi也不允许您同时调用多个存储过程,除非它打开多个到数据库的连接。
function getconn() {
    global $custdb, $custdb_connection, $dbuser, $dbpass;
    if (! $custdb_connection) {
        if (! ($custdb_connection = mysql_connect("localhost", $dbuser, $dbpass, true))) return false;
        if (! (@ mysql_select_db($custdb, $custdb_connection)))  return false;
    }
    return $custdb_connection;
}