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); }
성능 고려 사항
Prepared 문은 성능을 향상하도록 설계되었지만 페이지에서 몇 번 사용해도 큰 이점을 얻지 못할 수 있습니다. 그러나 애플리케이션이 데이터베이스 작업을 자주 수행하는 경우 명령문을 준비하면 응답 시간이 눈에 띄게 향상될 수 있습니다.
위 내용은 PHP에서 준비된 문을 안전하게 사용하여 MySQL 데이터베이스를 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!