「バインドされたパラメーターでクエリを書き換えることで、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"
私は自分が間違っていることを本当に見ることができません。助言がありますか?