ホームページ >データベース >mysql チュートリアル >PHP でプリペアド ステートメントを安全に使用して MySQL データベースにクエリを実行するにはどうすればよいですか?
MySQL 用 PHP の安全なプリペアド ステートメント
MySQL と PHP を使用する場合、データベースのセキュリティを確保するにはプリペアド ステートメントを使用することが重要です。クエリ。プリペアド ステートメントは、ユーザー指定の入力から SQL ステートメントを分離することで、SQL インジェクション攻撃を防御します。
安全なプリペアド ステートメントの作成
安全なプリペアド ステートメントを作成するには、次のようにします。次のコード スニペットを使用します:
$db = new mysqli("host", "user", "pw", "database"); $stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC"); $stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
コード
データの取得
ステートメントを準備した後、ステートメントを実行し、データを取得し、結果を反復処理できます。
$stmt->execute(); $stmt->store_result(); $stmt->bind_result($column1, $column2, $column3); while ($stmt->fetch()) { echo "col1=$column1, col2=$column2, col3=$column3 \n"; }
の連想配列利便性
データを連想配列として取得するには (例: SELECT * クエリの場合)、次の関数を使用できます。
function stmt_bind_assoc(&$stmt, &$out) { $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields[0] = $stmt; $count = 1; while ($field = mysqli_fetch_field($data)) { $fields[$count] = &$out[$field->name]; $count++; } call_user_func_array(mysqli_stmt_bind_result, $fields); }
この関数により、結果をバインドできます。連想配列を使用すると、 code:
$stmt->store_result(); $resultrow = array(); stmt_bind_assoc($stmt, $resultrow); while ($stmt->fetch()) { print_r($resultrow); }
パフォーマンスに関する考慮事項
準備されたステートメントはパフォーマンスを向上させるように設計されていますが、ページ上で数回使用しても大幅な改善が得られない可能性があります。ただし、アプリケーションがデータベース操作を頻繁に実行する場合、ステートメントを準備すると、応答時間が大幅に改善される可能性があります。
以上がPHP でプリペアド ステートメントを安全に使用して MySQL データベースにクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。