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