KiKi

导航

larval执行原生sql进行in查询踩的坑(其实是使用PDO踩的坑)

由于业务变更,需要在larval项目中执行几个类似的update语句:

update 表名 set name = CONCAT(?,`name`) where id in(?),

因此需要写原生sql执行。虽然每次都执行成功,没有报错,并且日志打印的sql拼接也正确,但是实际数据库的变更结果却不正确,只有一条数据发生变更,其余数据都未改变。下面就使用select语句,来模拟定位具体原因。

       

错误使用方式:从下图可以看出,使用代码执行最后得到一个id。但是执行日志中的sql最后会的得到3个id。   

    代码:         

日志:      

数据库执行:          

                          postman执行:       

 

             所以in()查询这么绑定肯定是有问题, 于是就代码一层一层的往底层追下去,发现有这么一段代码,在绑定参数时对值的类型进行了判断,所以上面代码绑定的第二个参数被视作了一个字符串。

              

 

             那么in()查询需要怎么写呢?下面对例子中的代码进行了修正,代码执行和数据库执行sql,最终都得到了3个id。

代码:            

日志:             

数据库执行:  

postman执行:        

 

posted on 2021-08-06 17:05  乖乖0943  阅读(147)  评论(0编辑  收藏  举报