Как выполнить sql запрос 10000 раз?

Имеется массив с данными, примерно 10000 элементов (не предел) - пользователи вк с полями ( user_id, name, photo, total_score) получаю через vk api. Требуется добавить их в базу данных, причем если уже есть в базе данных пользователь с user_id мы обновляем данные если пользователя не существует то мы его вставляем в бд
$connection = mysqli_connect($servername, $username, $password, $bdname);
    foreach ($user_arr as user) {//over 10k
    $sql = "SELECT * FROM top_users WHERE usd='".$user[id]."' AND date='".$date."'";
    $result = mysqli_query($connection, $sql);
    $data = mysqli_fetch_all($result, MYSQLI_ASSOC);
    if($data[0]){
        $sql="UPDATE top_users SET total_score='".$user[total_score]."' WHERE usd='".$user[id]."' AND date='".$date."'";
        mysqli_query($connection, $sql);
    }else{
        $sql="INSERT INTO top_users (ID,usd,name,img,total_score,date) VALUES  (NULL,'".$user[id]."','".$user[name]."','".$user[photo]."','".$user[total_score]."','".$date."')";
        mysqli_query($connection, $sql);
         }

    }


так вот мне вадет вот такую ошибку Warning: Error while sending QUERY packet. PID=11076 in C:\OSPanel\domains\localhost\Config.php on line 38

собственно строка вот $result = mysqli_query($connection, $sql);
  • Вопрос задан
  • 417 просмотров
Пригласить эксперта
Ответы на вопрос 1
poznavaka
@poznavaka
Программист под Android, Web-разработчик
10 тыс добавлений выполнить единожды не беда, НО, в mysql придумали конструкцию INSERT ... ON DUPLICATE KEY UPDATE ... для таких целей. Делаете user_id от VK как primary key (кстати в VK user_id на сколько я знаю bigint) и mysql скажет вам спасибо. Таким образом не будет лишнего select, кластерный индекс будет работать весьма эффективно, а ваш код станет чище.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы