Вставка массива JSON в базу данных MySQL не выполняется правильно

0

Я пытаюсь вставить некоторые данные из файла JSON в базу данных SQL.

Я написал этот сценарий для чтения JSON, декодирования и вставки, однако я получаю только первую строку JSON, так как не думаю, что он зацикливается должным образом.

Я также получаю повторяющуюся ошибку, которая, как мне кажется, вызвана тем, что код пытается зациклить одну и ту же строку, а не следующую строку в JSON! (Вставляется только первый элемент JSON)

Как мне заставить мой скрипт зациклить каждую строку в моем JSON и вставить его?

Спасибо!

Код, с которым я работаю:

<?php
error_reporting(E_ALL);
$root = $_SERVER['DOCUMENT_ROOT'];
require ($root."/config.php");

$json = file_get_contents('propertiesA.json');
$obj = json_decode($json,true);

foreach($obj as $item) {
    $query =  "INSERT INTO unverified_list (
         title,
         street_address,
         locality
       ) VALUES (
         '".$item['title']."',
         '".$item['street_address']."',
         '".$item['locality']."'

       )"; 
}

$result = $link->query($query);

if ($link->query($query) === TRUE) {
    echo "Property Added";
} else  {
  echo "Error: " . $query . "<br>" . $link->error;
}

mysqli_close($link);

?>
  • 0
    Немного разумного отступа от кода было бы хорошей идеей. Это поможет нам прочитать код и, что более важно, поможет отладить его. Бегло взгляните на стандарт кодирования для своей выгоды. Вас могут попросить изменить этот код через несколько недель / месяцев, и в итоге вы меня поблагодарите.
  • 0
    Ваш сценарий широко открыт для атаки SQL-инъекцией Даже если вы экранируете входные данные, это небезопасно! Используйте подготовленные параметризованные операторы в API MYSQLI_ или PDO
Показать ещё 3 комментария
Теги:
mysqli

1 ответ

5
Лучший ответ

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

foreach($obj as $item) {
       $query =  "INSERT INTO unverified_list (
         title,
         street_address,
         locality
       ) VALUES (
         '".$item['title']."',
         '".$item['street_address']."',
         '".$item['locality']."'

       )"; // Remove } from here to after next bit of code

       $result = $link->query($query);

       if ($link->query($query) === TRUE) {
           echo "Property Added";
       } else  {
           echo "Error: " . $query . "<br>" . $link->error;
       }
}

Хотя теперь это даст вам сообщение для каждой вставленной строки.

Вам также следует использовать готовые заявления, которые защитят вас от всевозможных потенциальных проблем.

  • 0
    Спасибо ... Вставка правильно, однако я все еще получаю дубликат сообщения об ошибке! Есть идеи почему? Я также посмотрю подготовленные заявления для будущих проектов!
  • 0
    Проверьте определение таблицы базы данных, посмотрите, какие поля определены как уникальные. Затем проверьте свои данные. Вы также можете обнаружить, что при сбое в вашем коде уже была вставлена запись, поэтому при повторном запуске кода она будет продублирована. Вы можете игнорировать их, используя что-то вроде - stackoverflow.com/questions/812437/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню