无法使用PHP从JSON文件向MYSQL数据库添加数据

无法使用PHP从JSON文件向MYSQL数据库添加数据,php,mysql,json,mysqli,Php,Mysql,Json,Mysqli,我是PHP新手。我已经为这个任务奋斗了好几个小时了。前面我使用json_encode将数据从MYSQL获取到json文件。现在,我尝试将JSON文件中的相同数据恢复并添加到新的MYSQL数据库中。在将数组传递到MYSQL数据库tho之前,我无法将其转换为字符串。数据库正常工作,我可以通过插入手动值而不是数组中的$value来添加“players”。我的代码如下所示: <?php //open connection to mysql db $con = mysqli_connect("loc

我是PHP新手。我已经为这个任务奋斗了好几个小时了。前面我使用json_encode将数据从MYSQL获取到json文件。现在,我尝试将JSON文件中的相同数据恢复并添加到新的MYSQL数据库中。在将数组传递到MYSQL数据库tho之前,我无法将其转换为字符串。数据库正常工作,我可以通过插入手动值而不是数组中的$value来添加“players”。我的代码如下所示:

<?php
//open connection to mysql db
$con = mysqli_connect("localhost","root","","scoreboard2") or die("Error " . mysqli_error($con));

$scorefile = file_get_contents('scores.json');
$Score = json_decode($scorefile, true);

echo '<pre>' . print_r($Score, true) . '</pre>';

foreach ($Score as $field => $value) {
    // Use $field and $value here

    print_r($field . '=>' . $value . '<br/>', true);

    //mysqli_query($con, "INSERT INTO scores (name, score, time) VALUES ($value->name, $value->score, $value->time)");
}

//mysqli_close($con);
?>
mysqli_query($con, "INSERT INTO scores 
                           (name, score, time) 
                    VALUES ($value->name, $value->score, $value->time)");
等等。。“错误”是这样的:

注意:第13行F:\XAMPP\htdocs\JSON\u MySQL\decode.php中的数组到字符串转换


您的问题是,您正在使用
json\u decode()
的参数2将.json文件中的数据转换为数组,作为
true

这是将对象转换为数组,因此此行中使用的语法是错误的

$Score = json_decode($scorefile, true);
因为您使用的是对象表示法

所以把这行从

$Score = json_decode($scorefile);

所以

另请注意,我用单引号引用了值,并将对象属性包装在
{}
中,这是在双引号文本中使用对象或数组表示法时所必需的

注意:中的数组到字符串转换 第13行的F:\XAMPP\htdocs\JSON\u MySQL\decode.php

是由生产线生产的

print_r($field.'=>'.$value.'
',true)

(实际上是第13行)

尝试将数组(第二个分数对象)的
$value
转换为字符串,以便将其与字符串的其余部分连接起来

请注意,如果将错误生产线替换为

0=>Array
(
    [id] => 22
    [name] => Jack
    [score] => 2142
    [time] => 196:13
    [ts] => 2016-02-23 15:36:23
    [date] => 2016-02-23
)

1=>Array
(
    [id] => 23
    [name] => Bob
    [score] => 7026
    [time] => 35:54
    [ts] => 2016-02-23 15:40:33
)

您最初可能期望的

为什么这里有两行注释掉的代码?检查查询中的错误-字符串需要在值中引用。查询被注释掉只是因为它不起作用,并导致页面出现更多错误。不知道为什么连接会关闭,但这并不重要;字符串值需要被引用。如果您根本不想处理字符串,那么可以使用语句来检查查询中的错误。首先,错误发现的行不是请求中的行,而且它被注释了,因此如果您的答案实际上是正确的,那么问题的回答就非常糟糕(因为给出的代码不是产生错误的代码)你比我快了一毫秒,我的老船友@Fred ii好吧,这很有魅力谢谢!只需在mysqli_查询中将“$value”改为“$object:)我们能停止吗请我继续,提问者继续,投票人继续,让我们都做同样的事情。问题是我不确定,因为我无法测试,因为我永远不会声明某些东西是“100%正确的”,除非我能证明它是真的,我只是试图创建一个讨论来获得真相,现在我测试了这段代码,我可以确认问题中发表的评论版本产生了确切的错误,我可以确认,而不是仅仅试图争辩,你可以说他的代码解决了这个问题,那么为什么要麻烦呢?嗯,我很麻烦,因为OP可能会再次错误地使用print\r,如果你只是删除他使用它的部分,然后说,看,我的代码工作正常
?php
$con = mysqli_connect("localhost","root","","scoreboard2") or die("Error " . mysqli_error($con));

$scorefile = file_get_contents('scores.json');
$Score = json_decode($scorefile);

foreach ($Score as $object) {

    mysqli_query($con, "INSERT INTO scores 
                               (name, score, time) 
                        VALUES ('{$object->name}', '{$object->score}', '{$object->time}')");
}

mysqli_close($con);
?>
echo '<pre>' .$field . '=>' . print_r($value, true) . '</pre>'.'<br/>';
0=>Array
(
    [id] => 22
    [name] => Jack
    [score] => 2142
    [time] => 196:13
    [ts] => 2016-02-23 15:36:23
    [date] => 2016-02-23
)

1=>Array
(
    [id] => 23
    [name] => Bob
    [score] => 7026
    [time] => 35:54
    [ts] => 2016-02-23 15:40:33
)