Pergunta sobre php, mysql, csv – Melhor maneira de erro capturar LOAD DATA LOCAL INFILE?

6

Eu sou um novato MySQL terminando um pedaço de código central para o meu webapp. O código importa um arquivo CSV (localmente), que é gerado e limpo pelo FileMaker e o deixa.

Dado isto é ir à produção em algum momento em breve (e provavelmente ser um banco de dados abaixo de 500mb), eu adoraria saber se há qualquer melhor verificação de erros / captura que eu poderia fazer para evitar problemas na estrada ou ser alertado para minha configuração do servidor. Eu li coisas sobre logs temporários, etc., e minha administração MySQL ainda não está pronta.

O código muito básico é:

$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: Eu também gostaria de saber se esse método de importação está aberto para injeção de SQL?

Não consigo ver como haveria risco de injeção de SQL de primeira ordem ao executarLOAD DATA INFILE, uma vez que o MySQL não está executando o conteúdo do arquivo CSV, ele está apenas analisando-o como CSV. É claro que isso não diz nada sobre o risco de um ataque de segunda ordem, mas desde que toda consulta que receba entrada (incluindo a entrada de um resultado de consulta) use parametrização, você deve estar seguro. Por esse motivo (entre outros) você deve usar mysqli ou PDO para acessar o mysql ao invés das funções mysql_ *. John Carter
Ah claro, eu não tenho objeções em usarLOAD DATA INFILE para importar CSV, é para isso. John Carter
Eu estava usando uma instrução de inserção simples antes e fgetcsv estava saindo de memória no meu arquivo de 18MB. Não consegui resolvê-lo e estou no máximo no host em 128mb de RAM e preciso conseguir / manter isso funcionando. Dito isto, todos os outros lugares que estou usando PDO ;-) SWL

Sua resposta

1   a resposta
4

o tratamento de erros com o carregamento de dados é muito fraco. Eu uso quase todos os dias, e tornou-se uma rotina simples para importar em uma tabela temporária de algum tipo, e usar uma combinação de PHP e MySQL para validar o que foi importado. Pode-se argumentar que isso é trabalho extra, mas tem a vantagem de me dar controle total sobre o que é um "erro". Simplificando, eu uso para obter os dados brutos no local da forma mais eficiente possível, em seguida, construo minhas regras de verificação e validação de erros em um script php.

Eu não sei de onde seus dados estão vindo, então não posso dizer com certeza, mas normalmente isso é um problema com a entrada do usuário, então presumivelmente não. Em seguida, ele volta para a depuração que você faz no FileMaker sobre a segurança do produto final. GDP
Obrigado pela resposta rápida. Minha verificação de erros está no FileMaker e é bastante rigorosa, então estou me sentindo segura lá. Existe alguma possibilidade de uma injeção de SQL esta rota btw? SWL

Perguntas relacionadas