我是PHP新手,我似乎无法读取我的JSON文件的第二个值。我当前的JSON文件如下:
[
{
"name": "Jennifer",
"PvPwins": 20
},
{
"name": "Johnny",
"PvPwins": 10
}
]
我的代码如下
$json = file_get_contents("JSON_Data.json");
$data = json_decode($json, true);
$query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)";
$st = mysqli_prepare($con, $query);
foreach ($data as $row) {
$name = $row['name'];
$PvPwins = $row['PvPwins'];
mysqli_stmt_bind_param($st, "si", $name, $PvPWins); // edited to move this down
echo $name. " " .$PvPWins. "<br/>";
mysqli_stmt_execute($st);
} printf("Error : %s.'n", mysqli_stmt_error($st));
得到以下输出:
Jennifer
Johnny
James
Error: Column 'PvPwins' cannot be null.
//edit -它打印名称很好,但只是拒绝读取PvPwins,它是小w的wins,我在发布之前检查过了,所以没有雪茄…
请帮忙,谢谢!
您在错误的地方调用mysqli_stmt_bind_param。此时,还没有定义两个变量$name和$pvWins。应更正如下
$json = file_get_contents("JSON_Data.json");
$data = json_decode($json, true);
$query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)";
$st = mysqli_prepare($con, $query);
// moved from here
foreach ($data as $row) {
$name = $row['name'];
$PvPwins = $row['PvPwins'];
mysqli_stmt_bind_param($st, "si", $name, PvPwins);
echo $name. " " .$PvPwins. "<br/>";
mysqli_stmt_execute($st);
}
当JSON数据被解码成PHP....它自动转换成一个本地PHP对象,可以使用PHP对象访问器:
->
访问,除非布尔值true
作为参数传递给json_decode()
函数。首先要注意这一点。想想看:
<?php
$json = file_get_contents("JSON_Data.json");
$data = json_decode($json);
$query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)";
$st = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($st, "si", $name, $PvPWins);
foreach ($data as $row) {
$name = $row->name; //<== USING -> (NOT [...])
$PvPwins = $row->PvPwins; //<== USING -> (NOT [...])
echo $name. " " .$PvPWins. "<br/>";
mysqli_stmt_execute($st);
}
printf("Error : %s.'n", mysqli_stmt_error($st));
注意:这段代码并不假设提供一个解决方案,而是指出这样一个事实,即访问name
或PvPWins
可以更好地使用PHP对象访问器:->
,如果省略json_decode()
的第二个参数。
您可能想试试这个echo $的名字。$PvPwins。"
";
大写W在PVPwins....??)
就这么简单吗?