參照CodeIgniter Query Builder。什麼時候應該轉義sql查詢
有許多功能,包括接受一個可選的$escape
參數,定義爲:
$逃生(布爾) - 無論是逃避值和標識符
在什麼情況下應該或不應該逃脫?
參照CodeIgniter Query Builder。什麼時候應該轉義sql查詢
有許多功能,包括接受一個可選的$escape
參數,定義爲:
$逃生(布爾) - 無論是逃避值和標識符
在什麼情況下應該或不應該逃脫?
它實際上是在您所提供的鏈接解釋說:
如果您使用的是笨逃脫查詢的數據庫,你 可以防止逃逸的內容通過傳遞一個可選的第三個參數, 並將其設定變爲假。
它表示;例如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 documentation爲FALSE
參數的使用場景:如果你需要一個複合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
參數。但是這種情況的常見關鍵字可能是複合語句。
除非您事先對輸入進行了清理,否則您應該始終轉義值和標識符。 – shmosel
唯一的例外是沒有任何輸入來自用戶。 – DFriend
@ shmosel,DFriend,謝謝。我現在明白了。 –