我正在尝试将数据从JSON API输入到MySQL数据库中,但是我有一个错误。
这是错误。
警告:不能在第8行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第9行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第10行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第11行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第12行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第13行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第14行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
警告:不能在第15行的C:\ xampp \ htdocs \ simplehtmldom \ example \ scraping \ example_scraping_imdb.php中使用标量值作为数组
这些行是PHP代码中的绑定参数语句。
这是我使用的代码(JSON对象是嵌套的):
<?php
$db = new PDO('mysql:host=localhost;dbname=wtd','root','');
$jsondata = file_get_contents('https://hugo.events/genre/pop/next/200/100');
$data = json_decode($jsondata, true);
$stmt = $db->prepare("insert into events values(?,?,?,?,?,?,?,?)");
foreach ($data as $row) {
$stmt->bindParam(1, $row['hits']['hits']['_id']);
$stmt->bindParam(2, $row['hits']['hits']['fields']['name']);
$stmt->bindParam(3, $row['hits']['hits']['fields']['start']);
$stmt->bindParam(4, $row['hits']['hits']['fields']['venue.location']);
$stmt->bindParam(5, $row['hits']['hits']['fields']['description']);
$stmt->bindParam(6, $row['hits']['hits']['fields']['header']);
$stmt->bindParam(7, $row['hits']['hits']['fields']['logo']);
$stmt->bindParam(8, $row['hits']['hits']['fields']['genres']);
$stmt->execute();
}
编辑:JSON数据样本:
https://ghostbin.com/paste/437q7
希望有人解散。提前谢谢。
答案 0 :(得分:2)
将PHP变量绑定到相应的命名或问号 占位符在用于准备的SQL语句中 声明。与PDOStatement :: bindValue()不同,变量绑定为 参考,只会在当时进行评估 调用PDOStatement :: execute()。
您需要创建自变量列表以将它们绑定到语句中:
foreach ($data as $row) {
$v1 = $row['hits']['hits']['_id'];
$v2 = $row['hits']['hits']['fields']['name'];
$v3 = $row['hits']['hits']['fields']['start'];
...
$stmt->bindParam(1, $v1);
$stmt->bindParam(2, $v2);
$stmt->bindParam(3, $v3);
...
$stmt->execute();
}
或者您可以尝试使用bindValue代替:
foreach ($data as $row) {
$stmt->bindValue(1, $row['hits']['hits']['_id']);
$stmt->bindValue(2, $row['hits']['hits']['fields']['name']);
$stmt->bindValue(3, $row['hits']['hits']['fields']['start']);
...
$stmt->execute();
}
更新在审核了json后,我提供的内容并不多。
我不知道您的期望是什么,但您可能无法对该数据进行foreach ($data as $row) {
。
您可以使用数据here
为了获得_id
你应该致电:
$data[1]['hits']['hits'][1]['_id'];
要获得fields
,您需要:
$data[1]['hits']['hits'][0]['fields'];
可能您使用的数据与此处发布的数据不同。
更新2 SO不是为您开发的。请下次再尝试做作业。但是我猜你正在寻找here:
foreach ($data[1]['hits']['hits'] as $row) {
$v1 = $row['_id'];
$v2 = $row['fields']['name'][0];
$v3 = $row['fields']['start'][0];
....
}