Вставить несколько столбцов JSON в MySQL (используя API)

0

Я пытаюсь хранить json-стол данных спортивных данных, используя API, но я не могу заставить его работать исправно. Хотя я могу вставлять данные, но он вставляет только первый результат столбца и дублирует его во всех последующих столбцах. При дефолте он показывает 50 матчей на предстоящих футбольных матчах. Моя проблема заключается только в том, что результат первой строки дублирует..

Вот код:

//connect to mysql db
$host = "localhost";
$user = "user";
$pass = "pass";
$db = "dname";
$conn = new mysqli($host, $user, $pass, $db) or die("ERROR:could not connect to 
    the database!!!");

//read the json file contents
$url = 'http://api.example.com/v1/events/upcoming?token=566645-
    sl1uDzY3tVvv9M&league_id=78&sport_id=1';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch) or die(curl_error($ch));

if ($data === false) {
    $info = curl_getinfo($ch);
    curl_close($ch);
    die('error occured during curl exec. Additioanl info: ' .
            var_export($info));
}
curl_close($ch);
$obj = json_decode($data, true);

foreach ($obj['results'] as $res) {
    $league = $res['league']['name'];
    $home = $res['home']['name'];
    $away = $res['away']['name'];
    $time = date("d/m h:i", $res['time']);
}
$sql = "INSERT INTO schedule(league, home, away, time)
    VALUES('$league', '$home', '$away', '$time')";
$result = mysqli_query($conn, $sql);
if (!$result) {
    die("ERROR :" . mysqli_error());
} else {
    echo "Records has been successfully inserted";
}
//close the connection
mysqli_close($conn);

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

Теги:

3 ответа

1

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

Сделайте что-нибудь вроде

foreach ($obj['results'] as $res) 
{ 
$league = $res['league']['name']; 
$home = $res['home']['name']; 
$away = $res['away']['name']; 
$time = date("d/m h:i", 
$res['time']);

$sql = "INSERT INTO schedule(league, home, away, time) VALUES('$league', '$home', '$away', '$time')";
$result=mysqli_query($conn,$sql); 
if(!$result) 
{ 
die("ERROR :". mysqli_error()); 
} else 
{
echo "Records has been successfully inserted";
 } //close the connection mysqli_close($conn);
}
0

Поместите запрос вставки в цикл foreach. Потому что ваша переменная заменяется новым результатом foreach. Предвидите переназначение своих прав.

foreach ($obj['results'] as $res) {
    $league = $res['league']['name'];
    $home = $res['home']['name'];
    $away = $res['away']['name'];
    $time = date("d/m h:i", $res['time']);

    $sql = "INSERT INTO schedule(league, home, away, time)
    VALUES('$league', '$home', '$away', '$time')";
    $result = mysqli_query($conn, $sql);
    if (!$result) {
        die("ERROR :" . mysqli_error());
    } else {
        echo "Records has been successfully inserted";
    }
}
  • 0
    Цените ответ, но это не останавливает цикл. Он обновляется вдвое по мере обновления страницы.
  • 0
    Перенаправлен на родительский URL или переназначить переменную json как пустую
0

Ваш запрос на ввод должен находиться в foreach, как показано ниже:

foreach ($obj['results'] as $res){
    $league = $res['league']['name'];
    $home = $res['home']['name'];
    $away = $res['away']['name'];
    $time = date("d/m h:i", $res['time']);

    $sql = "INSERT INTO schedule(league, home, away, time)
    VALUES('$league', '$home', '$away', '$time')";
    $result=mysqli_query($conn,$sql);
    if(!$result){
        die("ERROR :". mysqli_error());
    }else{
        echo "Records has been successfully inserted";
    }
}

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

Ниже приведена ссылка для получения дополнительной информации:

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

  • 0
    Спасибо за предложение. Цикл повторяется по мере обновления страницы. Можете ли вы указать решение?
  • 0
    Вы пробовали с помощью echo "<pre>"; print_r ($ OBJ [ 'Результаты']); умереть; перед foreach
Показать ещё 2 комментария

Ещё вопросы

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