2016-03-14 4 views
0

У меня есть этот код, и он работает хорошо, когда я импортирую только три поля, но когда я пытаюсь импортировать больше 3, это не работает.Импорт Csv в базу данных

mysql_query("INSERT INTO forms (id, created_time, ad_id, ad_name, adset_id, adset_name, campaign_id, campaign_name, form_id, is_organic, specialist, full_name, email, city, country, date_of_birth, phone_number) VALUES 
       ( 
        '".addslashes($data[0])."', 
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."', 
        '".addslashes($data[3])."', 
        '".addslashes($data[4])."', 
        '".addslashes($data[5])."', 
        '".addslashes($data[6])."', 
        '".addslashes($data[7])."', 
        '".addslashes($data[8])."', 
        '".addslashes($data[9])."', 
        '".addslashes($data[10])."', 
        '".addslashes($data[11])."', 
        '".addslashes($data[12])."', 
        '".addslashes($data[13])."', 
        '".addslashes($data[14])."', 
        '".addslashes($data[15])."', 
        '".addslashes($data[16])."', 
        '".addslashes($data[17])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
+0

первое использование 'mysqli_ *' вместо 'mysql_ *', теперь какая ошибка вы получаете. –

+0

, когда я запускаю код только с 3, он работает следующим образом. mysql_query ("INSERT INTO форм (ID, created_time, ad_id) ЗНАЧЕНИЯ ( «" .addslashes ($ данных [0]). " ''" .addslashes ($ данных [1])."», '' .addslashes ($ data [2]). '', ) "); } } while ($ data = fgetcsv ($ handle, 1000, ",", "'")); –

+0

просто эхо запроса в виде строки и попробуйте этот запрос в 'phpmyadmin' –

ответ

0

попробовать эту свою работу вы

while ($data = fgetcsv($handle, 1000, ",")); 

вместо

while ($data = fgetcsv($handle,1000,",","'")); 
+0

Пожалуйста, объясните, почему это поможет. – simbabque

+0

Перпах ваш файл CSV содержит ДВОЙНЫЕ ЦИТАТЫ. Целью тогда было бы отфильтровать эти двойные кавычки из строки перед созданием запроса MYSQL. –

0

Что addslashes() делает в этом коде? Единственное, что вам нужно избегать при разговоре с базой данных, это одинарные кавычки (см. mysql_real_escape_string(), mysqli_real_escape_string() и т. Д.). addslashes предназначен для генерации html, поэтому он записывает ваши данные таким образом, что вы заметите, когда это слишком поздно. Поскольку мы на нем, вы также не должны использовать функции long-obsoleted mysql_*. Разве вы не видели большой красный (нормально розовый) Предупреждение в документации mysql_query()? Используйте mysqli, что едва ли отличается, если вы не используете объектно-ориентированный стиль. В-третьих, вы должны использовать «подготовленные запросы», а не строить строки самостоятельно. Гораздо безопаснее. См. Пример here.

Итак, наконец-то на ваш вопрос. Чтобы построить длинную строку из множества элементов массива, вы можете использовать цикл для добавления каждого элемента по очереди. Но лучше использовать implode: он объединяет элементы массива в одну строку с вашим выбором соединительной строки.

// Escape the first 18 columns of $data 
$escaped = array_map("mysqli_real_escape_string", array_slice($data, 0, 18)); 
// Now pack them into the insert query 
$querystring = "INSERT INTO forms (id, created_time, ad_id, ad_name, adset_id, adset_name, campaign_id, campaign_name, form_id, is_organic, specialist, full_name, email, city, country, date_of_birth, phone_number) 
    VALUES (" . implode(",", $escaped) . ")";