我正在尝试构建一个单一的pages.php 文件,我也可以传递slug 信息并使用mod-rewrite 使数据库输出看起来像实际页面。
问题是代码可以工作,但只能传递整数。如果我传递 page_id,它将进行调用并工作,如果我传递 page_slug,它将失败。
这是我的重写规则
RewriteRule ^service/(.*)$ pages.php?pid=$1 [QSA,L]
这是pages.php 中的选择查询,我正在使用 require_once("Database.php");调用数据库文件。
$sql = "
SELECT
page_title,
page_html_title,
page_slug,
page_content
FROM pages
WHERE page_slug = $pid
";
$q = $db->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
$r = $q->fetch();
数据按照以下方式放入html中{$r['page_title']}
Paste for pages.php http://pastebin.com/qA7zzvnY
Paste for Database.php http://pastebin.com/8pqXbzby
这是数据库表
已知问题。
SELECT page_slug
返回空页面,任何地方都没有错误或源代码。
SELECT page_id
返回页面真实值pages.php?pid=zzzzzz 或重写service/zzzzz.html 我不知道为什么我不能从数据库中提取页面slug,因为我过去使用用户名和其他随机数据完成了该操作。但在提供的 $sql 代码中它不想工作。
最佳答案
您需要在查询中将 $pid
引起单引号(或正确转义的双引号)。另外,正如评论中所指出的,您对 SQL 注入(inject)持开放态度,需要立即解决这个问题。
关于php - PDO 不会从字符串中提取数据,但可以很好地处理整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838496/