2017-07-01 15 views
-1

動作しません、準備が、私はvar_dump $queryをしようとすると、私は次があります... { ["queryString"]=> string(44) "SELECT * FROM投稿をWHERE :where LIMIT 15;" }PDO-> bindParamが、私は以下のコードを実行しようとした

コード:

$query = Main::$data_base->pdo->prepare(

    'SELECT ' . $fields . ' ' . 
    'FROM `posts` ' . 
    'WHERE :where ' . 
    'LIMIT ' . $posts_quantity . ';' 
); 

$query->bindParam(':where', $where, PDO::PARAM_STR); 

$query->execute(); 
+2

テーブル名、列名、または完全なwhere句をバインドすることはできません。 prepareは、コンパイルのためのクエリコードをDBに渡します。クエリの基本概念を知らないときにクエリをコンパイルできない – RiggsFolly

+1

[用意されたPDO文を使用してORDER BYパラメータを設定するにはどうすればよいですか?](https://stackoverflow.com/questions/2542410/how-do- i-order-by-params-using-prepared-pdo-statement)この質問に対する答えはこのページの解説の説明にあります。 – mickmackusa

答えて

0

バインディングは、キーと値のペアで行う必要があります。

正しい:

where a=:value 

どのような名前でももちろん名前を付けることができます(将来の開発者には公然の予約語は使用しないでください)。結合パラメータを使用してクエリの完全な部分を交換

が許可されていません。:my_where_clause

where :my_where_clause 

a=bで許可されていません。これは、その時点で即座にエスケープされ、my_where_clauseのアプローチでは不可能なSQLインジェクションを防止するパラメータのためのパラメータバインディングであるということです。

関連する問題