我有一个包含以下网址的网页:website.com/foo/bar
其中foo是页面的php文件,bar是用于从数据库中提取数据的相应ID。
我没有使用任何类型的框架技巧。只是一个htaccess删除.php和扩展名,并处理页面foo.php
,其ID不在子文件夹中。
无论如何,bar只是一个数字(就像我说的对应数据库行id)。对于用户历史中的搜索引擎优化和一般可读性,我想采用更流行的website.com/foo/this-is-the-name
格式(这种格式叫做什么?)。
目前我的代码是:
require('neou_cms/framework/framework.php');
$id = filter(basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));
// no id
if (empty($id)) {
header('Location: ../portfolio');
}
$projects = Nemesis::select("*", "projects", "published = '1' AND id = {$id}");
$row_projects = $projects->fetch_assoc();
$totalRows_projects = $projects->num_rows;
// no results, bad id
if ($totalRows_projects <= 0) {
header('Location: ../portfolio');
}
如果图I我将执行以下操作(1),使链接到foo的页面转到页面标题,例如/ this-is-name(2)在foo中我使它$id
从名称中删除破折号,并使用select语句和标题在数据库中搜索该行。
然而,我觉得这很慢......有没有更好的方法可以让我不需要改变电流?
答案 0 :(得分:2)
你的方法很好。您网址的this-is-the-name
部分(website.com/foo/this-is-the-name
)通常称为&#34; slug&#34;。如果您要查询slug上的数据库表,只需确保slug列有索引,查询应该运行得相当好。
我还想指出您发布的代码中存在SQL注入漏洞。考虑将$id
绑定为参数化查询中的参数,而不是将其动态地包含在where子句中。