Pregunta sobre php, csv, mysql – ¿Mejor manera de captura de error LOAD DATA LOCAL INFILE?

6

Soy un novato en MySQL que termina una parte del código central para mi aplicación web. El código importa un archivo CSV (localmente), que FileMaker genera y limpia, y lo deja ser.

Dado que esto se pondrá en producción en algún momento pronto (y probablemente sea una base de datos de menos de 500 mb), me encantaría saber si hay una mejor comprobación / detección de errores que podría hacer para evitar posibles problemas en el futuro o recibir alertas. la configuración de mi servidor He leído cosas sobre registros temporales, etc. y mi administración de MySQL aún no está a la altura.

El código muy básico es:

$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());

EDICIÓN PS: También me encantaría saber si este método de importación está abierto a la inyección SQL.

Antes estaba usando una instrucción de inserción simple y fgetcsv se estaba quedando sin memoria en mi archivo de 18 mb. No pude resolverlo y el host lo maximizo a 128 mb de RAM y necesito que esto funcione. Dicho esto, en cualquier otro lugar que esté usando DOP ;-) SWL
No puedo ver cómo podría haber un riesgo de inyección SQL de primer orden al ejecutarLOAD DATA INFILEComo MySQL no está ejecutando el contenido del archivo CSV, simplemente lo analiza como CSV. Por supuesto, eso no dice nada sobre el riesgo de un ataque de segundo orden, pero siempre que cada consulta que tome información (incluida la entrada de un resultado de la consulta) utilice la parametrización, debería estar seguro. Por ese motivo (entre otros) debería usar mysqli o PDO para acceder a mysql en lugar de a las funciones mysql_ *. John Carter
Oh claro, no tengo ninguna objeción a usarLOAD DATA INFILE para importar CSV, para eso es. John Carter

Tu respuesta

1   la respuesta
4

el manejo de errores con el archivo de datos de carga es muy pobre. Lo uso casi todos los días, y se ha convertido en una rutina simple para importar en una tabla temporal de algún tipo, y usar una combinación de PHP y MySQL para validar lo que se importó. Se puede argumentar que esto es un trabajo extra, pero tiene la ventaja de que me da un control total de lo que es un "error". En pocas palabras, lo uso para obtener los datos sin procesar en su lugar de la manera más eficiente posible, luego construyo mis reglas de comprobación y validación de errores en un script php.

Gracias por la rápida respuesta. Mi comprobación de errores está en FileMaker y es bastante estricta, así que me siento segura allí. ¿Hay alguna posibilidad de una inyección de SQL esta ruta por cierto? SWL
No sé de dónde provienen sus datos, por lo que no puedo decirlo con seguridad, pero eso suele ser un problema con la entrada del usuario, así que probablemente no. Luego regresa a la limpieza que hace en FileMaker en cuanto a qué tan seguro es su producto terminado. GDP

Preguntas relacionadas