-1

SQLを動的に生成し、PDOとプリペアドステートメントを使用して、列名/where句をハードコーディングせずに実行する関数を作成しようとしています。where句の「Calories」と「Colour」がハードコーディングされている以下の例では、状況に応じてwhere句を少なくするか、まったく追加しない機能を追加したいと思います。

$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array($calories, $colour));

これは、私が作成した値を動的に渡すことができる挿入関数です。

public function insert($table,$columnValueArray){ 
     $columns = implode(",",array_keys($columnValueArray)); 
     $sql = "INSERT INTO ".$table." (?) VALUES (?)"; 
     $sth = $conn->prepare($sql); 

     foreach($columnValueArray as $singleArray){ 
         $values = implode(",",$singleArray); 
         $sth->execute(array($columns),$values); 
     } 
}

これと同様の関数で更新関数を作成したいのですが、問題は、更新関数に配列の各行で変更できるwhere句が必要なことです。

4

1 に答える 1

0

私は実際にこの質問に対して少し前に同様の答えをしました:

PDOマルチフィルターSQLクエリ

配列WHEREからの名前付きparamバインディングに基づいて基本的な句を動的に構築するため、 paramsでは機能しませんが、正直なところ、SQLインジェクションやその他の攻撃を停止するために配列の順序に依存している理由はわかりません。 PHPでは、配列の順序が常に保証されるとは限りません。$_POST?

于 2012-08-05T21:46:19.420 に答える