준비된 진술은 PHP를 사용하여 MySQL과 상호 작용하는 응용 프로그램을 개발할 때 성능 및 보안을 향상시키는 일반적인 관행입니다. MySQLI_STMT :: 준비 메소드를 통해 SQL 문을 사전 컴파일하고 실행할 수있는 반면 MySQLI :: Debug는 SQL 문의 실행 프로세스를 디버그하고 분석하는 데 도움이 될 수 있습니다. 이 기사는이 두 가지 방법을 결합하여 사전 처리 진술의 실행 프로세스를 분석하는 방법을 자세히 소개합니다.
먼저이 두 가지 방법의 기본 개념을 이해해 봅시다.
mysqli :: debug :이 메소드는 MySQL 연결의 디버깅, 특히 SQL 쿼리의 상세한 실행 프로세스를 출력하는 데 사용됩니다. 개발자가 SQL 문의 실행 세부 사항을보고 데이터베이스 쿼리를 진단하고 조정하는 데 도움이됩니다.
mysqli_stmt :: 준비 :이 메소드는 SQL 문에 대한 템플릿을 준비하는 데 사용되므로 매개 변수를 전달하고 쿼리를 실행할 수 있습니다. 전처리 문을 사용하면 SQL 주입 공격을 방지하고 동일한 쿼리가 여러 번 실행될 때 성능이 향상됩니다.
mysqli :: debug 와 mysqli_stmt :: prepar를 결합함으로써 우리는 전처리 진술의 실행 프로세스를보다 명확하게 볼 수 있습니다. 다음은 이것을 달성하는 방법을 보여주는 간단한 예입니다.
<?php
// 시작 MySQLi 디버그
mysqli_report(MYSQLI_REPORT_ALL); // 시작所有错误报告
$link = new mysqli('localhost', 'username', 'password', 'database');
// 启用디버그模式
$link->debug('ON');
// 준비하다 SQL 성명
$stmt = $link->prepare("SELECT * FROM users WHERE email = ?");
if ($stmt === false) {
die('준비하다성명失败:' . $link->error);
}
// 바인딩 매개 변수
$email = 'example@m66.net';
$stmt->bind_param('s', $email);
// 쿼리를 실행하십시오
$stmt->execute();
// 关闭성명和连接
$stmt->close();
$link->close();
?>
디버그 모드 활성화 : MySQLI_REPORT (MySQLI_REPORT_ALL) 를 통해 MySQLI보고를 활성화하여 모든 MySQLI 오류 및 경고가 잡히고보고되도록합니다.
데이터베이스에 연결 : 새로운 mysqli ()를 사용하여 데이터베이스 연결을 만들고 디버그 모드를 활성화합니다.
준비 SQL 문 : repay () 메소드를 사용하여 SQL 문을 준비하십시오. 이 예에서 쿼리 문은 들어오는 이메일 주소를 기반으로 사용자 데이터를 검색합니다.
바인드 매개 변수 : bind_param ()을 통해 SQL 문에서 변수를 매개 변수 ( ? )에 바인딩합니다. 여기에서 쿼리의 이메일 필드에 $ 이메일을 바인딩합니다.
쿼리 실행 : Execute () 메서드를 호출하여 전처리 된 SQL 문을 실행하십시오.
디버그 출력 : Debug () 메소드의 도움으로 쿼리 실행 계획, 바인딩 매개 변수 등을 포함하여 SQL 쿼리 실행에 대한 자세한 정보를 볼 수 있습니다.
디버그 모드가 켜진 후 SQL 쿼리가 실행되면 MySQLI :: Debug는 많은 양의 디버깅 정보를 출력합니다. 다음과 같은 것을 표시합니다.
SQL 문의 실행 시간.
SQL 문의 실제 실행 내용 (매개 변수 포함).
쿼리의 실행 계획.
실행 중 오류 또는 경고.
예를 들어, 위 코드를 실행할 때 출력에는 다음과 같은 디버깅 정보가 포함될 수 있습니다.
MySQL Debug: (Server version: 5.7.34) Starting query: SELECT * FROM users WHERE email = 'example@m66.net'
이 디버그 출력을 통해 개발자는 SQL 문이 예상대로 실행되는지 여부와 성능 병목 현상 또는 오류가 있는지 확인할 수 있습니다.
mysqli :: debug 와 mysqli_stmt :: 결합 전처리 진술의 실행 프로세스를 분석 할 준비 : 특히 다음 시나리오에 적합합니다.
SQL 주입 감지 : 실행 된 SQL 문을 보면 전달 된 매개 변수가 올바르게 바인딩되고 악의적 인 입력이 없는지 확인하십시오.
성능 최적화 : 디버그 출력은 개발자가 SQL 쿼리의 실행 시간 및 실행 계획을 분석하여 성능 병목 현상을 식별하는 데 도움이 될 수 있습니다.
오류 문제 해결 : 정보를 디버깅하면 쿼리의 잠재적 오류 또는 경고가 표시되어 개발자가 문제를 신속하게 찾을 수 있도록 도와줍니다.
생산 환경에서주의해서 사용 : 생산 환경에서는 디버그 정보가 너무 많은 디버그 정보가 민감한 정보를 누출하고 성능에 영향을 줄 수 있으므로 디버그 모드를 끄는 것이 가장 좋습니다.
SQL 오류 처리 : 실제 애플리케이션에서 디버그 출력에 의존하기보다는 SQL 문 실행 결과를 올바르게 처리해야합니다.
mysqli :: debug 및 mysqli_stmt :: 준비를 사용하면 개발자가 전처리 진술의 실행 프로세스를 심도있게 이해하고 잠재적 인 문제를 즉시 발견하고 해결할 수 있습니다. 출력을 디버깅하여 SQL 쿼리의 동작을보다 정확하게 제어하고 응용 프로그램 성능 및 보안을 향상시킬 수 있습니다. 개발 및 디버깅 단계에서 이러한 도구의 합리적인 사용은 개발 효율성과 코드 품질을 크게 향상시킬 것입니다.