
简单的一个例子:登陆.
从登陆框中传过来两个参数.
正常情况下、假设是 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 对象的?占位符,通过给? 设值,可以把传过来的参数当成普通的字符串,包括单引号。这样就避免了一些灾难。
数据库创建后,数据库的默认字符集是不能修改的,可以尝试一下下面的方法
1 创建表时使用DEFAULT CHARSET = UTF8指定字符集,再插入中文查看是否乱码
CREATE TABLE TAB1 (COL XXXXXXXXXXXXXXXXXXX) ENGINE = INNODB DEFAULT CHARSET = UTF8 COMMENT 'TAB1'2 如果1方法不行的话,删库重建,重新指定数据库字符集,mysql重建数据库还是很简单的
解决方案:在代码里,在执行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条)