Php mysqli_stmt_get_result和mysqli_fetch_是否都不兼容?
我试图绑定参数(为了安全),然后将结果放入数组中,因此我创建了如下代码。问题是它不工作:Php mysqli_stmt_get_result和mysqli_fetch_是否都不兼容?,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我试图绑定参数(为了安全),然后将结果放入数组中,因此我创建了如下代码。问题是它不工作:$arr为空。(顺便说一句,我知道getList中的查询是有效的。) 请注意,在使用mysqli\u query()时,我需要使用mysqli\u fetch\u all 在参考中,我发现以下评论: 此外,mysqli_fetch_all仅适用于缓冲结果集,它们是 mysqli_查询的默认值。MYSQLI_USE_结果将在中受支持 5.3.4+然而,以这种方式使用它,将无缓冲集具体化是毫无意义的。在这种情况下
$arr
为空。(顺便说一句,我知道getList
中的查询是有效的。)
请注意,在使用mysqli\u query()
时,我需要使用mysqli\u fetch\u all
在参考中,我发现以下评论:
此外,mysqli_fetch_all仅适用于缓冲结果集,它们是
mysqli_查询的默认值。MYSQLI_USE_结果将在中受支持
5.3.4+然而,以这种方式使用它,将无缓冲集具体化是毫无意义的。在这种情况下,选择STORE_RESULT,然后
fetch_all不会复制数据,而是在存储数据时引用它
已经在mysqlnd中了
我发现准备好的语句返回未缓冲的结果,所以我尝试使用$result=mysqli\u stmt\u store\u result($stmt)
而不是$result=mysqli\u stmt\u get\u result($stmt)代码>但是这没有帮助
这并没有让我完全不知所措——我知道我可以一次循环加载一行数据,但我真的不想为了从准备好的语句中获取数组这样简单的事情而不得不在PHP中循环。有没有办法将结果集作为一个对象来获取和处理?我刚刚重新阅读了文档
我现在没有可能测试mysql
但只是一个猜测:
mysqli_fetch_all(mysqli_result$result
参数仅限结果程序样式:结果集标识符
由mysqli_query()、mysqli_store_result()或
mysqli_使用_结果()
我想强调的是,所有函数mysqli\u query()、mysqli\u store\u result()、mysqli\u use\u result()
都属于mysqli类,而不是stmt
,它们返回typemysqli\u result
但是您正在尝试使用mysqli\u stmt\u get\u result($stmt);
mysqli_结果mysqli_stmt_get_结果(mysqli_stmt$stmt)
返回值
失败时返回resultset或FALSE
因此,此函数返回类型resultset
notmysqli\u result
因此,您必须更改代码以不使用mysqli\u stmt
因此,改变:
if ($stmt = mysqli_prepare($con, "call getList(?)")) {
mysqli_stmt_bind_param($stmt, 's', $userInputSearch);
mysqli_stmt_execute($stmt);
到
,或
只要换一句话:
$arr=mysqli\u fetch\u all($result,mysqli\u ASSOC);
到
很抱歉,如果出现任何错误,现在无法跟踪和调试,希望这会有所帮助。如果内存可用,您必须始终使用\u stmt\u
函数,包括mysqli\u stmt\u prepare
和stmt\u init
才能正常工作。这是mysqli API失控的一个很好的例子添加新功能时获得。文档明确表示您可以使用mysqli\u store\u result()
中的对象,但不要参考mysqli\u stmt\u store\u result()
。我赞成这个问题。OP的问题:“这并没有让我完全不知所措——我知道我可以一次循环加载一行数据,但我真的不想为了从准备好的语句中获取数组这样简单的事情而不得不在PHP中循环。"谢谢,@KimAlexander。但是,在存储过程中处理转义字符串可能需要更多的代码,所以我想我必须循环。虽然很遗憾,但我想你得到了你所付出的。也许我想要的可以在ASP中完成。我看不到调用存储过程的新变体有任何问题。这几乎和你以前得到的一样。这个mysqli\u real\u escape\u string
只需清理值并为查询做好准备。由于这个原因,我无法理解在asp和php之间切换的逻辑。但是你可以做任何你想做的事情。祝你好运:-)我不会切换。我只是在沉思。
if ($stmt = mysqli_prepare($con, "call getList(?)")) {
mysqli_stmt_bind_param($stmt, 's', $userInputSearch);
mysqli_stmt_execute($stmt);
$result = mysqli_query ( $con , "call getList(".mysqli_real_escape_string($userInputSearch).")" );
$arr = array()
while ($row = $result->fetch_array())
{
arr[] = $row ;
}