2017-01-24 18 views
1

參照CodeIgniter Query Builder什麼時候應該轉義sql查詢

有許多功能,包括接受一個可選的$escape參數,定義爲:

$逃生(布爾) - 無論是逃避值和標識符

在什麼情況下應該或不應該逃脫?

+0

除非您事先對輸入進行了清理,否則您應該始終轉義值和標識符。 – shmosel

+0

唯一的例外是沒有任何輸入來自用戶。 – DFriend

+0

@ shmosel,DFriend,謝謝。我現在明白了。 –

回答

3

它實際上是在您所提供的鏈接解釋說:

如果您使用的是笨逃脫查詢的數據庫,你 可以防止逃逸的內容通過傳遞一個可選的第三個參數, 並將其設定變爲假。

它表示;例如MySQL的支持,它會逃跑:

$this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL 

禁用它:

$this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45 

但你的問題是,當使用FALSE的說法對嗎?所以讓我給你從the old documentationFALSE參數的使用場景:如果你需要一個複合SELECT語句

$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 

這(FALSE)是有用的。

沒有FALSE就會產生:

SELECT `(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4` 

FALSE

SELECT (SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4 

和期望的情況下是最後一個。使用FALSE僅僅是刪除反引號(`)。

這種用法是首選,因爲它是實用的寫作,但我不推薦它,因爲它很混亂。

我喜歡寫這樣的:

<?php 
    . 
    . 
    $whatever_query = $this->db->get_compiled_select(); 
    $query = $this->db->query('SELECT (SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4 '.$whatever_query); 
?> 

可有些人就是喜歡使用:$this->db->select(),這就是爲什麼有一個FALSE說法。

順便說它不是$this->db->select()特定問題。在調用其他查詢生成器函數時,可能會有很多情況需要使用FALSE參數。但是這種情況的常見關鍵字可能是複合語句

相關問題