PDO 不从字符串中提取数据,但可以很好地处理整数

PDO not pulling data from string but works fine with integer

我正在尝试构建一个 pages.php 文件,我也可以传递 slug 信息并使用 mod-rewrite 使数据库输出看起来像实际页面。

问题是代码可以工作,但只能传递整数。如果我通过 page_id 它将进行调用并工作,如果我通过 page_slug 它将失败。

这是我的重写规则

RewriteRule ^service/(.*)$ pages.php?pid= [QSA,L]

这里是 pages.php 中的 select 查询,我正在使用 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

returns 空白页面,没有任何错误或源代码。

SELECT page_id

returns 页面真相 pages.php?pid=zzzzzz 或重写 service/zzzzz.html 我不确定为什么我不能从数据库中提取页面 slug当我过去用用户名和其他随机数据完成它时。但是在提供的 $sql 代码中它并不想工作。

您需要在查询中 $pid 周围加上单引号(或正确转义的双引号)。此外,正如评论中所指出的,您对 SQL 注入持开放态度,需要立即解决。