ホームページ > バックエンド開発 > PHPチュートリアル > PHP でプリペアド ステートメントを使用して MySQL からデータを安全に取得するにはどうすればよいですか?

PHP でプリペアド ステートメントを使用して MySQL からデータを安全に取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-20 13:07:10
オリジナル
349 人が閲覧しました

How Can I Securely Retrieve Data from MySQL Using Prepared Statements in PHP?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート