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

时间:2019-02-08 12:04:44

标签: php mysql sql mysqli

我试图遍历所有用户,并从我在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 个答案:

答案 0 :(得分: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";
    }
}