Задать вопрос
@jenya7771

Как записать ответ БД в массив без while?

Здравствуйте, есть скрипт который должен из файла CSV переносить данные в БД, перенос работает, но нужно сделать что бы уже существующие в бд записи просто перезаписывались, если такой ид уже существует в бд. Ниже часть скрипта.
$connection=mysql_connect (HOST, USER, PASS);
    $db1 = mysql_select_db (DB, $connection); //подкл к имеющейся бд
 // $del="DELETE FROM pudra"; 
 // $result=mysql_query ($del);//удаление из БД

    mysql_query("set names utf8");

    $query = "SELECT id FROM `pudra`";
    $res = mysql_query($query);

    while($row = mysql_fetch_array($res)){
        echo "id:".$row['id']."<br>\n";
    };

    foreach ($get_csv as $value) { //Проходим по строкам файла CSV
    	$available = $value[0];
    	$categoryId = $value [1];
    	$currencyId = $value[2];
    	$delivery = $value[3];
    	$description = $value[4];
    	$id = $value[5];
    	$model = $value[6];
    	$modified_time = $value[7];
    	$name = $value[8];
    	$param = $value[9];
    	$pickup = $value[10];
    	$picture = $value[11];
    	$price = $value[12];
    	$store = $value[13];
    	$type = $value[14];
    	$typePrefix = $value[15];
    	$url = $value[16];
    	$vendor = $value[17];
        $in_sitemap = 0;

        if (in_array($id, $row, true)) {
            echo "Перезаписал id: ".$id."<br>";
            $update = "UPDATE users SET available = '$available', categoryId = '$categoryId', currencyId = '$currencyId', delivery = '$delivery', description = '$description', model = '$model', modified_time = '$modified_time', name = '$name', param = '$param', pickup = '$pickup', picture = '$picture', price = '$price', store = '$store', type = '$type', typePrefix = '$typePrefix', url = '$url', vendor = '$vendor', in_sitemap = '$in_sitemap' WHERE id = '$id'";
        } else{
            echo "Записал id: ".$id."<br>";
            $query="insert into pudra values('$available','$categoryId', '$currencyId', '$delivery', '$description', '$id', '$model', '$modified_time   ', '$name', '$param', '$pickup', '$picture', '$price', '$store', '$type', '$typePrefix', '$url', '$vendor', '$in_sitemap')";
        $result=mysql_query($query); //добавл данных

        $namesites = "http://sanerix.tk";
        $link = $namesites."/?id=".$id."\r\n";

        $fp = fopen("sitemap.txt", "a"); // Открываем файл в режиме записи 
        $test = fwrite($fp, $link); // Запись в файл
    };

};

if($result) echo "Обновление успешно завершено,<br>";
else echo"Ошибка при обновлении!<br>";

    fclose($fp); //Закрытие файла
    if ($test) echo 'Данные в карту сайта успешно занесены.';
    else echo 'Ошибка при записи в карту сайта!';
}


Проверка реализована на in_array($id, $row, true)
но массив while не отдаёт!
Как можно получить массив полностью?
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
fsockopen
@fsockopen
для начало сделай print_r($res) и посмотри что у тебя там ..может вообще все пусто
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
abler98
@abler98
Software Engineer
Может просто удалить все записи из таблицы перед переносом данных? Тем более там уже есть две необходимые строчки, нужно только роскомментировать их.

Если очень хочется заменять, можно воспользоваться MySQL оператором REPLACE

Кстати, зачем ставить точку с запятой после закрывающей фигурной скобки?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽