我正在开发一个webservice(cakephp 2.4.7),我在用户模型上使用findById方法。
我拥有的是:
$user = $this->User->findById($userid);
if (!$user) {
throw new NotFoundException(__('Invalid User'));
}
问题是,如果$userid == 2
我得到ID为2的用户那么好。但是如果(例如)$userid == 2as
我也会获得身份2
的用户。
我认为问题是,$userid
是一个字符串,2as
变为2
。
我该如何解决这个问题?
答案 0 :(得分:1)
你很可能正在使用MySQL,而你所描述的只是它的工作方式:
mysql> select * from posts where id = 1;
+----+-----------+------------------------+---------------------+----------+
| id | title | body | created | modified |
+----+-----------+------------------------+---------------------+----------+
| 1 | The title | This is the post body. | 2013-08-01 07:34:57 | NULL |
+----+-----------+------------------------+---------------------+----------+
1 row in set (0.00 sec)
mysql> select * from posts where id = "1and this text";
+----+-----------+------------------------+---------------------+----------+
| id | title | body | created | modified |
+----+-----------+------------------------+---------------------+----------+
| 1 | The title | This is the post body. | 2013-08-01 07:34:57 | NULL |
+----+-----------+------------------------+---------------------+----------+
1 row in set, 1 warning (0.00 sec)
使用这样的输入,数据库将在执行查询之前将值转换为整数。
如果您想阻止您的应用程序将这两个用户输入视为相同 - 您需要验证用户输入并确保它在使用前是数字。