2017-08-10 11 views
1

pdoのプリペアドステートメントで各変数をそのパラメータにバインドするという退屈さを取り除く作業コードがあります。私は$_POST配列をループし、html形式の名前属性に基づいて変数をparamsに動的にバインドします。pdoのプリペアドステートメントのキー値のポスト配列からのループbindParam

私の質問は、これを行うのは安全ですか?私はSQLインジェクションを開いていますか?ここで

は私のコードです -

if(!empty($_POST)){ 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $stmt = $conn->prepare("INSERT INTO planes (name, description) VALUES(:name, :description)"); 

     foreach($_POST as $key => &$value){ 
      $key = ':'.$key; 
      $stmt->bindParam($key, $value); 
     } 

     $stmt->execute(); 
    } 
    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $conn = null; 
} 

答えて

1

はい、それは安全です。パラメータ化されたクエリを使用している場合は、注入攻撃に対して脆弱ではありません。

言われているように、ここではホイールを再発明しているようですが、これはほとんどの場合、正しい方法ではありません。しかしながら;それはあなたの質問の範囲外です。受け入れられた答えは、これは言っている

Also please see this very similar question

使用してステートメントとパラメータ化クエリを作成しました。これらは、パラメータとは別にデータベースサーバに送信され、解析されるSQL文です。この方法では、攻撃者が悪質なSQLを挿入することは不可能です。

+1

私は役に立つ洞察に興味がありますか? –

+1

私は、あなたが自分で書くのではなく、この機能を提供する多くのフレームワークのうちの1つを使うことができるということを意味しました。 – catbadger

関連する問題