2016-01-18 2 views
1

Я пытаюсь сохранить два поля из найденных данных JSON here в базе данных mysql. Сначала я создаю массивы PHP для данных, которые я хочу использовать:Загрузить данные из файла JSON в базу данных MYSQL

$o = file_get_contents("vixData.json"); 
$o = json_decode($o); 
$date = []; 
$close = []; 
$set = $o->dataset->data; 
foreach($set as $pos) 
{ 
array_push($date,$pos[0]); 
array_push($close,$pos[4]); 
} 

Хорошо работает. Теперь я пытаюсь адаптировать вопрос This о вставке нескольких строк через php-массив. Сначала я взрывать свои массивы:

$date = implode(",", $date); 
$close = implode(",", $close); 

Затем попробуйте вставить в БД с помощью:

$sql = "INSERT INTO vix (date,close) VALUES (".$date.",".$close.")"; 

    if (mysqli_multi_query($dbc, $sql)) { 
     echo "VIX Load Successful"; 
    } else { 
     echo "VIX Load Error"; 
    } 

Я вижу свою ошибку нагрузки. Проблема с подключением к базе данных отсутствует, потому что $ dbc используется ранее в моем скрипте. Попытка отладки; Является ли мой оператор SQL INSERT действительным? Может ли кто-нибудь увидеть эту проблему?

С наилучшими пожеланиями,

+0

удалить. оператор рядом с переменной в запросе –

+0

должен работать с или без. право оператора? – DVCITIS

ответ

1

В коде есть две проблемы.

  1. Как уже упоминалось, другой помощник вам нужно использовать кавычки для строки даты.
  2. Во-вторых, вы не можете использовать mysqli_multi_query() как это.

Модифицированный код:

Вы можете использовать несколько INSERT заявление, как так:

$o = file_get_contents("vixData.json"); 
$o = json_decode($o); 
$date = []; 
$close = []; 
$set = $o->dataset->data; 
foreach($set as $pos) 
{ 
    array_push($date,$pos[0]); 
    array_push($close,$pos[4]); 
} 

$sql = ""; 
foreach ($date as $key => $value) { 
    $sql .= "INSERT INTO vix (date,close) VALUES ('".$value."','".$close[$key]."'); "; 
} 

if (mysqli_multi_query($dbc, $sql)) { 
    echo "VIX Load Successful"; 
} else { 
    echo "VIX Load Error"; 
} 
2

Просто глядя на него быстро, кажется, ваши ценности не завернутые в кавычки в SQL. Попробуйте следующее:

$sql = "INSERT INTO vix (date,close) VALUES ('".$date."','".$close."')"; 

Извлечение оператора concat (.) Приведет к тому же.

+0

Да, это сработало! глупая ошибка! спасибо – DVCITIS

+0

Удивительный! Стоит отметить, что если $ date или $ close имеют апостроф, ваш запрос, вероятно, тоже сломается. Обязательно избегайте ввода. – Marinus

+0

@Marinus: вы пропустили несколько запросов .. но хороший ответ ... заработайте мой голос. – devpro

0

Удалить двойные кавычки и concatinator оборачивать ваши ценности.

$sql = "INSERT INTO vix (date,close) VALUES ('$date','$close')"; 
Смежные вопросы