Mysql команда обновления из данных CSV

0

Я собираюсь по кругу, пожалуйста, кто-то может помочь с тем, что, я думаю, является относительно легкой проблемой.

У меня есть таблица с 1200 пользователями. Одно из полей в таблице db_user_accounts - "статус". У меня есть дополнительный список этих пользователей в csv, который я хочу установить "статус" на "5", csv - это упорядоченный пользователь, статус

Я нашел это -

<?php
    if (($handle = fopen("input.csv", "r")) !== FALSE)
    {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
            mysql_query(UPDATE db-user_accounts SET status="{$data[1]}" WHERE user = "{$data[0]}"); 
        }
    fclose($handle);
    }
?>

Я не уверен, что такое 1000, или действительно ли это будет работать. Любые советы с благодарностью получили благодарность

  • 0
    Вот руководство для fgetcsv . Код не выглядит необоснованным.
Теги:

1 ответ

0

Этот код кажется хорошим и должен работать. 1000 - длина строки, как из руководства PHP (цитирование ниже):

Ссылка: http://php.net/manual/en/function.fgetcsv.php

Должно быть больше, чем самая длинная строка (в символах), которая должна быть найдена в CSV файле (с учетом символов конца строки). В противном случае линия разбивается на куски символов длины, если раскол не будет происходить внутри шкафа.

Опуская этот параметр (или установив его на 0 в PHP 5.1.0 и новее), максимальная длина линии не ограничена, что немного медленнее.

Что делает ваш код:

  1. Откройте CSV файл в режиме чтения, если файл успешно открыт, он войдет в цикл
  2. Затем он начнет чтение строки за строкой (с учетом длины строки до 1000) до конца файла. Третий параметр , является разделителем.
  3. Выходная переменная $data будет содержать значения, считанные из текущей строки, т.е. Будет содержать идентификатор учетной записи пользователя и статус.
  4. Затем вы запускаете запрос MySQL для обновления базы данных.
  5. И, наконец, закрывает открытый CSV файл.

Теперь, совет:

Вы прямо передаете значения, считанные из CSV файла, в простой SQL-запрос, поэтому могут возникнуть нежелательные ошибки, худшая инъекция SQL

Я предлагаю выполнить некоторую проверку ввода данных, считываемых из файла CSV, а затем использовать параметризованный SQL-запрос.

Кроме того, вы используете функции MySQL, которые устарели сейчас. Используйте Mysqli или PDO.

  • 0
    Спасибо за совет и объяснение.
  • 0
    Я думаю, что я ошибаюсь. У меня есть две таблицы, таблица a имеет «статус», а таблица b имеет «f22», если f22 = 0, я хочу обновить статус таблицы до «5», у них обеих есть user_id - я прочитал, что я могу сделать это без объединения таблиц но не могу заставить его работать
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню