使用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;
返回数据库查询结果有几种形式
数组形式
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]读取结果,有可能当数据库结构改变,增加字段,字段顺序发生变化,输出数据都会出错
下面的例子,不会使用索引
$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'; 索引有效