2013-08-01 3 views
0

Функциональность phpmyadmin по умолчанию для импорта CSV для меня не работает (вращается и нет ошибок), поэтому я написал сценарий для его импорта. Я не получаю никаких ошибок из моего скрипта, но ни одна из строк не импортирует! Вы видите, что я могу делать неправильно?CSV для сценария импорта базы данных

<?php 

$db_host  = 'secret'; 
$db_user  = 'secret'; 
$db_pass  = 'secret'; 
$db_database = 'secret'; 

/* End config */ 



$link = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection'); 
echo "Successfully connected \n"; 
mysql_select_db($db_database,$link); 
mysql_query("SET names UTF8"); 

//get the csv file 
    // $file = $_FILES[csv][dc.csv]; 
$handle = fopen("dc.csv","r"); 
$counter = 0;  
$data = array(); 






    echo "starting import \n"; 
    while(($line = fgetcsv($handle)) !== false) { 
    $data[] = $line; 


     //if ($data[0]) { 
      mysql_query("INSERT INTO private_schools (school_name, 
                 city, 
                 state, 
                 county_code, 
                 zip_code, 
                 NA2, 
                 low_grade, 
                 high_grade, 
                 NA3, 
                 NA4, 
                 NA5, 
                 grade_range, 
                 NA6, 
                 NA7, 
                 NA8, 
                 NA9, 
                 NA10, 
                 NA11, 
                 NA12, 
                 NA13, 
                 NA14, 
                 NA15, 
                 NA16) VALUES 
       (
        '".addslashes($data[$counter][0])."', 
        '".addslashes($data[$counter][1])."', 
        '".addslashes($data[$counter][2])."', 
        '".addslashes($data[$counter][3])."', 
        '".addslashes($data[$counter][4])."', 
        '".addslashes($data[$counter][5])."', 
        '".addslashes($data[$counter][6])."', 
        '".addslashes($data[$counter][7])."', 
        '".addslashes($data[$counter][8])."', 
        '".addslashes($data[$counter][9])."', 
        '".addslashes($data[$counter][10])."', 
        '".addslashes($data[$counter][11])."', 
        '".addslashes($data[$counter][12])."', 
        '".addslashes($data[$counter][13])."', 
        '".addslashes($data[$counter][14])."', 
        '".addslashes($data[$counter][15])."', 
        '".addslashes($data[$counter][16])."', 
        '".addslashes($data[$counter][17])."', 
        '".addslashes($data[$counter][18])."', 
        '".addslashes($data[$counter][19])."', 
        '".addslashes($data[$counter][20])."', 
        '".addslashes($data[$counter][21])."', 
        '".addslashes($data[$counter][22])."' 
       ) 
      " or die("THere was an issue!!: " . mysql_error())); 
      //print($data[$counter][0]); 
      print "INSERT INTO private_schools (school_name, 
                 city, 
                 state, 
                 county_code, 
                 zip_code, 
                 NA2, 
                 low_grade, 
                 high_grade, 
                 NA3, 
                 NA4, 
                 NA5, 
                 grade_range, 
                 NA6, 
                 NA7, 
                 NA8, 
                 NA9, 
                 NA10, 
                 NA11, 
                 NA12, 
                 NA13, 
                 NA14, 
                 NA15, 
                 NA16) VALUES 
       (
        '".addslashes($data[$counter][0])."', 
        '".addslashes($data[$counter][1])."', 
        '".addslashes($data[$counter][2])."', 
        '".addslashes($data[$counter][3])."', 
        '".addslashes($data[$counter][4])."', 
        '".addslashes($data[$counter][5])."', 
        '".addslashes($data[$counter][6])."', 
        '".addslashes($data[$counter][7])."', 
        '".addslashes($data[$counter][8])."', 
        '".addslashes($data[$counter][9])."', 
        '".addslashes($data[$counter][10])."', 
        '".addslashes($data[$counter][11])."', 
        '".addslashes($data[$counter][12])."', 
        '".addslashes($data[$counter][13])."', 
        '".addslashes($data[$counter][14])."', 
        '".addslashes($data[$counter][15])."', 
        '".addslashes($data[$counter][16])."', 
        '".addslashes($data[$counter][17])."', 
        '".addslashes($data[$counter][18])."', 
        '".addslashes($data[$counter][19])."', 
        '".addslashes($data[$counter][20])."', 
        '".addslashes($data[$counter][21])."', 
        '".addslashes($data[$counter][22])."' 
       ) 
      " ; 
      $counter ++; 
      if ($counter === 3){ 
      exit(); 
      } 
     // } 
    } 

//var_dump($data); 
?> 

Печать в SQL Statement дает

INSERT INTO private_schools (school_name, city, state, county_code, zip_code, NA2, low_grade, high_grade, NA3, NA4, NA5, grade_range, NA6, NA7, NA8, NA9, NA10, NA11, NA12, NA13, NA14, NA15, NA16) VALUES ( 'Evangel Classical Christian School', 'Alabaster', 'AL', '1117', '35007', '21', 'KG', '12', '5', '2', '8', 'K-12', '295', '40.7', '28.8', '10.2', '99', '0.7', '0', '0', '0', '0', '0.3')

Пример из CSV файла:

Abbeville Christian Academy,Abbeville,AL,1067,36310,42,PK,12,6,2,8,K-12,157,52.9,16.6,9.5,95.5,0.6,0,1.9,0,0.6,1.3 
Kingwood Christian School,Alabaster,AL,1117,35007,21,KG,12,6,2,4,K-12,413,44.1,33.1,12.5,88.9,6.8,0,1.9,0,0.2,2.2 
Evangel Classical Christian School,Alabaster,AL,1117,35007,21,KG,12,5,2,8,K-12,295,40.7,28.8,10.2,99,0.7,0,0,0,0,0.3 
Westwood Bapt Weekday Edu Ministry,Alabaster,AL,1117,35007,21,PK,KG,6,2,5,K-6,12,50,1,12,100,0,0,0,0,0,0 
+0

Вы пробовали отладить его вообще? Есть 141 строка для проверки. Вы можете, конечно, сузить его дальше? –

+0

Я обновил свой ответ ..> _ <Смотрите, помогает ли это. –

+0

Убедитесь, что fgetcsv правильно определяет окончания строк. Есть флаг, который вы установили для этого – Anthony

ответ

0

Посмотрите в использовании расширение mysqli, как MySQL является deprecated.

Manpage для addslashes говорит

To escape database parameters, DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_literal(), pg_escape_string() for PostgreSQL) should be used for security reasons.

Для MySQL попробовать mysql_real_escape_string, и MySQLi попробовать mysqli_real_escape_string.

Я не использую этот формат для проверки ошибок/дисплея, но я думаю, что так, как вы бы написать это:

mysql_query($yourInsertQueryString) or die("THere was an issue!!: " . mysql_error()); 

Все ли из этих типов столбцов действительно строки?

+0

Типы столбцов в диапазоне базы данных ... есть текст, varchar, int, floats ... мой формат вставки не подходит для этого? должны ли цифры не содержать котировки вокруг них? – CaitlinHavener

+0

Правильно, они не должны. 'string_type_column = 'value', number_type_column = 123' –

+0

Ahhh, что будет иметь смысл. Я уточню вас позже. Я должен работать над другими вещами. – CaitlinHavener

0

Вы можете попробовать этот подход тоже, цитируя поля тоже и с помощью «Coupple» assingment для проверки правильности назначения (частая проблема с CSV импорта)

<?php 
$db_host  = 'secret'; 
$db_user  = 'secret'; 
$db_pass  = 'secret'; 
$db_database = 'secret'; 

$_db = mysql_connect($db_host,$db_user,$db_pass); 
mysql_select_db($db_database,$_db); 

$fileds = array(

"school_name", 
"city", 
"state", 
"county_code", 
"zip_code", 
"NA2", 
"low_grade", 
"high_grade", 
"NA3", 
"NA4", 
"NA5", 
"grade_range", 
"NA6", 
"NA7", 
"NA8", 
"NA9", 
"NA10", 
"NA11", 
"NA12", 
"NA13", 
"NA14", 
"NA15", 
"NA16", 
); 

$handle = fopen("dc.csv","r"); 
$counter = 0; 
$data = array(); 
echo "starting import \n"; 
while(($line = fgetcsv($handle)) !== false) { 
    $data[] = $line; 
} 
foreach($data as $row){ 
    if(count($fileds) != count($row)){ 
     continue; 
    } 
    $couples = array(); 
    foreach($fileds as $k => $v){ 
     $couples[] = sprintf("`%s` = '%s",$v ,mysql_real_escape_string($row[$k],$_db)); 
    } 
    $_sql = 'INSERT INTO private_schools '.join(',', $couples).';'; 
    echo "$_sql\n"; 
    mysql_query($_sql); 

} 
// and remeber to commit if you use a transactiona storage engine 
mysql_query('commit',$_db); // fixed for "old" client 
+0

Это не работает для меня :( – CaitlinHavener

+0

Очень странно, это * рабочий * пример! Ну, вы нашли решение aa, но это более приятно сказать: «Не работайте, он дает мне эту ошибку: bla бла» –

0

Вы можете попробовать использовать mysqlimport. Вы запускаетесь из командной строки.

Heres a nice easy tutorial

Это не имеет значения, если вы используете окна, он доступен на том, как хорошо, так же.

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