> 데이터 베이스 > MySQL 튜토리얼 > PDO 준비문에서 바인딩된 매개변수를 재사용하는 방법은 무엇입니까?

PDO 준비문에서 바인딩된 매개변수를 재사용하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-13 09:39:44
원래의
885명이 탐색했습니다.

How to Reuse Bound Parameters in PDO Prepared Statements?

PDO 준비된 명령문에서 바인딩된 매개변수 재사용: 두 가지 접근 방식

정교한 데이터베이스 쿼리를 구축하려면 SQL 주입 취약점으로부터 보호하기 위해 명명된 바인딩 매개변수를 사용해야 하는 경우가 많습니다. 그러나 PDO는 일반적으로 단일 준비된 문 내에서 동일한 명명된 매개 변수의 재사용을 제한합니다. 이 제한은 두 가지 기본 방법을 사용하여 극복할 수 있습니다.

방법 1: 동적 매개변수 이름 바꾸기

이 접근 방식에는 반복되는 매개 변수 이름(예: ":term")이 모두 고유한 매개 변수 이름(예: ":term0", ":term1" 등)으로 바뀌도록 쿼리 문자열을 동적으로 변경하는 방법이 포함됩니다. 이렇게 하면 바인딩 시 각 매개변수를 고유하게 식별할 수 있습니다.

<code class="language-php">$query = preg_replace_callback('/\:term/', function ($matches) use (&$termX) { $termX++; return $matches[0] . ($termX - 1); }, $query);
$stmt = $pdo->prepare($query);
for ($i = 0; $i < $termX; $i++) {
    $stmt->bindValue(":term$i", "%$term%", PDO::PARAM_STR);
}</code>
로그인 후 복사

방법 2: MySQL 사용자 정의 변수 활용

MySQL의 사용자 정의 변수는 대체 솔루션을 제공합니다. 먼저 변수를 원하는 값으로 설정하면 SELECT 문 내에서 해당 변수를 재사용할 수 있으므로 여러 매개변수 바인딩이 필요하지 않습니다.

<code class="language-php">$sql = "SET @term = :term";
try {
    $stmt = $dbh->prepare($sql);
    $stmt->bindValue(":term", "%$term%", PDO::PARAM_STR);
    $stmt->execute();
} catch (PDOException $e) {
    // error handling
}

$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term";
try {
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
} catch (PDOException $e) {
    // error handling
}</code>
로그인 후 복사

이 방법은 사용자 정의 변수를 초기화하기 위해 추가 쿼리가 필요하지만 코드 가독성을 높이고 매개변수 바인딩을 단순화합니다. 이러한 방법 중 선택은 애플리케이션의 특정 요구 사항과 코드 명확성과 실행 효율성에 대한 선호도에 따라 달라집니다.

위 내용은 PDO 준비문에서 바인딩된 매개변수를 재사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿