不确定 .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 . "'";
但是说真的……不要这样做。参数化它!
在我实施了更干净的 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 . "'";
但是说真的……不要这样做。参数化它!