Задать вопрос
@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 не отдаёт!
Как можно получить массив полностью?
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
fsockopen
@fsockopen
для начало сделай print_r($res) и посмотри что у тебя там ..может вообще все пусто
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
abler98
@abler98
Software Engineer
Может просто удалить все записи из таблицы перед переносом данных? Тем более там уже есть две необходимые строчки, нужно только роскомментировать их.

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

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

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

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