Php mysqli_查询和mysqli_real_查询之间的区别

Php mysqli_查询和mysqli_real_查询之间的区别,php,mysqli,Php,Mysqli,mysqli::query和mysqli::real\u query之间有什么区别 或 mysqli\u query和mysqli\u real\u query之间有什么区别?查看()的文档: 从功能上讲,使用此函数与调用 mysqli\u real\u query()后跟mysqli\u use\u result()或 mysqli_存储_结果() 据我所知,real_query实际执行查询,而use/store_result启动检索查询结果集的过程。 query()同时执行这两项操作。mys

mysqli::query
mysqli::real\u query
之间有什么区别


mysqli\u query
mysqli\u real\u query
之间有什么区别?

查看()的文档:

从功能上讲,使用此函数与调用 mysqli\u real\u query()后跟mysqli\u use\u result()或 mysqli_存储_结果()

据我所知,real_query实际执行查询,而use/store_result启动检索查询结果集的过程。
query()同时执行这两项操作。

mysqli::query
将在有结果时返回结果

mysql::real\u查询
成功时返回true,否则返回false

您可以在php文档中看到这一点:

  • ,

有点晚了,但对我来说最大的进步是在使用默认设置调用这些函数时使用RAM:使用
mysqli\u real\u query()
您不会将整个结果复制到RAM中,而默认情况下,
mysqli\u query()
会这样做(尽管可以使用
$resultmode
参数进行更改).

在实践中,我在其他答案中看不到另一个区别您可能需要使用
mysqli\u real\u query()
进行
调用
语句

如果调用的是存储过程,那么它可以返回多个结果
mysqli_query()
将获取第一个结果,但可能需要获取更多的结果,这将导致错误。您需要使用
mysqli\u real\u query
(或
mysqli\u multi\u query()
)来获取这些结果集

可悲的是,这种解释是不可能的,所以很难找到

为了以防万一,我给您举了一个代码示例,调用一个过程,该过程假设使用
mysqli::real\u query

$query="CALL storedProcedure()";
if($conn->real_query($query)){              
    do{
        if($result=$conn->store_result()) {
            while($row=$result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    }while($conn->more_results() && $conn->next_result());          
}

帮我写更好的答案,描述一下为什么你否决了它,不知道为什么这个问题结束了。它可能应该由手册来回答,但它不是很清楚,而且“非建设性”结束原因的文本似乎根本不适合它。是的,这绝对不应该结束,特别是因为列出的结束原因。我来这里就是为了这个问题,很高兴我这么做了。当版主看到帖子上的“关闭”链接时,他们需要认真地停止如此高兴的点击行为。@SazzadHossainKhan我已经这样做了,但当其他用户对它进行评论时,显然以3比2的优势被击败()。我认为马歇尔公爵没有资格投这样的一票。我还要求重新开始这个问题。我相信这个问题是完全正确的,而且结构合理。在来到这里之前,我查看了PHP手册,也被解释所困扰。现在我了解到,在我正在查看的(未记录的)代码中,$mySQLi->real_query()函数的错误检查用于测试失败的SQL命令,而单独的$mySQLi->store_result()函数的错误检查用于测试非空结果集,此函数类似于调用mysqli_real_query(),然后再调用mysqli_use_result()或mysqli_store_result()。“您也可以使用mysqli_query()查询来实现这一点。检查你的premises@YourCommonSense手册明确指出:“无法使用mysqli_query()正确获取从存储过程返回的结果集函数将语句执行和将第一个结果集提取到缓冲结果集(如果有的话)相结合。但是,对用户隐藏了其他存储过程结果集,这会导致mysqli_query()无法返回用户期望的结果集。“嗯,手册是错的。只需使用next_result()调用通常的例程并存储_result(),然后将这些额外的结果集作为well@YourCommonSense几年前,我经过艰苦的学习,不得不修改代码,但也许新版本的PHP允许这样做。听起来很少见,手册是错的,但并非不可能。如果可以的话,我会尝试一下,Meawile似乎会给出一个从官方文档中摘录的建议。这只是一个小小的算法上的不便,不是一个固有的特性。您只需在第一次调用store_result()即可。在循环中,您可以将其移动到while子句中,然后将real_query更改为query(),而不会出现任何问题。基本上,您正在使用的函数与存储过程无关。您可以对mysqli_query()进行相同的操作,只要告诉它进行无缓冲调用即可