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

标签 php mysql .htaccess mod-rewrite pdo

我正在尝试构建一个单一的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

这是数据库表 enter image description here

已知问题。

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/

相关文章:

java - NetBeans 无法安装某些模块

php - 如果在路由组中定义了路由,Laravel Route-Model 绑定(bind)不起作用

mysql - 如何抑制连续的重复记录?

mysql - SQL 通过表显示查询

apache - 使用 .htaccess 和 .htpasswd 密码保护网站 - 错误 - "Could not open password file:"

php - 如何显示弹出窗口,其中包含从 ID 获取数据的表中选择的数据?

php - 没有指定输入文件 plesk server4you

php - 使用 php 循环减少数据库的多个列和行中的值

apache - 使用 .htaccess 限制除我以外的所有 IP 对登录页面的访问

php - 带有扩展名 .html 的网页有易受攻击的 PHP 代码?