int 被当作模糊查询

##int参数被模糊查询
今天遇到个奇怪的事情,我一条sql在laravel里执行结果和工具里不一致。

 $where = [
    'prds.ptnCode'=>$data['ptnCode'],
    'prds.shopCode'=>$data['shopCode'],
    'prd_items.status'=>1,
    'prd_items.skuCode' => $k
];

// 获取商品
$skuList = PrdItem::join('prds', 'prd_items.prd_id', '=', 'prds.id')
                    ->where($where)
                    ->whereNull('prd_items.deleted_at')
                    ->whereNull('prds.deleted_at')
                    ->select(['prd_items.*','prds.title'])
                    ->first();

框架里结果为5条记录,工具里只有1条。
skuCode参数为:4960685891101;
laravel里出来的结果包含了所有 这个skuCode模糊查询的结果。
最后把该值强制转为string后结果正确。

'prd_items.code' => (string)$k

也不知道是啥原因,网上找了好久没找到原因。

数据库字段类型是varchar

:joy: :joy: :joy:路过的大佬指点下

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

我只遇到过 int类型的字段使用string查询会被转int后查询模糊查询

2年前 评论

找到原因了,mysql中字符串和数字做比较,会把字符串转为数字,比如我上面传入的参数:4960685891101,未转为string时,MySQL接收到的时int类型,此时为int和varchar比较, “4960685891101A”、“4960685891101BSDSD”这样的数据mysql会当作4960685891101;所以此时查询结果就对不上了。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
1
粉丝
0
喜欢
0
收藏
1
排名:2643
访问:347
私信
所有博文
社区赞助商