'where子句'中的未知列'x'[1054]

时间:2013-07-20 20:07:46

标签: php sql get

我的网站与phpbb论坛集成,我正在尝试使用一个php文件和一个模板来使用数据库中的不同行来提取一个唯一的页面。我的示例文件如下所示:

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?name = Walt这样的网址时,我都会收到一个错误页面:

SQL ERROR [ mysqli ]

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

SQL

SELECT * FROM people WHERE name = Walt

如果我输入任意类型的数值,它会将页面拉得很好,但没有填充变量,因此页面显示“已经很久了”。如果我输入?name = name,它会拉出数据库表中的第二行,并说“Jesse已经25岁了”(那个真的让我困惑)。

我做错了什么?我显然希望能够在网址中输入“Walt”或“Jesse”,并在整个页面中显示一行信息。

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

名称应在引号中:

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