Лучший способ поймать ошибку LOAD DATA LOCAL INFILE?

Я новичок в 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?

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

Ответы на вопрос(1)

Решение Вопроса

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

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

Ваш ответ на вопрос