因此,对于学校作业,我必须建立一个网站。该网站必须包含从数据库中获取文章的功能。
例如,我可以使用 domain.com/content/article/1 / 显示第1条。
但是,当我使用这样的网址 domain.com/content/article/2aadd / 时,它仍会显示第2条。 甚至 ../ 10aadd / 也显示了第10条。 如果我尝试请求与 ../ 11aadd 不存在的文章(第11条不存在),则会显示无法找到的错误这篇文章就像它应该的那样。
我使用网址重写,因此像 domain.com/content/article/1 / 这样的网址会被重写为 domain.com/index.php?c=content&a=article& ;精氨酸= 1
我使用数据库类,每个选择查询都发送到select-query方法。它接受以下参数:
发送以下参数以显示文章:
在此方法的每次调用中,正在准备并使用 $ params 数组作为参数执行新语句。
我已经抛弃了 $ params 数组,它确实显示了整个字符串(例如10aadd)。
我没有干净的网址就试过了。
我试图查一查,但我找不到任何东西。
这可能是什么原因?
答案 0 :(得分:1)
我怀疑您的MySQL表的id
列被定义为整数数据类型。
当它将字符串数据类型强制转换为整数时,您正在体验MySQL的特性。
select CAST('10aaadd' AS INT)
奇怪地回报了值10
。
您的查询在变量替换后显示为WHERE id = '10aaadd'
。
因为MySQL隐式地将该字符串强制转换为int,所以它会找到id
值为10
的行。
很奇怪,是吗?
如果你只想在$ _GET或$ _POST参数中使用整数,那么检查它是个好主意,如果你收到的值不符合预期则抛出错误。 PHP's is_numeric()
function可以为您做到这一点。