这不起作用,
<?php
if(!isset($_GET['id'])){
header('location: index.php');
}
$id = $_GET['id'];
if(!is_int($id)){
header('location: index.php');
}
?>
,但它总是重定向我
答案 0 :(得分:1)
另一点是将PDO与Prepared Statements一起使用。使用PDO和Prepared Statements可以获得一定程度的数据库抽象,从而降低了使用mysql_real_escape_string或类似功能的必要性。
另一种解决方案是ORM,这可能是一个很大的矫枉过正,他们很可能会使用PDO,但如果要求与之匹配,为什么不呢......
答案 1 :(得分:0)
检查$ id是否为整数
if (!is_int($_GET['id']){
echo 'bad id';
}
答案 2 :(得分:0)
一个无意义的问题和一堆无意义的答案。
您的问题与注射无关。这是参数验证 如果您认为该参数无效,则不应返回重定向,而应返回404状态。
外部变量始终是字符串类型。所以,你必须做一些regexp或is_numeric。
它仍然与注射无关。您的数据库代码应该能够处理任何类型的数据。有非常简单的机制来处理它。您可以参考this answer了解详情
答案 3 :(得分:0)
你可以使用两个东西使用spring来设置查询 喜欢这个
$professionalQry = sprintf("SELECT * FROM `professional` WHERE `user_id`=%d",$userId);
OR
使用mysql_real_escape_string
喜欢这个
$professionalQry = sprintf("SELECT * FROM `professional` WHERE `user_id`='%s'",
mysql_real_escape_string($userId));