PHP에서 MySQLI는 준비된 명령문이 SQL 주입을 효과적으로 방지 할 수있는 MySQL 데이터베이스를 작동하는 다양한 방법을 제공합니다. mysqli :: stmt_init 및 bind_param은 전처리 문을 구현할 때 일반적으로 사용되는 두 가지 함수입니다. 이 기사는이 두 기능을 매개 변수 바인딩에 올바르게 사용하는 방법을 소개합니다.
mysqli :: stmt_init는 MySQLI 클래스의 빈 전처리 문을 초기화하는 데 사용되는 메소드입니다. 이 메소드는 SQL 쿼리를 실행하지 않고 명령문 객체 만 준비합니다.
BIND_PARAM 메소드는 실제 매개 변수를 전처리 문에 바인딩하는 데 사용됩니다. SQL 쿼리를 실행할 때 이러한 바운드 매개 변수는 SQL 문의 자리 표시기를 대체합니다.
PHP에서 mysqli :: stmt_init 및 bind_param을 사용하는 기본 프로세스는 다음과 같습니다.
데이터베이스에 연결 : 먼저 MySQLI 클래스를 통해 데이터베이스에 연결해야합니다.
전처리 명령문 작성 : stmt_init을 통해 전처리 명령문 개체를 만듭니다.
바인드 매개 변수 : BINT_PARAM 메소드를 사용하여 전처리 명령문에서 사용자 입력 값을 자리 표시 자에게 바인딩합니다.
실행 명령문 : 양호한 매개 변수 바운드로 SQL 쿼리를 실행합니다.
처리 결과 : 쿼리 결과를 얻고 작업을 수행하십시오.
다음은 매개 변수 바인딩에 mysqli :: stmt_init 및 bind_param을 사용하는 방법을 보여주는 간단한 예제 코드입니다.
<?php
// 1. 데이터베이스 연결을 만듭니다
$mysqli = new mysqli("localhost", "user", "password", "database");
// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 2. 전처리 진술을 만듭니다
$stmt = $mysqli->stmt_init();
if ($stmt === false) {
die("초기화 명세서에 실패했습니다");
}
// 3. 준비하다 SQL 질문
$sql = "SELECT name, email FROM users WHERE age = ? AND status = ?";
// 4. 바인딩 매개 변수
if ($stmt->prepare($sql)) {
// 假设我们要질문年龄为 30 그리고 상태는입니다 'active' 사용자
$age = 30;
$status = 'active';
// 사용 bind_param 바인딩 매개 변수
// 'i' 정수 유형을 나타냅니다,'s' 문자열 유형을 나타냅니다
$stmt->bind_param('is', $age, $status);
// 5. 执行질문
$stmt->execute();
// 6. 获取질문结果
$result = $stmt->get_result();
// 输出질문结果
while ($row = $result->fetch_assoc()) {
echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}
// 7. 가까운 진술
$stmt->close();
}
// 8. 데이터베이스 연결을 닫습니다
$mysqli->close();
?>
데이터베이스에 연결 : 먼저 새로운 MySQLI를 통해 데이터베이스 연결을 만들고 오류 처리를 수행하십시오.
전처리 명령문 작성 : $ mysqli-> stmt_init () 를 통해 전처리 명령문 개체를 초기화하십시오. False가 반환되면 초기화가 실패했음을 의미합니다.
SQL 쿼리 준비 : 준비 방법을 통해 SQL 쿼리 준비는 어디에 있습니까 ? Bind_param을 통한 바인딩을 기다리는 자리 표시 자입니다.
바인드 매개 변수 : Bind_Param 메소드는 두 가지 매개 변수를 수신합니다.
첫 번째 매개 변수는 각 매개 변수의 유형을 지정하는 유형 문자열입니다. 예를 들어 : 'i'는 정수 유형을 나타내고, 's'는 문자열 유형을 나타내고, 'd'는 이중 확정 플로팅 지점 번호를 나타냅니다.
두 번째 및 후속 매개 변수는 SQL 쿼리에 바인딩되는 실제 변수입니다.
쿼리 실행 : 실행 메소드를 사용하여 전처리 문을 실행하면 실제 SQL 쿼리가 데이터베이스로 전송됩니다.
쿼리 결과 가져 오기 : get_result를 통해 실행 된 결과를 가져 오면 fetch_assoc을 사용하여 각 데이터 행을 얻을 수 있습니다.
진술 및 연결을 닫으십시오 : 마지막으로, 쿼리를 실행 한 후에는 문 및 데이터베이스 연결을 닫습니다.
실제 개발에서 Bind_Param 에 바인딩 된 매개 변수는 정수, 문자열, 부동 소수점 번호 등을 포함한 많은 유형 일 수 있습니다. 공통 유형은 다음과 같이 설명됩니다.
I : 정수 유형 (int).
D : 이중 정밀 플로팅 포인트 유형 (이중).
S : 문자열 유형 (문자열).
B : Blob 유형 (이진 데이터).
필요에 따라 Bind_Param은 이러한 유형에 따라 매개 변수를 SQL 쿼리에 바인드합니다.
자리 표시 자의 순서는 바운드 매개 변수의 순서와 일치해야합니다 . SQL 쿼리 의 자리 표시 자 순서는 바운드 매개 변수의 순서와 일치해야합니다.
오류 확인 : STMT_INIT , 준비 및 BIND_PARAM 과 같은 방법을 사용하는 경우 잠재적 오류를 피하기 위해 항상 반환 값을 확인하는 것이 좋습니다.
SQL 주입 보호 : 전처리 문 및 바인딩 파라미터의 사용은 SQL 주입을 방지하는 효과적인 수단입니다.
MySQLI :: STMT_INIT 및 BIND_PARAM 기능을 사용하여 개발자는 SQL 주입을 쉽게 방지하고 데이터베이스 작업의 보안 및 안정성을 보장 할 수 있습니다. 바인딩 파라미터 프로세스는 간단하고 효율적이며 특히 사용자 입력을 처리 해야하는 쿼리에 적합합니다.
이 기사의 설명이 PHP의 안전한 데이터베이스 작업 에이 두 기능을 사용하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다.