为什么我得到这个错误?致命错误:未捕获的错误:调用一个成员函数
问题描述:
布尔的execute()这是我的PHP代码:为什么我得到这个错误?致命错误:未捕获的错误:调用一个成员函数
<?php
$group = filter_input(INPUT_POST, 'groupchooser', FILTER_UNSAFE_RAW,
FILTER_FLAG_STRIP_LOW);
$db = mysqli_connect("localhost", "test", "password", "id3234074_posts");
$stmt = $db->prepare('SELECT TOP 10 titles, comments * FROM $group ');
$stmt->execute(array(':id' => $_GET['id']));
$row = $stmt->fetch();
if($row['id'] == ''){
header('Location: ./');
exit;
}
?>
我一直都没有使用准备尝试,它仍然让我类似的错误有关布尔。
答
你在你的代码三大误区:
SELECT TOP X
是SQL Server语法,但在你的代码的API来判断,你使用MySQL,所以你需要使用LIMIT X
。
$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
此外,您是通过招投标参数的查询,但没有占位符它。所以,你需要或者从添加他们bind_param()
(例如,WHERE
条款),或删除参数:
$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10 WHERE id = ?');
$stmt->bind_param("i", $_GET["id"]);
$stmt->execute();
或者
$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
$stmt->execute();
最后,你有几个领域的你'重新选择和通配符*
。你可以有这样的:
$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
选择titles
和comments
,或该
$stmt = $db->prepare('SELECT * FROM $group LIMIT 10');
选择在$group
表中的所有领域。
旁注:您直接将客户端数据嵌入到查询中,并且filter_input()
不起作用。你需要绝对肯定,100%确定你输入的内容是查询。一个更安全的选项可能是列出可能的groups
,并且只允许用户选择其中的一个:
$group = filter_input(INPUT_POST, 'groupchooser', FILTER_UNSAFE_RAW,
FILTER_FLAG_STRIP_LOW);
$groups = ["group1", "group2"];
if (!in_array($group, $groups)) {
throw new Exception("Invalid group");
}
thx寻求帮助。而thx的输入,我已经在我的html代码中有一个选择,只允许人们选择特定的组。但即使在我做出修改之后,您仍然指出它仍然给我提供了同样的错误f –
@AndréRöygaard对不起,我忘记删除星号。现在试试。关于群组:客户端发送的数据是完全**可编辑的,与选择中的选项无关。您**需要**进行服务器端检查。 – ishegg
所有我真的想要做的是从服务器获取表“组”,并回显行“标题”和“评论”。我对这款XD –