0

我的网站与 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 之类的 url 时,我都会收到一个错误页面:

SQL ERROR [ mysqli ]

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

SQL

SELECT * FROM people WHERE name = Walt

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

我做错了什么导致这个?我显然希望能够在 url 中输入“Walt”或“Jesse”,并仅使用他们的一行信息来获取整个页面。

4

2 回答 2

1

只需将变量包含在字符串中。所以:

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

应该做的伎俩。

非常非常非常小心。我认为该$db对象来自 phpbb,他们会在执行任何数据库查询之前对其进行清理。但是盲目地接受用户输入并在没有卫生条件的情况下查询数据库将导致 SQL 注入和痛苦的世界。请参阅使用 PHP 清理用户输入的最佳方法是什么?

于 2013-07-20T20:10:31.860 回答
0

名称应该用引号引起来:

$result = $db->sql_query("SELECT * FROM people WHERE name = '$name'");
于 2013-07-20T20:11:08.327 回答