Я собираюсь по кругу, пожалуйста, кто-то может помочь с тем, что, я думаю, является относительно легкой проблемой.
У меня есть таблица с 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, или действительно ли это будет работать. Любые советы с благодарностью получили благодарность
Этот код кажется хорошим и должен работать. 1000 - длина строки, как из руководства PHP (цитирование ниже):
Ссылка: http://php.net/manual/en/function.fgetcsv.php
Должно быть больше, чем самая длинная строка (в символах), которая должна быть найдена в CSV файле (с учетом символов конца строки). В противном случае линия разбивается на куски символов длины, если раскол не будет происходить внутри шкафа.
Опуская этот параметр (или установив его на 0 в PHP 5.1.0 и новее), максимальная длина линии не ограничена, что немного медленнее.
Что делает ваш код:
,
является разделителем.$data
будет содержать значения, считанные из текущей строки, т.е. Будет содержать идентификатор учетной записи пользователя и статус.Теперь, совет:
Вы прямо передаете значения, считанные из CSV файла, в простой SQL-запрос, поэтому могут возникнуть нежелательные ошибки, худшая инъекция SQL
Я предлагаю выполнить некоторую проверку ввода данных, считываемых из файла CSV, а затем использовать параметризованный SQL-запрос.
Кроме того, вы используете функции MySQL, которые устарели сейчас. Используйте Mysqli или PDO.