下面是一个场景,我们正在用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列是一个整数,是客户端表的主键。
上面的查询给出了客户机ID 1的结果,结果是MySQL检查提供的字符串并搜索其中的整数部分,并相应地获取行。
当然,我们可以在PHP / Laravel中避免这种情况,但我的问题是,是否有办法使MySQL严格处理这种情况?
发布于 2018-03-13 16:06:13
纯拉拉维尔解决方案是使用正则表达式约束。
Route::get('/sample/{client}', 'SampleController@SampleMethod')
->name('SampleNaming')
->where(['client' => '[0-9]+']);发布于 2018-03-13 15:52:53
您可能需要更改服务器的sql_mode设置。你需要使用严格的模式。在这里输入链接描述
发布于 2018-03-13 16:24:35
防止类型转换在mysql中是不可配置的。mysql隐式类型转换规则
您可以使用cast函数在sql级别解决这个问题。
select * from t where cast(id as char) = "1abcd"https://stackoverflow.com/questions/49259882
复制相似问题