2013-07-01 5 views
1

Я искал последний час, касающийся этой проблемы, но ее становление довольно раздражает ...PHP implode не работает с одинарными кавычками?

В любом случае, я пытаюсь вставить данные в mysqli db, я делал это много раз раньше, но по какой-то причине я не могу понять, что происходит не так ...

<?php 

require_once("../config/dbmetar.php"); 

$delimiter = ','; 
$file = "metars.csv"; 
$db = new mysqli(DB_HOST_METAR, DB_USER_METAR, DB_PASS_METAR, DB_NAME_METAR); 
$r = 0; 

if (($handle = fopen($file, "r")) !== FALSE) { 

while (($data = fgetcsv($handle, 5000, $delimiter)) !== FALSE) { 

    if ($r >= 6) { 

     foreach($data as $i => $content) { 

      $data[$i] = $db->real_escape_string($content); 

     } 

     echo "INSERT INTO metars VALUES('" . implode("','", $data) . "');" . "<br>"; 
     //$db->query("INSERT INTO metars VALUES('" . implode("','", $data) . "');"); 

    } 

    $r++; 

} 

fclose($handle); 
} 

?> 

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

В настоящее время это то, что производит эхо:

INSERT INTO metars VALUES('PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0'); 

Любые предложения?

var_dump ($ данные) возвращала эти:

array(1) { [0]=> string(238) "PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0" } INSERT INTO metars VALUES(''); 
array(1) { [0]=> string(153) "CYOD 011131Z 18002KT 1/2SM FG FEW250 RMK CI0,CYOD,2013-07-01T11:31:00Z,54.4,-110.28,,,180,2,,0.5,,,,,,,,,,,FG,FEW,25000,,,,,,,LIFR,,,,,,,,,,,,SPECI,544.0" } INSERT INTO metars VALUES(''); 
array(1) { [0]=> string(276) "CYYD 011131Z AUTO VRB06KT 5SM -RA BR FEW007 BKN070 OVC084 15/14 A3005 RMK PRESRR PCPN 1.0MM PAST HR SLP173 DENSITY ALT 1900FT,CYYD,2013-07-01T11:31:00Z,54.82,-127.18,15.0,14.0,0,6,,5.0,30.050198,1017.3,,TRUE,,,,,,,-RA BR,FEW,700,BKN,7000,OVC,8400,,,MVFR,,,,,,,,,,,,SPECI,523.0" } 
+7

'var_dump ($ data)', вы, вероятно, фактически не получаете массив из нескольких значений. – deceze

+1

... причина, по которой, вероятно, проблема кодирования, где-то, что означает, что разделитель не совпадает. – deceze

+1

«значения должны быть разделены запятыми одинарными кавычками вокруг каждого значения поля ...» Похоже, что на входе указаны только строки, а логические значения, даты и числа - нет. – Powerlord

ответ

2

Это означает, что данные $ имеет 1 пункт, потому что развалятся прекрасно работает таким образом.

var_dump($data); 

Пожалуйста, запустите свалку. Возможно, у вас неправильный разделитель, поэтому в $ data есть один элемент.

+0

Было ли var_dump ... похоже, что построенный массив представляет собой одну строку, как вы уже упоминали ... есть ли простой способ ее исправить? – Mikael

+0

Кажется, разделитель в порядке. Проверьте свой язык, php.net говорит, что это может повлиять на результат. –

-1

Стараюсь эти коды:

$a = array('PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001','PAJZ', '2013-07-01T11:32:00Z','','a','b',''); 

эхо взрывать (" ''", $ а);

Результат: enter image description here

Он отлично работает!

мой PHP версия: PHP 5.3.19 (кли) (постройки: 30 апр 2013 21:16:28) Copyright (с) 1997-2012 РНР Группа Zend v2.3.0 Engine, Copyright (с) 1998-2012 Zend Technologies

и вы можете найти это в php.net http://www.php.net/manual/zh/function.implode.php

Итак, проверьте PHP версии!

+0

PHP версии 5.4.16, я вижу, как вы получили эти результаты, но потом я должен спросить, почему мой цикл foreach не работает так, как предполагалось? – Mikael

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