为什么我得到这个错误?致命错误:未捕获的错误:调用一个成员函数

问题描述:

布尔的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 XSQL 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'); 

选择titlescomments,或该

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

thx寻求帮助。而thx的输入,我已经在我的html代码中有一个选择,只允许人们选择特定的组。但即使在我做出修改之后,您仍然指出它仍然给我提供了同样的错误f –

+0

@AndréRöygaard对不起,我忘记删除星号。现在试试。关于群组:客户端发送的数据是完全**可编辑的,与选择中的选项无关。您**需要**进行服务器端检查。 – ishegg

+0

所有我真的想要做的是从服务器获取表“组”,并回显行“标题”和“评论”。我对这款XD –