【发布时间】:2018-11-12 15:02:01
【问题描述】:
public function getStudent($id){
$sth = $this->con->prepare("SELECT * FROM students WHERE id=:id");
$sth->bindParam("id", $id, PDO::PARAM_INT);
$sth->execute();
$student = $sth->fetchObject();
return $student;
}
(1)http://localhost/slim-framework/public/api/v1/student/1
(2)http://localhost/slim-framework/public/api/v1/student/1fgff
通过使用上面代码的“GET”请求,上面的 URL 1 和 2 给了我相同的结果,但假设不是。
请帮助我如何使 URL 2 标记错误,因为它不是整数?
【问题讨论】:
-
这显然与 PDO 无关,而是验证输入数据。
-
因为
(int) '1' === 1和(int) '1fgff' === 1。处理这个问题的最佳方法是检查$id是否为数字,在这种情况下引发错误。 -
当您执行
PDO::PARAM_INT时,这会将变量转换为整数。删除它,您的代码应该会按预期失败。 -
实际上,我开始做一些研究,结果证明我错了。
PDO::PARAM_INT会将其转换为浮点数,而不是整数。看我的回答here。