PHP에서 데이터베이스 운영은 개발자의 일상 작업에 없어서는 안될 부분입니다. 효율성을 향상시키고 SQL 주입 공격을 방지하기 위해 MySQLI에 의해 확장 된 준비된 진술을 사용하는 것은 적극 권장되는 접근법입니다. 이 기사는 MySQLI Fetch_fields 의 사용 프로세스를 자세히 소개하고 PHP의 준비 및 BIND_RESULT를 소개합니다.
먼저 데이터베이스 연결을 만들어야합니다. 그런 다음 준비 방법을 사용하여 SQL 명령문을 준비 할 수 있습니다. 이 메소드는 SQL 쿼리를 매개 변수로 받아들이고 준비된 명령문 객체를 반환합니다.
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$query = "SELECT id, name, email FROM users WHERE active = ?";
$stmt = $mysqli->prepare($query);
위의 코드에서, 준비 방법은 SQL 문을 전처리하고 후속 파라미터 바인딩을 준비합니다.
다음으로 매개 변수를 바인딩해야합니다. BIND_PARAM 메소드는 실제 매개 변수 값을 SQL 문에 바인딩 할 수 있습니다. 이 예에서 쿼리는 활성 필드를 통해 데이터를 필터링하므로 대신 매개 변수를 바인딩해야합니다 .
$active = 1;
$stmt->bind_param("i", $active); // "i"정수 유형을 나타냅니다
bind_param 메소드의 첫 번째 매개 변수는 SQL 문의 각 매개 변수의 유형을 나타내는 문자열입니다. 일반적인 유형은 다음과 같습니다.
I : 정수
D : 이중 정밀 플로팅 포인트
S : 문자열
B : Blob 유형 데이터
이 예에서는 정수 유형 매개 변수 ( $ active )를 바인딩합니다.
매개 변수를 바인딩 한 후 실행 메소드를 통해 SQL 문을 실행할 수 있습니다.
$stmt->execute();
현재 SQL 쿼리가 실행되지만 데이터는 아직 반환되지 않았습니다. fetch_fields를 통해 쿼리 결과의 구조를 얻고 bind_result를 통해 각 열의 값을 바인딩해야합니다.
Fetch_fields 메소드는 열 이름, 유형 등을 포함하여 쿼리 결과의 필드 정보를 얻을 수 있습니다. 후속 결과 처리에 사용할 수있는 다양한 필드 객체를 반환합니다.
$fields = $stmt->fetch_fields();
foreach ($fields as $field) {
echo "필드 이름: " . $field->name . "<br>";
echo "필드 유형: " . $field->type . "<br>";
}
위의 코드는 각 필드의 이름과 유형을 출력합니다. fetch_fields 메소드에 의해 반환 된 필드 객체에는 Rich Metadata가 포함되어있어 개발자가 데이터베이스 테이블의 구조 정보를 얻도록 촉진합니다.
쿼리를 실행 한 후 BIND_RESULT 메소드를 통해 쿼리 결과 열을 PHP 변수에 바인딩해야합니다. bind_result 메소드를 사용하면 변수를 전달하여 설정에서 각 데이터 행을 추출 할 수 있습니다.
$stmt->bind_result($id, $name, $email);
여기서는 쿼리 결과의 ID , 이름 및 이메일 필드를 각각 $ ID , $ 이름 및 $ 이메일 변수로 바인딩합니다.
결과 변수를 바인딩 한 후 Fetch 메소드를 사용하여 쿼리 결과 행을 행으로 추출 할 수 있습니다.
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email<br>";
}
페치 메소드는 데이터 행이 성공적으로 얻어 졌는지를 나타내는 부울 값을 반환합니다. 획득이 성공하면 현재 행의 데이터에 바운드 변수를 통해 액세스 할 수 있습니다.
모든 작업이 완료되면 준비된 문 및 데이터베이스 연결을 닫아 리소스를 확보하십시오.
$stmt->close();
$mysqli->close();
위의 단계를 통합하면 최종 완전 코드는 다음과 같습니다.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$query = "SELECT id, name, email FROM users WHERE active = ?";
$stmt = $mysqli->prepare($query);
$active = 1;
$stmt->bind_param("i", $active);
$stmt->execute();
$fields = $stmt->fetch_fields();
foreach ($fields as $field) {
echo "필드 이름: " . $field->name . "<br>";
echo "필드 유형: " . $field->type . "<br>";
}
$stmt->bind_result($id, $name, $email);
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email<br>";
}
$stmt->close();
$mysqli->close();
?>
관련 태그:
fetch_fields