项目实记-数据库数字英文字符串转数字
功能需求:根据渠道code、日期、统计pv、uv等;
异常描述:如下图id=3的那条数据code携带了其他参数(原设计只存放纯code)
问题1: 字段字符类型设计问题
设计的时候还不确定渠道code的字符类型长度(定义varchat(100))依赖友盟生成,在实际使用后渠道code为10位数整形数字 小于int类型最大值2147483647,但是不确定后续是否会超出范围或长度还是保留varchat(20)长度改为20
问题2: 接口没做限制注入问题
这个问题是最致命的,低级错误!参数未校验直接写进sql
错已发生,赶快修复才是,祭天的事情往后放!
1、接口参数校验加上(正则整形数字\或者number校验)
2、旧数据code参数修改(conver(code,unsigned))
update table set code
= CONVERT(code
,UNSIGNED) WHERE id=3;
错误:
Truncated incorrect INTEGER value: ‘103432?http://www.baidu.com/111’
正确修改在update 后面加上 IGNORE
update IGNORE table set code
= CONVERT(code
,UNSIGNED) WHERE id=3;
成功 Affected rows:1