3 回答

TA貢獻1828條經(jīng)驗 獲得超4個贊
CodeIgniter確實可以避免使用該$this->db->query方法時傳遞的變量。但是僅當您將變量作為綁定傳遞時,這是一個示例:
$dbResult = $this->db->query("SELECT * FROM users WHERE username = ?", array($this->input->post('username')));
還請記住,這$_POST不是首選,$this->input->post因為它所做的是檢查變量是否存在以防止錯誤。

TA貢獻2039條經(jīng)驗 獲得超8個贊
CodeIgniter在其數(shù)據(jù)庫層中提供了一些字符串轉義功能。
摘錄自CI手冊:
在將數(shù)據(jù)提交到數(shù)據(jù)庫之前,先對其進行轉義是非常好的安全措施。CodeIgniter有三種方法可以幫助您執(zhí)行此操作:
$ this-> db-> escape()此函數(shù)確定數(shù)據(jù)類型,使其只能轉義字符串數(shù)據(jù)。它還會自動在數(shù)據(jù)周圍添加單引號,因此您不必:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
我將發(fā)布另外兩個示例,但是我不想從閱讀手冊中獲得所有樂趣。

TA貢獻2041條經(jīng)驗 獲得超4個贊
不,您發(fā)布的代碼容易受到SQL注入的影響。您需要使用查詢綁定來構造SQL查詢。如果您使用的是CI DB庫,則可以使用以下代碼進行編碼(來自用戶指南的示例):
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
添加回答
舉報