Как выполнить запросы mysqli при переборе строк, возвращаемых с использованием mysqli_use_result?(PHP) - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь перебрать всех пользователей и вызвать функцию для каждого имени пользователя из таблицы учетных записей, которую я имею в базе данных 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";
    }
}

Но это заняло слишком много памяти, так как у меня в таблице более 4 миллионов записей.

Поэтому я попытался:

$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 голосов
/ 08 февраля 2019

Вместо вызова этой функции (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";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...