Вопрос по php, mysql – Лучший способ поймать ошибку LOAD DATA LOCAL INFILE?

6

Я новичок в MySQL, заканчивая кусок кода, который занимает центральное место в моем веб-приложении. Код импортирует файл CSV (локально), который генерируется и очищается FileMaker и оставляет его таковым.

Учитывая, что это скоро будет запущено в производство (и, вероятно, это будет база данных размером менее 500 Мб), я хотел бы знать, есть ли какая-нибудь лучшая проверка / отлов ошибок, которую я мог бы сделать, чтобы, возможно, предотвратить проблемы в будущем или получить предупреждение мой сервер настройки. Я читал кое-что о временных журналах и т. Д., И моя администрация MySQL пока не работает.

Самый базовый код:

$m = mysql_connect('localhost', 'mytable', 'mypassword');
$db = 'mydb';
mysql_select_db($db) or die("Import Error - Couldn't select database: " . mysql_error());

$sql = 'load data local infile "inventory.csv"
        into table ibl_account_details_temp fields terminated by ","
        optionally enclosed by "\""
        lines terminated by "\r"
        (store_id, SKU, account, item_number, brand, description, size, category, price, qty, fees)
        ';

echo mysql_query($sql) or die(myqsl_error());

PS EDIT: I would also love to know if this method of import is open to SQL injection?

Конечно, я не возражаю против использованияLOAD DATA INFILE импортировать CSV, вот для чего он. John Carter
Ранее я использовал простое выражение вставки, и fgetcsv не хватало памяти в моем файле размером 18 Мб. Я не могу решить эту проблему, и я получаю максимальную выгоду от хоста на 128 МБ ОЗУ, и мне нужно, чтобы это работало. Тем не менее, в любом другом месте, где я использую PDO ;-) SWL
Я не могу видеть, как возникнет риск внедрения SQL первого порядка при выполненииLOAD DATA INFILEТак как MySQL не выполняет содержимое файла CSV, он просто анализирует его как CSV. Конечно, это ничего не говорит о риске атаки второго порядка, но пока каждый запрос, который принимает входные данные (включая входные данные из результата запроса), использует параметризацию, вы должны быть в безопасности. По этой причине (помимо прочего) вы должны использовать mysqli или PDO для доступа к mysql вместо функций mysql_ *. John Carter

Ваш Ответ

1   ответ
4

обработка ошибок с загрузкой данных очень плохая. Я использую его почти каждый день, и это становится простой процедурой для импорта во временную таблицу какого-либо типа, и я использую комбинацию PHP и MySQL для проверки того, что было импортировано. Можно утверждать, что это дополнительная работа, но она имеет то преимущество, что дает мне полный контроль над тем, что является «ошибкой». является. Проще говоря, я использую его для максимально эффективного использования необработанных данных, а затем выстраиваю свои правила проверки и проверки ошибок в сценарии php.

Я не знаю, откуда поступают ваши данные, поэтому не могу сказать наверняка, но обычно это проблема с пользовательским вводом, так что, вероятно, нет. Затем возвращается к очистке, которую вы выполняете в FileMaker, относительно того, насколько безопасен ваш готовый продукт.
Спасибо за быстрый ответ. Моя проверка ошибок в FileMaker, и она довольно строгая, поэтому я чувствую себя там в безопасности. Есть ли возможность инъекции SQL по этому пути? SWL

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