준비된 진술은 PHP를 사용하여 MySQL 데이터베이스를 운영 할 때 보안 및 성능을 향상시키기위한 주요 기술 중 하나입니다. mysqli :: stmt_init는 전처리 명령문 개체를 초기화하는 데 사용되는 MySQLI 클래스의 함수입니다. SQL 업데이트 작업 (예 : 업데이트 문)을 안전하게 수행하기 위해 repay () 및 bind_param () 메소드와 협력하는 데 종종 사용됩니다.
이 기사는 mysqli :: stmt_init을 사용하여 업데이트 문을 실행하는 방법에 대한 자세한 설명을 제공하고 권장 모범 사례 및 실제 팁을 제공합니다.
mysqli :: stmt_init는 mysqli_stmt 객체를 초기화하는 데 사용되는 함수입니다. 구문은 다음과 같습니다.
mysqli_stmt mysqli::stmt_init ( void )
Unbound 문과 현재 연결과 관련된 MySQLI_STMT 객체를 반환합니다. 그런 다음이 객체를 사용하여 ready () , bind_param () , execute () 및 기타 작업을 수행하는 데 사용할 수 있습니다.
다음 예제는 mysqli :: stmt_init 및 preprocessing 문을 통해 사용자 정보를 안전하게 업데이트하는 방법을 보여줍니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();
// 준비하다 SQL 성명
if ($stmt->prepare("UPDATE users SET email = ? WHERE id = ?")) {
// 바인딩 매개 변수:s 문자열을 나타냅니다,i 정수를 나타냅니다
$stmt->bind_param("si", $email, $id);
// 매개 변수 값을 설정합니다
$email = "newemail@m66.net";
$id = 42;
// 执行성명
if ($stmt->execute()) {
echo "사용자 정보가 성공적으로 업데이트되었습니다!";
} else {
echo "업데이트가 실패했습니다: " . $stmt->error;
}
// 关闭성명
$stmt->close();
} else {
echo "SQL 준비하다失败: " . $stmt->error;
}
$mysqli->close();
?>
사용자가 업데이트 문에서 입력을 검증하더라도 SQL을 구성하는 문자열을 피하십시오. 전처리 명세서는 SQL 주입 공격을 효과적으로 방지 할 수 있습니다.
stmt_init () , repary () , bind_param () 및 execute () 와 같은 작업의 반환 값을 확인하십시오. 이렇게하면 문제를 조기에 감지하고 오류를 찾을 수 있습니다.
예외 모드를 활성화하여 오류 처리를 단순화 할 수 있습니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
활성화되면 오류가 예외가 발생하여 Try-Catch 구조를 사용하여 쉽게 잡을 수 있습니다.
명령문 객체를 사용할 때마다 $ stmt-> close ()를 호출하여 리소스가 해제되도록해야합니다.
매개 변수 수가 고정되지 않은 경우 Call_user_func_array ()를 사용하여 동적 매개 변수 바인딩을 구현할 수 있습니다. 이것은 배치 업데이트 또는 유연한 업데이트 문을 구축 할 때 매우 유용합니다.
하나의 작업에 여러 업데이트가 관련되면 트랜잭션 사용을 고려하십시오.
$mysqli->begin_transaction();
try {
// 다중 실행 update 작동하다
$stmt1 = $mysqli->prepare("UPDATE ...");
$stmt1->bind_param(...);
$stmt1->execute();
$stmt2 = $mysqli->prepare("UPDATE ...");
$stmt2->bind_param(...);
$stmt2->execute();
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
echo "거래에 실패했습니다: " . $e->getMessage();
}
mysqli :: stmt_init을 사용하여 업데이트 문을 실행하는 것은 PHP에서 데이터베이스를 작동하는 것이 좋습니다. 전처리 명세서를 사용하여 프로그램의 보안 및 유지 보수 가능성을 향상시킬 수 있습니다. 트랜잭션 및 오류 처리 메커니즘을 결합하면 전반적인 견고성을 더욱 향상시킬 수 있습니다.