현재 위치: > 최신 기사 목록> pdostatement :: execute ()를 호출하기 전에 어떤 주요 지식을 알아야합니까? 일반적인 실수를 피하는 방법은 무엇입니까?

pdostatement :: execute ()를 호출하기 전에 어떤 주요 지식을 알아야합니까? 일반적인 실수를 피하는 방법은 무엇입니까?

gitbox 2025-08-04

1. PDO 소개 및 전처리 진술

PDO (PHP Data Objects)는 다중 데이터베이스 관리 시스템 (DBMS)과 통합 방식으로 상호 작용할 수있는 데이터베이스에 액세스하는 인터페이스입니다. PDO를 사용하는 주요 기능은 준비된 문을 통해 쿼리를 실행하는 기능입니다. 이 접근법은 성능을 향상시킬뿐만 아니라 SQL 주입 공격을 효과적으로 방지합니다.

전처리 진술의 실행은 일반적으로 두 단계로 나뉩니다.

  1. 사전 컴파일 : SQL 문을 사용하여 쿼리에서 PDOSTATEMENT 객체를 생성하고 사전 컴파일 매개 변수 자리 표시자를 생성합니다.

  2. 실행 : 자리 표시 자 대신 실제 데이터를 사용하여 execute () 메소드를 호출하여 쿼리를 실행합니다.

 <span><span><span class="hljs-comment">// 만들다 PDO 예</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=test'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);

</span><span><span class="hljs-comment">// 사전 컴파일 SQL 성명</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);

</span><span><span class="hljs-comment">// 매개 변수를 바인딩하고 쿼리를 실행하십시오</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
</span></span>

2. 매개 변수 바인딩 및 자리 표시 자

execute ()를 호출하기 전에 매개 변수 바인딩을 사용하는 방법을 이해하는 것이 매우 중요합니다. PDO는 두 공통 자리 표시자를 제공합니다.

  • 이름이 지정된 장소 보유자 : 예를 들어 : ID , 코드의 가독성과 유지 관리를 향상시킬 수 있습니다.

  • 질문 마크 자리 표시 자 : 예를 들어 , 위치를 통해 매개 변수를 바인딩합니다.

 <span><span><span class="hljs-comment">// 지명 된 자리 표시자를 사용합니다</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);

</span><span><span class="hljs-comment">// 물음표 자리 소유자를 사용하십시오</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-number">1</span></span><span>]);
</span></span>

3. 오류 처리

Execute ()를 호출 할 때 오류 처리가 특히 중요합니다. PDO는 기본적으로 경고 형태로 오류를 던지지 만 PDO :: Attr_erRMode를 설정하여 동작을 예외로 변경할 수 있습니다. 프로그램의 견고성을 보장하려면 오류 처리에 예외 모드를 사용하는 것이 좋습니다.

 <span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=test'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);
</span></span>

이러한 방식으로, 실행 중에 오류가 발생하면 (예 : SQL 오류 또는 매개 변수 바인딩 문제) PDO는 프로그래머가 잡아서 처리 할 수있는 예외를 던집니다.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

4. 매개 변수 유형의 올바른 사용

Execute () 메소드에 전달 된 매개 변수가 SQL 문의 데이터 유형과 일치하는지 확인하십시오. 예를 들어, 데이터베이스 테이블의 필드가 정수 유형 인 경우 파라미터를 바인딩 할 때 정수 유형의 데이터도 전달되어야합니다.

 <span><span><span class="hljs-comment">// 실수:정수 대신 문자열을 통과하십시오</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-string">'one'</span></span><span>]);

</span><span><span class="hljs-comment">// 옳은:传递옳은的数据类型</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
</span></span>

5. 여러 번 실행할 때 주목해야 할 사항

때로는 결합 매개 변수가 다르다는 점을 제외하고 동일한 SQL 문을 여러 번 실행해야합니다. 이 경우 execute ()를 사용하여 각 쿼리를 다른 매개 변수로 반복적으로 실행할 수 있지만, 실행 ()가 실행 될 때마다 이전 바인딩 정보를 지우는 것입니다. 따라서 동일한 SQL을 여러 번 실행할 때 매번 매개 변수를 다시 반드하는 것이 좋습니다.

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE age = :age"</span></span><span>);

</span><span><span class="hljs-variable">$ages</span></span><span> = [</span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, </span><span><span class="hljs-number">40</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$ages</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$age</span></span><span>) {
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-variable">$age</span></span><span>]);
    </span><span><span class="hljs-comment">// 처리 결과</span></span><span>
}
</span></span>

6. execute ()는 값을 반환하고 결과를 얻습니다

execute () 메소드의 리턴 값은 쿼리가 성공했는지 여부를 나타냅니다. 선택 쿼리의 경우 일반적으로 쿼리 결과를 얻으려면 Fetch 또는 FetchAll 메소드를 사용해야합니다.

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = :id"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>([</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);

</span><span><span class="hljs-comment">// 단일 라인 결과를 얻으십시오</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);

</span><span><span class="hljs-comment">// 모든 결과를 얻으십시오</span></span><span>
</span><span><span class="hljs-variable">$results</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetchAll</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);
</span></span>

execute () 는 쿼리 결과를 자동으로 반환하지 않습니다. SQL 문을 실행할 책임이 있으며 실제 결과 획득은 후속 Fetch 또는 Fetchall을 통해 전달되어야합니다.

7. Execute ()를 호출하기위한 일반적인 오류 및 회피 방법

execute ()를 사용하는 경우 프로그래머는 다음과 같은 일반적인 오류가 발생하기 쉽습니다.

  • 매개 변수 유형 불일치 : SQL의 데이터 유형이 바운드 매개 변수의 데이터 유형과 일치하는지 확인하십시오.

  • 매개 변수 바인딩을 잊어 버렸습니다 . Execute ()를 실행할 때 모든 자리 표시 자의 매개 변수를 바인딩하는 것을 잊어 버리면 오류가 발생할 수 있습니다. SQL 문 및 execute () 매개 변수가 하나씩 해당하는지 확인하십시오.

  • 잘못된 SQL 구문 : 특히 자리 표시자를 사용할 때 SQL 구문이 올바른지 확인하십시오.

  • execute ()를 여러 번 호출 할 때 매개 변수를 잊어 버렸습니다 .

이러한 문제를 피하려면 Execute ()를 호출하기 전에 SQL 문, 매개 변수 바인딩 및 데이터 유형을 신중하게 확인하는 것이 좋습니다.

요약

pdostatement :: execute ()를 호출하기 전에 전처리 문의 작동 원리, 매개 변수 바인딩 방법, 오류 처리 및 매개 변수 유형의 사용을 이해하는 것이 매우 중요합니다. 이 지식을 마스터하면 코드의 보안 및 성능을 향상시킬 수있을뿐만 아니라 일반적인 오류의 발생을 줄이고 코드의 유지 관리 가능성을 향상시킬 수 있습니다. 이러한 오류를 피함으로써 개발자는보다 효율적이고 강력한 데이터베이스 작업 코드를 작성할 수 있습니다.