使用pdo_mysql替代mysql
错误的写法,通过字符串链接拼接sql语句极容易出现注入漏洞
$sql = "select * from table where id=".$id; $sql = "select * from table where id='".$id."'"; $sql = "INSERT INTO fruit(name, colour) VALUES ('".$name."', '".$colour."')";
正确的写法
$sql = "select * from table where id=?"; $sql = "INSERT INTO fruit(name, colour) VALUES (?, ?)";
$sql = <<<____SQL CREATE TABLE IF NOT EXISTS `ticket_hist` ( `tid` int(11) NOT NULL, `trqform` varchar(40) NOT NULL, `trsform` varchar(40) NOT NULL, `tgen` datetime NOT NULL, `tterm` datetime, `tstatus` tinyint(1) NOT NULL ) ENGINE=ARCHIVE COMMENT='ticket archive'; ____SQL;
13.3.1. 结果集使用注意事项
返回数据库查询结果有几种形式
数组形式
Array ( [0] => banana [1] => yellow ) Array ( [NAME] => banana [COLOUR] => yellow )
对象形式
Object ( Obj->NAME Obj->COLOUR )
正确的使用方式
print($row[name]) print($row->name)
错误的使用使方式
print($row[0])
避免使用 "*"查询,一会影响性能,二增加带宽开销
$sql = "select * from tab where status=0 limit 1";
如果程序使用$row[1]读取结果,有可能当数据库结构改变,增加字段,字段顺序发生变化,输出数据都会出错
13.3.2. 索引
下面的例子,不会使用索引
$sql = "select id, name, created from tab where id != 100";
EXPLAIN select * from members where id != '1010'; 索引失效 EXPLAIN select count(*) from members where id != '1010'; 索引有效
13.3.3. 缓存
下面的例子,数据不会缓存查询结果
$sql = "select id, name, created from tab where created=now()";
Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>comments powered by Disqus
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。