0

PDO を使用して MySQL のフィールドの値を更新しようとしています。さまざまな種類の準備済みステートメントを試しましたが、どれも機能しませんでした。これが私のコードです:

    $table = $_POST['table'];
    $field = $_POST['field'];
    $value = $_POST['value'];

    try{

       $available = "Available";
       $cero = 0;

       $q = "UPDATE ? SET $available = $cero WHERE ? = ? ";
       $stmt = $connection->getPdo()->prepare($q);  
       $stmt->execute( array ($table,$field,$value) );

       echo true;       

    }catch(PDOException $exception){
      echo $exception;
    }

問題が解決しました:

   $q = "UPDATE $table SET $available = $cero WHERE $field = ? ";
   $stmt = $connection->getPdo()->prepare($q);  
   $stmt->execute( array ($value) );
4

1 に答える 1

2

?テーブル名、または実際には、準備されたクエリのオブジェクト名 (列、データベースなど) を置き換えるために使用することはできません。パラメータ化は値に対してのみ機能します。あなたはしなければならないでしょう:

$q = "UPDATE $table SET $available = $cero WHERE $field = ? ";
$stmt = $connection->getPdo()->prepare($q);  
$stmt->execute( array ($value) );

これを行おうとしたという事実は、ユーザー入力からテーブル名を取得していることを示唆しています。これは、たとえエスケープしていても、非常に悪い考えです。

于 2012-06-08T17:08:43.680 に答える