Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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 连续的MySQLi准备的语句不起作用_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 连续的MySQLi准备的语句不起作用

Php 连续的MySQLi准备的语句不起作用,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我想从同一个PHP文件连续调用MySQL存储例程(使用准备好的语句),如下所示: $conn = getconn(); $stmt = $conn->prepare("CALL GetUserLoginData(?);"); $stmt->bind_param("s", $username); $stmt->execute(); // Process data here... until next stored routine call $conn = getconn();

我想从同一个PHP文件连续调用MySQL存储例程(使用准备好的语句),如下所示:

$conn = getconn();
$stmt = $conn->prepare("CALL GetUserLoginData(?);");
$stmt->bind_param("s", $username);
$stmt->execute();

// Process data here... until next stored routine call

$conn = getconn();
// var_dump($conn);
$stmt2 = $conn->prepare("CALL SetUserLoginTime(?);");
$stmt2->bind_param("i", $userid);
$stmt2->execute();
其中
getconn()

此代码适用于运行PHP5.3.8-1/MySQL 5.1.54的web服务器,但不适用于使用PHP5.3.10/5.5.29的服务器

如果取消注释
var\u dump($conn)
我会得到
[“error”]=>string(52)”命令不同步;您现在无法运行此命令“

我不明白为什么只有一台服务器会发生这种情况。

试试看

$conn = getconn();
$stmt = $conn->prepare("CALL GetUserLoginData(?);");
$stmt->bind_param("s", $username);
$stmt->execute();

// Process data here... until next stored routine call

mysqli_free_result();
$conn = getconn();
// var_dump($conn);
$stmt2 = $conn->prepare("CALL SetUserLoginTime(?);");
$stmt2->bind_param("i", $userid);
$stmt2->execute(); 
试着

$conn = getconn();
$stmt = $conn->prepare("CALL GetUserLoginData(?);");
$stmt->bind_param("s", $username);
$stmt->execute();

// Process data here... until next stored routine call

mysqli_free_result();
$conn = getconn();
// var_dump($conn);
$stmt2 = $conn->prepare("CALL SetUserLoginTime(?);");
$stmt2->bind_param("i", $userid);
$stmt2->execute(); 
因为准备好的语句使用非缓冲查询类型。您有两个选择:

1) 执行后关闭查询

$conn = getconn();
$stmt = $conn->prepare("CALL GetUserLoginData(?);");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->close(); // Frees the buffer
2) 使用免费结果:

不在您问题范围内的场景:

有时关闭查询或释放结果不是一个选项。例如,一个
循环。。。在这种情况下,您应该使用:

store_result();
因为准备好的语句使用非缓冲查询类型。您有两个选择:

1) 执行后关闭查询

$conn = getconn();
$stmt = $conn->prepare("CALL GetUserLoginData(?);");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->close(); // Frees the buffer
2) 使用免费结果:

不在您问题范围内的场景:

有时关闭查询或释放结果不是一个选项。例如,一个
循环。。。在这种情况下,您应该使用:

store_result();

在进行第二次数据库调用之前,调用下面定义的PHP函数
clearStoredResults($conn)
(其中
$conn
是通过调用
new MySQLi(…);
获得的MySQLi数据库链接):


我发现这使得连续调用成为可能。

在进行第二次数据库调用之前,调用下面定义的PHP函数
clearStoredResults($conn)
(其中
$conn
是通过调用
新的MySQLi(…);
)获得的MySQLi数据库链接:



我发现这使得连续呼叫成为可能。

为什么需要多个到同一数据库的连接?只要重用
$conn
@TillHelge:True。我的函数
getconn()
会缓存连接。我删除了第二个
$conn=getconn()
,仍然得到了相同的错误。正如文档所述:您必须释放结果(第一个$stmt):1000的重复。可通过错误消息轻松搜索为什么需要多个到同一数据库的连接?只要重用
$conn
@TillHelge:True。我的函数
getconn()
会缓存连接。我删除了第二个
$conn=getconn()
,仍然得到了相同的错误。正如文档所述:您必须释放结果(第一个$stmt):1000的重复。可通过错误信息轻松搜索您的代码和ops代码有什么区别?他为什么要使用你所做的更改?我使用了mysqli_free_result();若要释放以前的结果,请单击“链接”以使其更清晰。OP显然对这个错误消息感到困惑,仅仅读取一段代码并不能解释任何事情。@Gautam3164:错误日志说
mysqli\u free\u result()只需要一个参数,如果给定0,
@Gruber并不意味着我的亮度比这个高。。但是,当你完成准备好的语句时,请尝试关闭它们,例如,请参见我的答案您的代码和ops代码之间的区别是什么?他为什么要使用你所做的更改?我使用了mysqli_free_result();若要释放以前的结果,请单击“链接”以使其更清晰。OP显然对这个错误消息感到困惑,仅仅读取一段代码并不能解释任何事情。@Gautam3164:错误日志说
mysqli\u free\u result()只需要一个参数,如果给定0,
@Gruber并不意味着我的亮度比这个高。。但是,当您完成准备好的语句时,请尝试关闭它们,请参见我的答案以获取示例
$stmt->close()对我不起作用,仍然是“命令不同步;现在无法运行此命令”。我假设来自
$stmt
的数据处理应该在
关闭()之前进行。我将尝试第二种选择。经过数小时的测试,我得出结论,错误在于获取子集数据:我不知道这是怎么回事。否则,关于关闭部分,您是正确的。
$stmt->close()对我不起作用,仍然是“命令不同步;现在无法运行此命令”。我假设来自
$stmt
的数据处理应该在
关闭()之前进行。我将尝试第二种选择。经过数小时的测试,我得出结论,错误在于获取子集数据:我不知道这是怎么回事。否则,你在最后的部分是对的。