对于PHP来说,我有点像菜鸟,所以如果这是非常基本的话,请道歉。这个问题可能以前曾被问过,但是我无法找到另一篇与我相似的案例。 我网站上的URL示例是example.com/read.php?id=1。 read.php文件包含以下代码:
<?php
$id = $_GET['id'];
$sql = mysqli_query($con, "SELECT * FROM pages WHERE id='$id'");
?>
我知道我需要为此做一些卫生设施,但在这种情况下,最好的办法是什么?性能也很重要,所以我不想添加不必要的代码。
答案 0 :(得分:1)
最简单的解决方案是将变量强制为整数。任何非数字都将被剥离,并且该值可以安全地用作数值。
$id = (int) $_GET['id'];
$sql = mysqli_query($con, "SELECT * FROM pages WHERE id=$id");
我同意其他评论者认为使用参数准备好的查询会更好(更快,更安全)。然后它看起来像这样:
$id = (int) $_GET['id'];
$stmt = mysqli_prepare($con, "SELECT * FROM pages WHERE id=?");
mysqli_stmt_bind_param($stmt, "i", $id);
答案 1 :(得分:0)
您可以使用filter_var()
功能。可用的过滤器种类很多。
访问此链接:http://www.php.net/manual/en/filter.filters.php
你可以获得$ id并验证如下:
filter_var($id,FILTER_VALIDATE_INT);
上述函数将返回已过滤的数据,如果过滤器失败,则返回FALSE。 验证后,您可以使用预准备语句和PDO来完成工作。
准备好的陈述: