2015-07-19 2 views
1

Так что я использую php для загрузки файла csv в массив, обманываю его, очищаю и вставляю данные в таблицу mysql.Вставка Mysql ведет себя странно

Таблица (inboundnew) содержит 9 полей, одну дату, один varchar и 7 целых чисел. Скрипт обрабатывает файл в соответствии с просьбой, и строит «вставить команду в строку», которую я затем запустить с:

$result= mysql_query($string) or die(mysql_error()) 

Вкладыше строковых выходов как:

insert into inboundnew 
(ndate,branch,ans,unans,voice,unqueued,actioned,unactioned, total) 
values 
("2000-01-01","Name of Customer",0,0,0,0,0,0,0); 

Это дает мне следующая ошибка

У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' по строке 1

Однако, когда я запускаю строку через phpmyadmin, она отлично вставляется.

Буду очень признателен, если кто-нибудь из вас поймет, что здесь может быть неправильным.

ОК - так после двух дней удары мозгов на этом, у меня все еще есть проблема.

Я опубликовал ниже код, который я запускаю, чтобы построить строку, которую я затем запускаю в запросе. Он не помещает апострофы, и все же я все еще получаю ошибку MySQL. Извините, если код не отформатирован правильно - я не уверен, как это сделать здесь. Я загрузил и открыл файл CSV ...

while(!feof($file)) { $lines[] = fgets($file); } $clean=array();

$clean = array_unique($lines);//remove duplicates 

$count=0; 
$string="insert into inboundnew (date,branch,ans,unans,voice,unqueued,actioned,unactioned,total) values   "; 

// теперь писать в таблицу - пропускающие первые 2 строки

enter code here 

if ($count > 1) { 


     $parts=explode(',', $val); 
     $a=$parts[0];//ignore this field 
     $b=$parts[1];//ignore this field) 
     if ($b>""){ //ignore if blank line 
      $salon=$parts[2]; 
      $ans=$parts[3]; 
      $missed=$parts[4]; 
      $voice=$parts[5]; 
      $unq=$parts[6]; 
      $act=$parts[7]; 
      $unact=$parts[7]; 
      $total=$parts[8]; 
      $date=$date; 
      $string .= '("'.$date.'","'.$salon.'",'.$ans.','.$missed.','.$voice.','.$unq.','.$act.','.$unact.','.$total.'),'. PHP_EOL; 
    } 
} 
$count++; 
} 
//now remove last comma 
$strlen= strlen($string); 
$string= substr($string,0, $strlen-2); 

Это создает строку, которая не работает в сценарии, но работает в PhpMyAdmin и выдает синтаксическую ошибку

+0

Это означает, что у вас есть ошибка синтаксического анализа строки. Убедитесь, что вы правильно использовали кавычки. '" вставить в значения xx (a, b, c, d) ('$ a', '$ b', '$ c', '$ d') "' –

+0

Я уверен, что вы правы, но выглядит идеальный на данный момент. Я проверил его так много раз ... Мне нужно немного отвлечься от него. –

+1

В сообщении об ошибке указано, что ошибка возникает, когда она попадает на два апострофа. В вашей строке нет никаких апострофов. Вы смотрите на неправильный SQL. – Quentin

ответ

0

Исключить строковые значения с помощью mysql_real_escape_string.

Пример:

$name = mysql_real_escape_string($name); 
$sql = "insert into test (name) values ('$name')"; 
0

Подтвердить тип данных столбцов. Если его строка, значение должно быть заключено в двойные или одинарные кавычки.

+0

Спасибо, но типы данных верны. –

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