简单的一个例子:登陆.
从登陆框中传过来两个参数.
正常情况下、假设是 aa bb
select * from tbl_user where uname='aa' and upass='bb'
然后有些会sql的人就想到了在参数后面加些其他的东西
比如在bb' or 'a'='a 或者 DELETE FROM tbl_user WHERE 1>0之类的
这样SQL语句就变成:
select * from tbl_user where uname='aa' and upass='bb' or 'a' = 'a'
这样的语句是不安全的。
后来就出现PreparedStatement 对象的?占位符,通过给? 设值,可以把传过来的参数当成普通的字符串,包括单引号。这样就避免了一些灾难。
解决方案:在代码里,在执行select语句之前,加上
mysql_query("set
names
'utf8'")
注意,mysql数据库也要设置utf8,浏览器显示和文件类型都设置为utf-8
设置utf8原因:
UTF-8(8-bit
Unicode
Transformation
Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken
Thompson于1992年创建。现在已经标准化为RFC
3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)