Home | Mirror | Search |
使用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'; 索引有效