2017-10-12 97 views
0

布爾的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; 
} 
?> 

我一直都沒有使用準備嘗試,它仍然讓我類似的錯誤有關布爾。

回答

2

你在你的代碼三大誤區:

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 –

相關問題