php - 不确定 .htaccess 文件是否正确。还有一些来自 mySQL 的 fetch 问题

标签 php mysql .htaccess

在实现更干净的 URL 路径后,我在从 mySQL 数据库获取数据时遇到了一些问题。

而不是:www.example.com/index.php?id=headline

我会有这样的路径:www.example.com/article/headline

我的 .htaccess 文件如下所示,并且路径似乎有效:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


RewriteCond %{THE_REQUEST} (\s|%20)
RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI]
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI]

RewriteRule ^article/(.*)/?$ index.php?id=$1 [NC,L]

RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|ico|css|js)$

然后这是您必须点击的链接才能进入文章页面:

<a href="article/'. urldecode($row["overskrift"]) .'">

从这个 $row 中获取数据进展顺利。

问题是当我必须 $_GET id 时,它就像无法正确获取下一步:

if(isset($_GET['id'])) { 
   $id = $_GET['id'];
   $DB = "SELECT * FROM post WHERE overskrift = " . $id;
   $fetch=$conn->query($DB);
   $blogpost = $fetch->fetch_assoc();

最后一行出现错误,我已经花了大约3个小时来解决这个问题,但我真的找不到哪里出了问题! 我可以点击首页文章上的链接,但是当我尝试输入文章时出现此错误:

Fatal error: Call to a member function fetch_assoc() on a non-object in /var/www/web/xxxxxxx/xxxxx.com/index.php on line 198

希望有人能帮忙。

最佳答案

将前导/添加到重写规则匹配中:

RewriteRule ^/article/(.*)/?$ index.php?id=$1 [NC,L]

请注意,这会将 www.example.com/article/headline/something/else/ 重写为 www.example.com/index.php?id=headline/something/else ,如果不需要,请使用更具限制性的字符集(例如 [A-z0-9_\-\.])而不是 .*

对于SQL,绝对建议使用PDO或类似于参数化来自请求变量的任何内容。也值得做一些filter/sanitize在使用变量之前先对其进行分析。

值得在运行 SQL 之前输出它,这样您就可以看到它正如您所期望的那样。还可以尝试复制该输出并直接在 mysql 命令行中或通过 PHPMyAdmin(或其他类似工具)运行它,看看是否获得了预期的数据。

if(isset($_GET['id'])) { 
   $id = $_GET['id'];
   $DB = "SELECT * FROM post WHERE overskrift = " . $id;
   echo '<pre>' . $DB . </pre>;
   $fetch=$conn->query($DB);
   $blogpost = $fetch->fetch_assoc();

编辑

看到您上面的回复。 SQL 的问题是您传递了一个字符串,但没有将其封装在 SQL 中(请注意,PDO 参数化会自动为您处理此问题)。您的 SQL 行应为:

$DB = "SELECT * FROM post WHERE overskrift = '" . $id . "'";

但是说真的……不要这样做。参数化它!

关于php - 不确定 .htaccess 文件是否正确。还有一些来自 mySQL 的 fetch 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36781491/

相关文章:

php - 在 WooCommerce 产品搜索小部件中设置最小字符数

MySQL 将传统小数转换为毫秒

apache - Html 页面的 URL 重写

apache - 将 http 重定向到 https

php - .htaccess 重定向错误和循环

php - 在 MAMP 中更改 openssl 版本

php - 保存表单数据

php - 将 DATE 2012-09-16 转换为 php 日期 ("l F jS") (PHP/mySQL)

mysql - 重建 Sphinx 索引失败

php - 来自 DB、php 和 .htaccess 的 URL 友好