데이터베이스 쿼리는 PHP 응용 프로그램을 개발할 때 가장 일반적인 작업 중 하나입니다. 특히 큰 데이터 볼륨을 다룰 때 쿼리 효율성을 향상시키는 방법이 우리의 초점입니다. PHP에서는 MySQLI 확장을 사용하여 데이터베이스 쿼리를 실행하는 것이 매우 일반적이며 MySQli :: STMT_Init은 전처리 진술을 실행하여 쿼리 효율성 및 보안을 개선하는 데 도움이되는 훌륭한 도구입니다.
이 기사는 MySQLI :: STMT_INIT를 통해 효율적인 키워드 퍼지 검색을 달성하는 방법, 특히 SQL에서 유사한 키워드를 사용하여 쿼리하는 방법을 소개합니다.
PHP에서 MySQLI는 MySQLI :: STMT_INIT 메소드를 제공하여 전처리 문을 초기화합니다. 이는 SQL 쿼리가 사전 컴파일 된 다음 바인딩 파라미터에 의해 실행되고 SQL 주입의 위험을 피할 수 있음을 의미합니다. 전처리 명세서는 보안을 제공 할뿐만 아니라 동일한 쿼리를 실행할 때 더 나은 성능을 제공합니다.
$stmt = $mysqli->stmt_init();
마찬가지로 키워드는 종종 SQL에서 퍼지 쿼리를 구현하는 데 사용됩니다. 일반적으로 특정 패턴과 일치하는 문자열을 찾는 데 사용됩니다. 퍼지 쿼리에서 %는 모든 문자 (제로 문자 포함)를 나타내고 _ 는 단일 문자를 나타냅니다.
예를 들어:
SELECT * FROM users WHERE username LIKE '%admin%';
이 쿼리는 관리자가 포함 된 모든 레코드를 사용자 이름 으로 반환합니다.
다음으로 MySQLI :: STMT_INIT를 사용하여 효율적인 키워드 퍼지 검색을 구현하는 방법을 보여 드리겠습니다. 데이터베이스에서 사용자를 찾아야한다고 가정하고 검색 기준에는 사용자 이름에 특정 키워드가 포함되어 있다고 가정합니다.
먼저 데이터베이스에 연결해야합니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
우리는 mysqli :: stmt_init를 사용하여 전처리 명령문 개체를 초기화합니다.
$stmt = $mysqli->stmt_init();
다음으로 퍼지 쿼리와 같이 사용하십시오. 우리는 사용합니까 ? SQL 주입 문제를 피하기위한 매개 변수 대신 :
$sql = "SELECT * FROM users WHERE username LIKE ?";
사용자가 입력 한 검색 키워드 를 SQL 문서에서 Fuzzy Match를 표시하기 위해 Like Query에 %를 추가합니다.
$searchKeyword = "%$keyword%"; // 사용자가 입력 한 키워드,전후에 백분율 부호를 추가하십시오
$stmt->prepare($sql);
$stmt->bind_param("s", $searchKeyword); // "s" 문자열 유형을 바인딩하는 매개 변수
쿼리를 실행하고 결과를 얻으십시오.
$stmt->execute();
$result = $stmt->get_result();
예를 들어 get_result () 를 통해 쿼리 결과를 가져 와서 처리하여 결과를 브라우저에 출력하십시오.
while ($row = $result->fetch_assoc()) {
echo "User ID: " . $row['id'] . " - Username: " . $row['username'] . "<br>";
}
쿼리가 완료되면 데이터베이스 연결을 닫는 것을 잊지 마십시오.
$stmt->close();
$mysqli->close();
mysqli :: stmt_init 및 preprocessing 문을 사용하면 SQL 주입을 효과적으로 방지하고 쿼리 성능을 향상시킬 수 있습니다. 특히 퍼지 쿼리에 Like For Like를 사용할 때 전처리 명세서를 사용하면 쿼리를 사용자가 입력 한 데이터와 분리하여 보안 및 효율성을 높일 수 있습니다.
또한 일부 시나리오에서는 쿼리 와 마찬가지로 매우 유용하지만 퍼지 쿼리는 많은 양의 데이터를 처리 할 때 성능 문제를 일으킬 수 있습니다. 데이터베이스 인덱싱 또는 기타 최적화 측정을 통해 쿼리 효율성을 더욱 향상시키는 것을 고려할 수 있습니다.