1

私は Codeigniter.i を使用して$_POSTいます。アポストロフィ(')、(;) などの特殊文字を含む可能性のある検索フォームの値に文字列を使用したいのですが、mysql クエリでこれらの文字を無視して、$_POST['search']値を選択/保存できるようにするにはどうすればよいですか?データベースに?

mysql_real_escape_string() 関数を使用するたびに、次のようになります。 mysql_real_escape_string(): Access denied error.

私のコードは次のようになります。

$query = "SELECT * FROM products WHERE  
product_name='".mysql_real_escape_string($_POST['search'])."'";

$this->db->query($query);

codeigniter でこの問題をどのように処理できますか? ありがとう

4

2 に答える 2

1

ユーザー入力をクエリに直接使用しないでください。「SQL インジェクション」と「xss」の詳細をお読みください。codeIgnitor の場合は、次のようにします。

  1. $_POST を使用しないでください。代わり に入力クラスを使用してください。$this->input->post

  2. クエリ バインディングを使用します。mysql_real_escape_string は必要ありません。例えば。

    $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
    
    $this->db->query($sql, array(3, 'live', 'Rick')); 
    
于 2012-09-28T10:39:38.823 に答える
0

それを行う最良の方法は次のとおりです。

$query = "SELECT * FROM products WHERE product_name=?";
$this->db->query($query, array($this->input->post('search'));

こちらのドキュメントをご覧ください: http://codeigniter.com/user_guide/database/queries.html

本当にエスケープを使用したい場合は、エスケープ クエリを参照してください。しかし、バインディングでそれを行う方が良いでしょう(上記の私の例のように)

于 2012-09-28T10:41:29.127 に答える