Php 删除url末尾的字符

Php 删除url末尾的字符,php,mysql,url-rewriting,Php,Mysql,Url Rewriting,1) 我有这样的url: 里面:我的文章 2) 但是对于这个url 这也是工作,我看到我的文章 3) 对于这个url 我有很好的404页错误 问题是:url怎么会出现404错误? (备选问题:如何将“1234somewords”重定向到“1234”?) post.php中的php mysql查询是: require_once('conn_sql.php'); $post = $_GET['post']; $nQuery = mysqli_query($conn, "SELECT * FROM `

1) 我有这样的url: 里面:我的文章

2) 但是对于这个url 这也是工作,我看到我的文章

3) 对于这个url 我有很好的404页错误

问题是:url怎么会出现404错误? (备选问题:如何将“1234somewords”重定向到“1234”?)

post.php中的php mysql查询是:

require_once('conn_sql.php');
$post = $_GET['post'];
$nQuery = mysqli_query($conn, "SELECT * FROM `post` WHERE post_id = '$post'");
$res = mysqli_fetch_array($nQuery);
似乎查询“post=1234somewords”有效,这不是我想要的。 然而,如果我在phpmyadmin中搜索“post=1234somewords”,这就不起作用了,这就是我想要的


我的代码有什么问题?

之所以会出现这种情况,是因为mysql使用字符串的开头部分作为有效id。。(这与mysql执行的隐式数据转换有关)在执行查询之前,应该检查参数是否为有效数字

您可以尝试从字符串中删除非数值

$result  = preg_replace("/[^0-9]/", "", $_GET['post']; );  

if (is_numeric( $result))  {

  $nQuery = mysqli_query($conn, "SELECT * FROM `post` WHERE post_id = '$post'");
  $res = mysqli_fetch_array($nQuery);

} else {
  ......

}

我想冒昧猜测一下,您的
post_id
字段是
INT
,因此MySQL正在从字符串中键入1234somewords,导致(INT)1234正常工作。另外,您很容易受到SQL注入攻击,您应该更新代码以使用带有绑定参数的准备语句。请检查
$\u GET
数组中的
id
?如果未设置,则返回404?这是因为mysql使用字符串的开头部分作为有效id。。(这与mysql执行的IMPLIT data convdrion有关)在执行查询之前,您应该检查您的参数是否为有效数字