在PHP中多次调用MySQL存储例程
我想用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)))
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;
}