2017-01-24 12 views
1

CodeIgniter Query Builderを参照してください。SQLクエリをエスケープする必要がある場合

として定義オプション$escapeパラメータを受け入れる多くの機能、があります。

$エスケープ(ブール値) - 値と識別子またはエスケープすべきでないどのような状況で

をエスケープするかどうかは、 ?

+0

事前に入力をサニタイズしていない限り、値と識別子をエスケープする必要があります。 – shmosel

+0

唯一の例外は、入力がユーザーから来ていない場合です。 – DFriend

+0

@ shmosel、DFriend、ありがとう。私は今理解した。 –

答えて

3

それは実際にあなたが提供しているリンクで説明しています:、 をオプションの第三引数を渡すと、それを設定することにより、あなたは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引数を使用する必要があります。しかし、そのような場合の一般的なキーワードはおそらく複合ステートメントです。

関連する問題