场景如下,我们正在 Laravel 中构建一个 Web 应用程序,并分配了一个路由,如下所示:
Route::get('/sample/{client}', 'SampleController@SampleMethod')->name('SampleNaming');
SampleMethod 方法,从客户端变量中读取并在页面中显示有关客户端的数据。
如果我们转到 http://localhost/appurl/sample/1例如,它显示有关客户端 ID 1 的数据。诀窍在于,如果我们转到 http://localhost/appurl/sample/1abc , 它仍然会显示客户端 id 1 的数据。
尝试在 MySQL 中查询,
select * from clients where ID = '1abc'
ID列是一个整数,是clients表的主键。
上面的查询给了我客户端 ID 1 的结果,原来是 MySQL 检查提供的字符串并搜索其中的整数部分并相应地获取行。
当然,我们可以在 PHP/Laravel 中避免这种情况,但我的问题是,有没有办法让 MySQL 在这种情况下变得严格?
最佳答案
纯 Laravel 解决方案是使用 Regular Expression Constraints .
Route::get('/sample/{client}', 'SampleController@SampleMethod')
->name('SampleNaming')
->where(['client' => '[0-9]+']);
关于php - 如何使 MySQL 对类型严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259882/