2012-05-18 16 views
6

Soy un novato de MySQL que termina un pedazo de código central en mi aplicación web. El código importa un archivo CSV (localmente), que es generado y limpiado por FileMaker y lo deja.La mejor forma de capturar errores LOAD DATA LOCAL INFILE?

Dado que esto se irá a producción en algún momento cercano (y probablemente sea una base de datos menor a 500 mb), me gustaría saber si hay algún error en la comprobación/captura de posibles problemas en el futuro. o ser alertado de la configuración de mi servidor. He leído cosas sobre los registros temporales, etc. y mi administración de MySQL todavía no está preparada.

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

PS EDIT: También me gustaría saber si este método de importación está abierto a la inyección de SQL?

+0

No veo cómo podría haber ningún riesgo de inyección SQL de primer orden ejecutando 'LOAD DATA INFILE', ya que MySQL no está ejecutando el contenido del archivo CSV, solo 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 entrada (incluida la entrada de un resultado de consulta) use la parametrización, debe estar seguro. Por esa razón (entre otras) debería usar mysqli o PDO para acceder a mysql en lugar de las funciones mysql_ *. –

+0

Estaba usando una instrucción de inserción simple antes y fgetcsv se estaba quedando sin memoria en mi archivo de 18 mb. No pude resolverlo y estoy maximizado por el host a 128mb de RAM y necesito conseguir/mantener esto funcionando. Dicho esto, en cualquier otro lugar estoy usando PDO ;-) – SWL

+0

Oh, claro, no me opongo al uso de 'LOAD DATA INFILE' para importar CSV, para eso sirve. –

Respuesta

4

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

+0

Gracias por la respuesta rápida. Mi comprobación de errores está en FileMaker y es bastante estricta, así que me siento seguro allí. ¿Hay alguna posibilidad de una inyección SQL esta ruta por cierto? – SWL

+0

No sé de dónde provienen sus datos, por lo que no puedo decirlo con certeza, pero eso normalmente es un problema con la entrada del usuario, por lo que presumiblemente no. A continuación, vuelve a la depuración que hace en FileMaker en cuanto a qué tan seguro es su producto final. – GDP

Cuestiones relacionadas