Home | 简体中文 | 繁体中文 | 杂文 | Search | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | Email

13.3. Database

使用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()";
			
comments powered by Disqus