不确定 .htaccess 文件是否正确。还有一些从 mySQL 获取问题

Not sure if .htaccess file is correct. Also some fetch problems from mySQL

在我实施了更干净的 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)+.*)$ - [N,DPI]
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /- [L,R=301,DPI]

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

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

然后这是link你必须点击,才能进入文章页面:

<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个小时,但我真的找不到哪里有问题! 我可以点击首页文章中的 link,但是当我尝试输入文章时出现此错误:

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= [NC,L]

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

至于SQL,绝对建议在使用变量之前先使用PDO or similar to parameterize anything coming from request variables. Also worth doing some 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 . "'";

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