如何在遍历使用 mysqli_use_result 返回的行时执行 mysqli 查询? (PHP)

Posted

技术标签:

【中文标题】如何在遍历使用 mysqli_use_result 返回的行时执行 mysqli 查询? (PHP)【英文标题】:How to execute mysqli queries while iterating through rows returned using mysqli_use_result? (PHP) 【发布时间】:2019-02-08 12:04:44 【问题描述】:

我正在尝试遍历所有用户,并从我在 mysql 数据库上的帐户表中调用每个用户名的函数。

一开始,我试过了:

$result = mysqli_query($mysqli, "SELECT username FROM accounts");
while ($row = $result->fetch_assoc()) 
    try 
        getFollowerData($row["username"], $mysqli, $ig);    
     catch (Exception $e) 
        echo "$e \n";
    

但这占用了太多内存,因为我的表中有超过 400 万条记录。

于是我尝试了:

$result = mysqli_query($mysqli, "SELECT username FROM accounts", MYSQLI_USE_RESULT);
while ($row = $result->fetch_assoc()) 
    try 
        getFollowerData($row["username"], $mysqli, $ig);    
     catch (Exception $e) 
        echo "$e \n";
    

但是,当我这样做时,我得到:

error: Commands out of sync; you can't run this command now

因为我有这条线:

$result = mysqli_query($mysqli, $insertFollowerData);

在我的 getFollowerData() 函数中,这意味着我正在尝试进行 SQL 查询,而我仍在进行第一次查询以从帐户中获取所有用户名。

有没有办法同时进行这些查询?

【问题讨论】:

也许您为这两个查询打开了两个单独的连接? 不敢相信我没有想到这一点,谢谢! 【参考方案1】:

而不是在循环中调用这个函数(getFollowerData($row["username"], $mysqli, $ig)) 您可以用户内左连接从数据库中获取关注者数据。并且您可以使用限制数据束并通过分页使用延迟加载概念来显示这些数据

$result = mysqli_query($mysqli, "SELECT username, followerdatacolumns FROM accounts LEFT JOIN follower_data_table_name ", MYSQLI_USE_RESULT);
while ($row = $result->fetch_assoc()) 
    try 
         // Your result  
     catch (Exception $e) 
        echo "$e \n";
    

【讨论】:

以上是关于如何在遍历使用 mysqli_use_result 返回的行时执行 mysqli 查询? (PHP)的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_store_result() 与 mysqli_use_result()

PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别

从db创建CSV的PHP内存限制 - 如何减少PHP使用的内存?

在深度优先遍历中如何使用回溯? [复制]

如何在没有遍历框架的情况下在neo4j中进行深度优先遍历?

linux如何遍历键值对