1

我正在开发一个网络服务(cakephp 2.4.7),我在用户模型上使用 findById 方法。

我所拥有的是:

    $user = $this->User->findById($userid);
    if (!$user) {
        throw new NotFoundException(__('Invalid User'));
    }

问题是,如果$userid == 2我得到 ID 为 2 的用户。到目前为止一切顺利。但是,如果(例如)$userid == 2as我也得到了 id 的用户2

我认为问题是,那$userid是一个字符串,2as变成2.

我该如何解决这个问题?

4

1 回答 1

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)

通过这样的输入,数据库将在执行查询之前将该值转换为整数。

如果您想阻止您的应用程序将这两个用户输入视为相同 - 您需要在使用之前验证用户输入并确保它是数字的。

于 2014-05-07T08:22:10.117 回答