ホームページ >バックエンド開発 >PHPチュートリアル >PHP で SQL インジェクションを防ぐ 2 つの方法の紹介 (コード例)

PHP で SQL インジェクションを防ぐ 2 つの方法の紹介 (コード例)

不言
不言転載
2019-01-31 10:29:272696ブラウズ

この記事では、PHPにおけるSQLインジェクションを防ぐ方法(2種類)を紹介します。参考になる内容です。困っている方は参考にしてください。お役に立てれば幸いです。

PHPはSQLインジェクションを防ぐためのメソッドをシンプルに実装しています。PHPで一般的な操作方法や注意事項を分析し、SQLインジェクションを防ぐためのサンプルをサンプル形式で示しています。PHPのソースコードにはわかりやすいように詳細なコメントが付いています。参考にできます!

方法 1: パラメータの実行と置換


 $var_Value) {
    //获取POST数组最大值
    $num = $num + 1;
  }
  //下标为i的数组存储的是商品id, 下标为j数组的存储的是此商品的库存
  for($i=0;$isetAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      //查询数据库中是否存在该ID的商品
      //当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据
      $stmt = $pdo->prepare("select good_id from delphi_test_content WHERE good_id = ?");
      //当调用到 execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。
      $stmt->execute(array($_POST[$i]));
      //返回查询结果
      $count = $stmt->rowCount();
      //如果本地数据库存在该商品ID和库存记录,就更新该商品的库存
      if($count != 0)
      {
        $stmt = $pdo->prepare("update delphi_test_content set content = ? WHERE good_id = ?");
        $stmt->execute(array($_POST[$j], $_POST[$i]));
      }
      //如果本地数据库没有该商品ID和库存记录,就新增该条记录
      if($count == 0)
      {
        $stmt = $pdo->prepare("insert into delphi_test_content (good_id,content) values (?,?)");
        $stmt->execute(array($_POST[$i], $_POST[$j]));
      }
    }
  }
  $pdo = null;
  //关闭连接
}
?>

方法 2:bindParam バインディング パラメータ


うわー

以上がPHP で SQL インジェクションを防ぐ 2 つの方法の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。