我正在尝试使用API存储体育数据json列,但我无法使其正常工作。虽然我可以插入数据,但它只插入第一列结果并保持它在所有后面的列上重复。默认情况下,它显示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结果,并且它不断重复下一列(结果)..将不胜感激。
答案 0 :(得分:1)
您正面临这个问题,因为您正在foreach
循环之外执行mysql查询。你必须在循环中执行查询。
执行类似
的操作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);
}
答案 1 :(得分:0)
您的插入查询必须如下所示:
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 准备好的查询以使其更安全,则会更好。
请点击以下链接了解更多详情:
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
答案 2 :(得分:0)
将插入查询放在foreach循环中。因为你的变量替换了新的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";
}
}