집 >데이터 베이스 >MySQL 튜토리얼 >PDO 준비문에서 바인딩된 매개변수를 재사용하는 방법은 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!