2011-01-19 8 views
4

私はmysqli_stmt prepare関数に小さな問題があります。私はこのような配列(私はインスタンス化の有効なmysqli_stmtオブジェクトを持っている)へのparamsをバインドする際に今Mysqli準備ステートメント+バインディングオーダーBY

$params = array(
    "sisi", 
    "some_string", 
    5000, 
    "date_added DESC" 
); 

$sql = "SELECT * 
     FROM scenes 
     WHERE scene_title LIKE ? 
     AND scene_id > ? 
     ORDER BY ? 
     LIMIT ?"; 

:バインドされていません

call_user_func_array(array($this->mysql_stmt, 'bind_param'), $params); 

順序でここに私のクエリです。私はphp.netに読んで(http://ca3.php.net/manual/en/mysqli.prepare.php

マーカーは、SQLステートメント内の特定の 場所で有効です。たとえば、 は、WHERE 欄の 欄の値を指定するためにWHERE のWHERE 句のVALUES()リスト内で許可され、比較値を指定するためにWHERE 欄の列と比較されます。

しかし、彼らはその列がSELECT ステートメントによって返される 名選択リストの中で、(例えばテーブルやカラム 名など) 識別子のために許可されていない、またはバイナリの両方のオペランド を指定します= 等号のような演算子。

これを回避する方法はありますか、ORDER BY句にmysql_real_escape_char()を使用する必要がありますか?

答えて

0

状態を見つけたphp.netのリンクとして、識別子にバインド変数を使用することはできません。回避策が必要です。 mysql_real_escape_charは確かに一方的な方法でしょう。

+0

バー、ええ、私はアプリケーション開発者にこれらの属性を設定するためにdbクラスの関数を使用させるだけです。私は、mysqli prepare文がユーザー定義の入力のすべてのサニタイズを処理するようにしたかったのです。 – gprime

+0

この回答を削除してもよろしいですか?前もって感謝します。 –

+1

@ YourCommonSense ...なぜですか? – tkrajcar

関連する問題