2013-07-09 3 views
1

В настоящее время у меня есть CSV, который после загрузки должен быть прочитан upload.php, а затем загружать эти данные в базу данных.Кажется, что данные CSV не вставляются в базу данных

На данный момент я вижу, что он получает массив, исправляет данные из файла CSV, а также пытается вставить правильные данные в базу данных, но, похоже, он, похоже, не в конечном итоге вставляет данные в базы данных.

Что это может быть?

код ниже:

upload.php

<?php 
include('config.php'); 

$file = "test.csv"; 
$separator = ","; 
$length = 0; // size of the longest line(!), 0 = no limit 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); // use it as a white list 

$handle = fopen($file, "r"); 

// get 1st line (header) and flip keys and values 
// format like [title] --> 0, [firstName] --> 1, ... 
$header = array_flip(fgetcsv($handle, $length, $separator)); 

$values = array(); 

// while we can read lines as csvData: 
while(($csvData = fgetcsv($handle, $length, $separator)) !== false){ 
    foreach ($fields as $field){ // put all values in an array in correct order 
     $values[] = $csvData[$header[$field]]; 
     echo $field."<br>"; 
     mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 
    } 
} 
fclose($handle); 

?> 

Спасибо заранее.

+0

Normaly Я повторяю запрос из сценария php и запускаю сгенерированную очередь непосредственно на сервере sql, чтобы увидеть, если запрос работает. –

+0

@AyeTry - вы можете удалить этот комментарий; это похоже на то, что это ваше имя, номер телефона и адрес улицы .... – andrewsi

+0

Я думал, что, когда я это сделал, но спасибо в любом случае, вы просто не знаете, кто здесь, я полагаю, приветствует. – AyeTry

ответ

1

Ваш запрос не приложив строки в кавычках:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 

будет производить SQL, как: INSERT INTO csv (foo,bar,baz) VALUES (a,b,c);

Try:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

Однако. Еще лучше было бы перейти на mysqli или PDO и использовать параметризованные запросы. В его нынешнем виде ваш код уязвим для SQL-инъекций.

Обратите внимание, что mysql_error содержит последнюю ошибку SQL, которая произошла и помогла бы выявить проблему.

+0

Это здорово, но, к сожалению, он вставляет только одну строку данных из CSV. Есть что-то в коде, который останавливает это? Мне сказали, что функция fgetcsv может быть виновником. – AyeTry

+0

Глядя на свою петлю, вы, кажется, делаете вставку в поле. Попробуйте переместить 'mysql_query' из цикла for. – Jim

+0

Странно, что он по-прежнему только вставляет один в базу данных, но когда я выхожу из INSERT, он проходит цикл while и показывает обе строки данных из CSV. Есть ли у вас какие-либо подсказки относительно того, что это может быть? – AyeTry

Смежные вопросы