0

次のクエリがあります

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".$this->put('invoiceNumber');

ここ$this->put('invoiceNumber');には常に "M\34\SD" のような値があります。値にスラッシュがあるため、期待どおりに機能しません。

調査したところ、mysql_escape_string をこの目的に使用できることがわかりましたが、マニュアルに従って現在は非推奨です。それで、ここで私の最善の策は何ですか?

4

4 に答える 4

1

代わりにCodeingiterActiveRecordを使用してみませんか?例:

$this->db->where('invoiceNumber', $this->put('invoiceNumber'));
$this->db->delete('salesinvoiceitems');

Codeigniterのドキュメントから引用:

単純さを超えて、Active Record機能を使用する主な利点は、クエリ構文が各データベースアダプターによって生成されるため、データベースに依存しないアプリケーションを作成できることです。また、値がシステムによって自動的にエスケープされるため、より安全なクエリが可能になります。

于 2013-03-05T09:48:37.233 に答える
0

ストリップスラッシュを試してください

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber='".($this->put('invoiceNumber')). "'";
于 2013-03-05T09:48:03.083 に答える
0

と呼ばれるアクティブレコードにメソッドがあるescapeため、次のことを行う必要があります。

$invoice = $this->db->escape($yourVar);
$query = "DELETE FROM salesinvoiceitems WHERE invoiceNumber=$invoice";

var をエスケープするため、SQL インジェクションから保護されます。

于 2013-03-05T09:47:18.667 に答える
0

これを試して

$query="DELETE FROM salesinvoiceitems WHERE invoiceNumber=".addslashes($this->put('invoiceNumber'));

于 2013-03-05T09:47:25.140 に答える