当前位置: 首页 > 后端技术 > PHP

yii2提示error1062Duplicateentry'xxx&'forkey'uniqe_index'总结

时间:2023-03-30 05:47:13 PHP

昨天在后台添加主题数据时,报如下错误。看报错信息大概知道是mysql的name字段设置了唯一索引,导致数据无法插入导致的,但是想不出来为什么会直接报错。插入其他值时情况并非如此。后来在model的rules里找到了[['name'],'filter','filter'=>'\yii\helpers\Html::encode']这个验证码,才知道是它引起的通过它。由于过滤器还用于验证名称字段,Html::encode将转义包含HTML特殊字符的输入。当时输入的是'CHARLES&KEITH',经过Html::encode转成"CHARLES'&'KEITH",然后入库的字段值为"CHARLES'&'KEITH"。但是上面还有一个name字段的校验,[['name'],'unique']是用用户输入的'CHARLES&KEITH'值和数据库中的所有name字段进行比较,所以比较自然通过(在前端验证此通过)。但是然后过滤器Html::encode了用户输入的值到“CHARLES'&'KEITH”,然后在插入数据库的时候,因为name字段有唯一索引,这个值已经存在了,那么Yii2报了这个错误(理解有误请指正)。