2013-07-20 78 views
0

我的網站與phpbb論壇集成在一起,我試圖使用一個php文件和一個模板來使用數據庫中的不同行提取獨特頁面。我的示例文件看起來像這樣:'where子句'中的未知列'x'[1054]

php文件:

<?php 
include "includes/phpbb.php"; 

$template->set_filenames(array(
'body' => 'people.html', 
)); 

$name = $_GET['name']; 
$result = $db->sql_query("SELECT * FROM people WHERE name = $name"); 
while($row = $db->sql_fetchrow($result)) 
{ 
$template->assign_vars(array(
'NAME'   => $row['name'], 
'AGE'   => $row['age'], 
    )); 
} 

$site->page_footer(); 

?> 

這裏是HTML模板:

<!-- INCLUDE overall_header.html --> 

{NAME} is {AGE} years old. 

<!-- INCLUDE overall_footer.html --> 

我在表中的兩行。其中一個被命名爲「Walt」,年齡爲「51」,另一個被命名爲「Jesse」,年齡爲「25」。 ?每當我進入像people.php名=沃爾特一個網址,我得到一個錯誤頁面:

SQL ERROR [ mysqli ] 

Unknown column 'Walt' in 'where clause' [1054] 

SQL

SELECT * FROM people WHERE name = Walt 

如果我輸入任何類型的數值,它拉的頁面很好,但沒有填充變量,所以頁面顯示「已過年」。如果我輸入?name = name,它將彈出數據庫表中的第二行,並說「Jesse已經25歲」(這真的讓我感到困惑)。

我在做什麼錯誤導致此?我顯然希望能夠在網址中輸入「沃爾特」或「傑西」,並獲得整個頁面只有他們的信息。

回答

1

只需將您的變量放在一個字符串中即可。所以:

$result = $db->sql_query("SELECT * FROM people WHERE name = '$name'"); 

應該做的伎倆。

非常非常非常小心。我認爲$db對象來自phpbb,他們會在執行任何數據庫查詢之前對其進行清理。但是盲目地接受用戶輸入並在沒有衛生設施的情況下查詢數據庫會導致SQL注入和痛苦世界。見What's the best method for sanitizing user input with PHP?

0

名稱應該是在引號:

$result = $db->sql_query("SELECT * FROM people WHERE name = '$name'");