我是使用php的新手,我目前正在开发一个具有交互式动物词汇表的网站。
我一直在编辑由其他开发人员编写的php页面,当我运行bind_param()函数时遇到错误。
这是页面的内容,已经删除了很多优惠,所以我只暴露了我的错误。
if (isset($_GET['id'])) {
$results = array();
$stmt = $db_conn->prepare("SELECT specific.id, specific.name, specific.description, specific.group_id, m.id specific_media_id, m.type specific_media_type, m.url specific_media_url FROM ANIMAL_SPECIFIC specific LEFT JOIN MEDIA m on m.id = specific.media_id WHERE GROUP_ID = ?");
$stmt->bind_param('i', $_GET['id']);
$stmt->execute();
$stmt->bind_result($specific_id, $name, $description, $group_id, $specific_media_id, $specific_media_type, $specific_media_url);
while ($stmt->fetch()) {
$specific = array(
"id" => $specific_id,
"name" => $name,
"description" => $description,
"group_id" => $group_id
);
if (!empty($specific_media_id)) {
$media = array(
"id" => $specific_media_id,
"type" => $specific_media_type,
"url" => $specific_media_url
);
$specific["media"] = $media;
}
$results["results"]["animal_specific"][] = $specific;
}
$stmt->close();
echo json_encode($results);
}
}
我得到的错误是:致命错误:在第13行的/web/animaldetailsJSON.php中的非对象上调用成员函数bind_param()调用堆栈:0.0058 647448 1. {main}()/ web / animaldetailsJSON.php:0
我确信我会忽略一些小错误。我只需要一个具有特定group_id的所有SPECIFIC_ANIMALS的JSON
答案 0 :(得分:0)
specific
似乎是MySQL中的一个保留字,所以你要么必须使用另一个表别名,要么用反引号将其引用,如
SELECT `specific`.id, `specific`.name, `specific`.description, `specific`.group_id, m.id specific_media_id, m.type specific_media_type, m.url specific_media_url FROM ANIMAL_specific `specific` LEFT JOIN MEDIA m on m.id = `specific`.media_id WHERE GROUP_ID = ?
因此,您的查询失败,$stmt
变为null
,从而触发发布的错误。