Php 为什么我会犯这个错误?致命错误:未捕获错误:对中的布尔值调用成员函数execute()

Php 为什么我会犯这个错误?致命错误:未捕获错误:对中的布尔值调用成员函数execute(),php,html,mysqli,Php,Html,Mysqli,这是我的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 * F

这是我的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;
}
?>


我尝试过不使用prepare,但它仍然会导致布尔值出现类似错误。

您的代码中有三个错误:

selecttopx
是语法,但根据代码中的API判断,您使用的是MySQL,因此需要使用
limitx

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
此外,您通过
execute()
向查询提交参数,但其中没有占位符。因此,您需要使用
bind_param()
(例如,
WHERE
子句)添加它们,或者从
execute()
中删除参数:

最后,您选择了几个字段和通配符
*
。您可以选择:

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
选择
标题
注释
,或选择此

$stmt = $db->prepare('SELECT * FROM $group LIMIT 10');
选择
$group
表中的所有字段


旁注:您直接将客户端数据嵌入到查询中,
filter\u input()
没有帮助。你需要绝对地、积极地、100%地确定你在查询中输入的内容。一个更安全的选择是列出可能的
,并且只允许用户选择其中一个:

$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");
}

您的代码中有三个错误:

selecttopx
是语法,但根据代码中的API判断,您使用的是MySQL,因此需要使用
limitx

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
此外,您通过
execute()
向查询提交参数,但其中没有占位符。因此,您需要使用
bind_param()
(例如,
WHERE
子句)添加它们,或者从
execute()
中删除参数:

最后,您选择了几个字段和通配符
*
。您可以选择:

$stmt = $db->prepare('SELECT titles, comments FROM $group LIMIT 10');
选择
标题
注释
,或选择此

$stmt = $db->prepare('SELECT * FROM $group LIMIT 10');
选择
$group
表中的所有字段


旁注:您直接将客户端数据嵌入到查询中,
filter\u input()
没有帮助。你需要绝对地、积极地、100%地确定你在查询中输入的内容。一个更安全的选择是列出可能的
,并且只允许用户选择其中一个:

$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");
}

谢谢你的帮助。对于输入,我的html代码中已经有一个select,它只允许人们选择特定的组。但即使在我做了你指出的改变之后,它仍然给了我同样的错误f@Andr抱歉,我忘了删除星号。现在试试。关于组:客户端发送的数据是完全可编辑的,无论选择框中的选项是什么。你需要做一个服务器端检查。我真正想做的就是从服务器上获取表“group”,并回显“titles”和“comments”行。我对这个sry很陌生,你也有很多错误。执行(数组(':id'=>$\u GET['id']))是PDO语法,但从代码中的API判断,他使用的是mysqli@YourCommonSense是的,完全错过了。我修复了它,谢谢!thx的帮助。thx的输入,我的html代码中已经有一个select,只允许人们选择特定的组。但即使在我做了你指出的更改之后,它仍然给了我同样的错误或f@AndréRöygaard抱歉,我忘了删除星号。请立即尝试。关于组:客户端发送的数据是完全可编辑的,无论选择中的选项是什么。您需要进行服务器端检查。我真正想做的就是获取表“组”从服务器返回“titles”和“comments”行。我对这个sry XDY很陌生,你也有很多错误。execute(array(':id'=>$\u GET['id'])是PDO语法,但从他的代码中的API判断,他使用的是mysqli@YourCommonSense是的,完全错过了。我修好了,谢谢!