CodeIgniter Query Builderを参照してください。SQLクエリをエスケープする必要がある場合
として定義オプション$escape
パラメータを受け入れる多くの機能、があります。
$エスケープ(ブール値) - 値と識別子またはエスケープすべきでないどのような状況で
をエスケープするかどうかは、 ?
CodeIgniter Query Builderを参照してください。SQLクエリをエスケープする必要がある場合
として定義オプション$escape
パラメータを受け入れる多くの機能、があります。
$エスケープ(ブール値) - 値と識別子またはエスケープすべきでないどのような状況で
をエスケープするかどうかは、 ?
それは実際にあなたが提供しているリンクで説明しています:、 をオプションの第三引数を渡すと、それを設定することにより、あなたはCodeIgniterのは、のためのクエリをエスケープするデータベースを使用している場合
、あなた コンテンツをエスケープ防ぐことができますFALSEにする。
つまり、例えばMySQLがサポートされており、それがエスケープされます:
$this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
それを無効にする:FALSE
引数の権利を使用する際
$this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45
しかし、あなたの質問でしたか?だから、私はあなたにthe old documentationからFALSE
引数の使用のためのシナリオを与えてみましょう:
$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE);
あなたは化合物select文を必要とする場合は、この(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
なければ、生成されます。 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、ありがとう。私は今理解した。 –