mysql 数字加引号问题

xiangzilhx 2009-07-02 04:51:01
在insert into ... 和 select ... where..的时候 如果字段为数字类型,添加或者查询数据时,给数字添加引号是不是多余的?
insert into table (atype) values ('1')
insert into table (atype) values (1)
atype是数字字段,这两种方法都行啊,因为mysql手册上面的东西实在是太乱,根本找不到相关的信息。
...全文
737 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeboy6716 2009-07-03
  • 打赏
  • 举报
回复 1
最好是加引号
加引号一定不会出问题,不加引号的话稍不留神就可能会出问题。
xiangzilhx 2009-07-03
  • 打赏
  • 举报
回复
6L,你说的注入问题我这几天看了,不过GET POST 传入数字我都会先把他强制转换成数字赋给一个变量,就像这样
$Intx = $_GET['id'];
$Intx = (int) $Intx;
最终$Intx的结果肯定是数字,然后再根据自己的需求设定$Intx的范围,这样他还能注入?

如果传入的是字符串我直接 mysql_real_escape_string();然后两边加引号,并且我用的都是utf8编码,没有任何一个页面,数据表,字段用的是GBK,所以就不会出现0xbf27编码注入的问题。这样他还能注入?
foolbirdflyfirst 2009-07-02
  • 打赏
  • 举报
回复
不多余,不加引号总让人对sql注入感到担心,所以只要mysql的sql_mode不严格设置(一般很少设置严格),都要加引号。
特别是查询语句,如果你select ...where后面的条件和用户输入相关,不加引号加大了受攻击的危险系数。

$user_id = $_GET['user_id'];//假如用户在url里构造参数使得$_GET['user_id']为 1 or 1=1
$sql = "select * from `user` where user_id={$user_id}";//下面这句sql不就变成了select * from `user` where user_id=1 or 1=1,所有user数据?

假如加了引号,又对用户有可能进行注入的入口(get post cookie)进行数据过滤,会相对安全很多。

insert into table (atype) values (select something from sometable limit 1) ,括号里是可以构造sql语句的,指不定就给人利用去攻击了,所以还是加引号保险点。

delete,update等也要注意此类问题。
qaulxy 2009-07-02
  • 打赏
  • 举报
回复
是的,最好是都加上,养成好习惯。
kukat 2009-07-02
  • 打赏
  • 举报
回复
不多余,养成好的编码习惯很重要
tfxg 2009-07-02
  • 打赏
  • 举报
回复
無視
xiangzilhx 2009-07-02
  • 打赏
  • 举报
回复
1L 你说的都是废话。=。=凸
我要问的数字加引号是不是多余的,因为以前我使用的其他数据库都没有加
tfxg 2009-07-02
  • 打赏
  • 举报
回复
如果是數字類型,加引號並沒有影響。如果是字符類型沒有加引號問題就大了,哈哈。

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧