首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使MySQL对类型严格

问如何使MySQL对类型严格
EN

Stack Overflow用户
提问于 2018-03-13 15:23:21
回答 3查看 362关注 0票数 1

下面是一个场景,我们正在用Laravel构建一个web应用程序,并按如下方式分配了一个路由:

代码语言:javascript
复制
Route::get('/sample/{client}', 'SampleController@SampleMethod')->name('SampleNaming');

方法SampleMethod,从客户端变量中读取数据,并在页面中显示有关客户端的数据。

例如,如果我们转到http://localhost/appurl/sample/1,它将显示有关客户端id 1的数据。诀窍是,如果我们转到http://localhost/appurl/sample/1abc,它仍然会显示客户端id 1的数据。

在MySQL中尝试查询,

代码语言:javascript
复制
select * from clients where ID = '1abc'

ID列是一个整数,是客户端表的主键。

上面的查询给出了客户机ID 1的结果,结果是MySQL检查提供的字符串并搜索其中的整数部分,并相应地获取行。

当然,我们可以在PHP / Laravel中避免这种情况,但我的问题是,是否有办法使MySQL严格处理这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-13 16:06:13

纯拉拉维尔解决方案是使用正则表达式约束。

代码语言:javascript
复制
Route::get('/sample/{client}', 'SampleController@SampleMethod')
    ->name('SampleNaming')
    ->where(['client' => '[0-9]+']);
票数 1
EN

Stack Overflow用户

发布于 2018-03-13 15:52:53

您可能需要更改服务器的sql_mode设置。你需要使用严格的模式。在这里输入链接描述

票数 0
EN

Stack Overflow用户

发布于 2018-03-13 16:24:35

防止类型转换在mysql中是不可配置的。mysql隐式类型转换规则

您可以使用cast函数在sql级别解决这个问题。

代码语言:javascript
复制
select * from t where cast(id as char) = "1abcd"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49259882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档