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
路过的大佬指点下
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
我只遇到过
int类型的字段使用string查询会被转int后查询模糊查询找到原因了,mysql中字符串和数字做比较,会把字符串转为数字,比如我上面传入的参数:4960685891101,未转为string时,MySQL接收到的时int类型,此时为int和varchar比较, “4960685891101A”、“4960685891101BSDSD”这样的数据mysql会当作4960685891101;所以此时查询结果就对不上了。