2013-05-08 2 views
2

Мне нужно вставить элементы массива, закодированного в php, в базу данных, и я полностью застрял. Я сначала использовал json encode для захвата данных из базы данных с помощью SQL-запроса (который я сделал успешно), но теперь мне нужно иметь возможность сделать обратное. Если бы кто-нибудь мог помочь, я бы очень признателен. Это мой второй день работы, и я не очень хорошо себя чувствую. Ниже мой код:Inset php json закодированный массив в базу данных

$UserCoords_Query = "Select Accuracy, Longitude, Latitude, Timestamp        
     FROM UserDetails 
      WHERE UserId =" . $UserID; 
        $UserCoords_result = mysql_query($UserCoords_Query); 

if (mysql_num_rows($UserCoords_result) == 0) { 
    echo "There are no users with an id of ". $UserID; 
} 

else { 
      $EmptyArray=array(); 
    while ($row = mysql_fetch_array($UserCoords_result)) { 
     $Accuracy=$row['Accuracy']; 
     $Longitude= $row['Longitude']; 
     $Latitude=$row['Latitude']; 
     $Timestamp= $row['Timestamp']; 

     $Queue= array('Accuracy:' => $Accuracy, 'Latitude' => $Latitude, 'Longitude' => $Longitude, 'Timestamp' => $Timestamp); 
     array_unshift($EmptyArray,$Queue); 
} 

    $ObjectResponse = array('Coords' => $EmptyArray); 
    echo json_encode($ObjectResponse); 

    $Json_Encoded= json_encode($ObjectResponse); 

    $Json_Decoded= json_decode($Json_Encoded, true); 

    $Update_Query= "INSERT INTO UserDetails (UserId, Accuracy, Latitude, Longitude,   Timestamp) 
    VALUES ('".$UserID."','".$Json_Decoded[0]  ['Accuracy']."','".$Json_Decoded[0]['Latitude']."', 
    '".$Json_Decoded[0]['Longitude']."','".$Json_Decoded[0]['Timestamp']."')"; 

    mysql_query($Update_Query) or die(mysql_error()); 
+0

Какая ошибка вы получаете? –

+0

вы не должны вставлять json-текст в db, если вы не планируете НИКОГДА не обращаться к отдельным данным из json-текста с помощью sql. json - это формат транспорта, а не формат хранения. –

+0

@ Marc B Ну мне нужно взорвать строку, чтобы получить элементы и добавить их в БД. Я думал, что это то, что делает функция декодирования json? – user2363025

ответ

0

Вам нужно установить второй параметр json_encode как истинного вернуть массив

$Json_Decoded = json_decode($Json_Encoded, true); 
+0

Спасибо, я попробовал это. Тем не менее, я все еще получаю сообщение об ошибке «Warning: file_get_contents ({« Coords »: [{« Точность: »:« 56 »,« Широта »:« 78 »,« Долгота »:« 89 »,« Временная метка », : «909»}]}): не удалось открыть поток: нет такого файла или каталога в /home/roseanne/public_html/display_Coords.php в строке 48 « – user2363025

+0

это другая ошибка, из-за которой какой-то файл не существует. –

+0

@ chandresh_cool это единственная ошибка, которую я получаю. Строка 48 - это строка: $ Json_Data = file_get_contents ($ Json_Encoded); – user2363025

1

Я согласен с chandresh_cool. вы должны использовать опцию 'true' для декодирования json-кодированной строки в виде массива, иначе она вернет объект.

Кроме того, file_get_contents() ожидает имя файла (с полным или относительным путем). Когда вы пытаетесь дать строку json_encoded, она думает, что это имя файла, и оно попытается открыть его как файл, который, очевидно, не существует, и, таким образом, выдает ошибку. Попробуйте указать существующее имя файла и посмотрите, что решает проблему.

P.s. Я знаю, что это должен быть комментарий, но из-за недостаточных баллов я не могу комментировать

+0

@ dhavald Я редактировал код, чтобы включить true, и удалил функцию получения содержимого. Тем не менее, я все еще получаю ошибку: Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, boolean задан в /home/roseanne/public_html/display_Coords.php в строке 26 – user2363025

+0

успешно ли он обновляет базу данных? – dhavald

+0

Нет, потому что запрос включает использование переменных из декодированного массива, но у меня есть некоторая ошибка, связанная с этим декодированием. – user2363025

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