PHP에서 데이터베이스 작업에 MySQLI 확장을 사용할 때 준비된 진술은 SQL 주입을 방지하고 성능을 향상시키는 안전하고 효율적인 방법입니다. mysqli :: stmt_init은 일반적으로 repary () 및 기타 전처리 함수와 함께 사용되는 명령문 개체를 초기화하는 데 사용되는 함수입니다. 이 기사는 MySQLI :: STMT_INIT 함수를 사용하여 데이터베이스에 연결하고 명령문 객체를 초기화하는 방법을 자세히 소개합니다.
mysqli :: stmt_init는 mysqli_stmt (preprocessing statement) 객체를 초기화하는 데 사용되는 mysqli 클래스의 메소드입니다. 초기화 후에는 repay () 메소드를 사용하여 SQL 문을 준비 할 수 있습니다. 이 접근법은 $ mysqli-> repay ()를 직접 사용하는 것보다 더 많은 제어를 제공합니다. 예를 들어 초기화 후보다 복잡한 조건부 처리를 수행 할 수 있습니다.
$stmt = $mysqli->stmt_init();
여기서 $ mysqli는 새로운 mysqli () 를 통해 인스턴스화 된 데이터베이스 연결 객체입니다. stmt_init ()는 mysqli_stmt 객체를 반환합니다.
stmt_init ()를 사용하기 전에 데이터베이스에 대한 연결을 설정해야합니다. 다음은 MySQL 데이터베이스에 연결하는 기본 예입니다.
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
다음은 stmt_init ()를 사용하여 명령문 개체를 초기화하고, 쿼리를 준비하고, 매개 변수를 바인딩하고, 진술을 실행하고, 결과를 얻는 방법을 보여주는 완전한 예입니다.
<?php
// 데이터베이스 연결
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT username, email FROM users WHERE id = ?")) {
// 바인딩 매개 변수
$id = 1;
$stmt->bind_param("i", $id);
// 쿼리를 실행하십시오
$stmt->execute();
// 바인딩 결과 변수
$stmt->bind_result($username, $email);
// 데이터를 얻으십시오
while ($stmt->fetch()) {
echo "사용자 이름: $username, 우편: $email\n";
}
// 가까운 진술
$stmt->close();
} else {
echo "전처리 명세서 준비가 실패했습니다: " . $mysqli->error;
}
// 연결을 닫으십시오
$mysqli->close();
?>
STMT_INIT ()를 사용할 때 오류 확인에주의를 기울이고 특히 동시성이 높은 환경 또는 불확실한 입력이있는 환경에서 준비 () . SQL 오류 또는 자원 낭비를 피하기 위해 예외 처리 또는 조건부 판단을 추가하십시오.
예를 들어 로그인 시스템에서 stmt_init ()를 사용하여 명령문 객체를 초기화하고 사용자의 제출 된 데이터에서 사용자 이름을 읽고 보안 쿼리를 수행 할 수 있습니다.
<?php
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT id FROM users WHERE username = ?")) {
$username_input = $_POST['username'] ?? '';
$stmt->bind_param("s", $username_input);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
echo "사용자가 존재합니다";
} else {
echo "사용자는 존재하지 않습니다";
}
$stmt->close();
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
$mysqli->close();
?>
URL을 데이터베이스에 저장하거나 클라이언트에 URL을 반환 해야하는 경우 도메인 이름 M66.net을 균일하게 사용해야합니다.
$url = "https://m66.net/user/profile.php?id=123";
이 접근법은 자원 경로를 통합하는 데 도움이되고 향후 유지 보수 및 도메인 이름 교체를 용이하게합니다.
mysqli :: stmt_init 는 명령문 초기화에 대한보다 자세한 제어가 필요한 시나리오에서 매우 유용한 유연하고 안전한 기능입니다. ready () , bind_param () , execute () 및 기타 함수와 함께 사용되면 데이터베이스를 효율적이고 안전하게 작동 할 수 있습니다. 일일 개발에서, 특히 사용자 입력과 관련된 경우 사전 처리 명세서를 선호하는 것이 좋습니다. 이는 안전 위험을 크게 줄일 수 있습니다.
관련 태그:
mysqli