3

「バインドされたパラメーターでクエリを書き換えることで、SQL インジェクションを防ぐためにクエリの一部を調整しています。これは、単純なクエリの場合は十分に簡単です。

例えば

// Old code 
$sql = "SELECT * FROM some_table WHERE id = 4 AND author = 'Bob'";
$this->db->query($sql);

// New Bound SQL query
$sql = "SELECT * FROM some_table WHERE id = ? AND author = ?";
$this->db->query($sql, array(4, 'Bob'));

IN 演算子を使用したクエリでこれを機能させるのに問題があります。ここで提案されているように、私は次のことを試しました:

// Old code 
$sql = "SELECT * FROM some_table WHERE id = 7 AND author IN ('Bob','Geoff)";
$this->db->query($sql);

// New Bound SQL query
$sql = "SELECT * FROM some_table WHERE id = ? AND author IN ?";
$this->db->query($sql, array(7, array('Bob','Geoff')));

ただし、このクエリはエラー メッセージで失敗します。

「SQL 構文にエラーがあります。6 行目の 'Array' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください」

クエリが次のように変更されているようです。

"SELECT * FROM some_table WHERE id = '5' AND author IN Array"

私は自分が間違っていることを本当に見ることができません。助言がありますか?

4

2 に答える 2

0

ステートメントで () を失ったと思うので、IN (?) を使用してみてください。

答えはこの質問にあると思います:

CodeIgniter - クエリ バインディング "IN" パラメータ

于 2016-07-12T09:03:24.740 に答える