1

我有一个带有超链接的页面,如下所示:

预览

单击 A0000000 时,它会将您重定向到 localhost/student.php?anum=A00000000

我已经检查了实际数字是否正在使用

$get = $_GET['anum'];
echo $get;

这就是我得到的:预览

我之前已经多次这样做了,但改变的一件事是现在我使用内部连接和 WHERE 子句进行特定搜索。这个搜索必须做的是:

  1. 列出辅导员姓名为 NOT NULL 的学生
  2. 完成的地方= 1
  3. 并且使用 $_GET['anum'] 的 anum 或学生 ID 号 = 到 url anum

这是选择语句:

$anum = filter_input(INPUT_GET, 'anum', FILTER_SANITIZE_STRING);
$anum = filter_var($anum, FILTER_SANITIZE_NUMBER_INT);

    try 
    {
    $query = $dbh->prepare("SELECT * FROM inoffice INNER JOIN comments ON 
                            inoffice.id = comments.id WHERE counselorname 
                            IS NOT NULL AND finished = '1' AND anum = :anum ");
    $query->bindParam(':anum', $anum);
    $query->execute();
    $result = $query->fetchall();
    }
        catch (PDOException $e) {
        error_log($e->getMessage());
        die($e->getMessage());
        }

我只是通过输入 anum = A0000000 来尝试相同的查询,它可以完美地工作。

但是当我尝试执行上述代码时,我得到一个空的回显表。

任何帮助都是极好的!-ty

编辑 1:感谢您神秘地删除了过滤器代码的消毒部分,以及没有的东西,一切都很好。那是从实际数字部分中删除 A 。所以查询没有通过。

4

2 回答 2

10
$anum = filter_var($anum, FILTER_SANITIZE_NUMBER_INT);

正在剥离字母'A'

根据文档

FILTER_SANITIZE_NUMBER_INT - 删除除数字、加号和减号之外的所有字符。

于 2013-01-03T16:34:28.733 回答
-3

$anum = filter_var($anum, FILTER_SANITIZE_NUMBER_INT);

您似乎正在过滤一个整数,这意味着 A0000000 将变为 0,在变量上使用 mysql_real_escape_string 以防止 sql 注入也是一个好主意

于 2013-01-03T16:34:25.247 回答