PHP での MySQL プリペアド ステートメントの保護
PHP で SQL クエリを操作する場合、プリペアド ステートメントを使用してセキュリティを優先することが重要です。 URL パラメーターからの入力を使用して列を取得する安全な準備済みステートメントを作成する方法は次のとおりです。
改良された MySQL (MySQLi) を使用する:
$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"; } $stmt->close();
または、このヘルパー関数を使用して、連想配列のバインディング:
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); }
を使用するにはit:
$stmt->store_result(); $resultrow = array(); stmt_bind_assoc($stmt, $resultrow); while ($stmt->fetch()) { print_r($resultrow); }
パフォーマンスの向上
準備されたステートメントは、クエリの再解析と再計画の必要性を最小限に抑えることでパフォーマンスを向上させます。ただし、1 ページで数回しか使用されない場合、速度への影響はそれほど大きくない可能性があります。それでも、セキュリティを強化し、SQL インジェクションの脆弱性から保護するために推奨される方法であることに変わりはありません。
以上がPHP でプリペアド ステートメントを使用して MySQL からデータを安全に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。