집 >데이터 베이스 >MySQL 튜토리얼 >SQLSTATE[HY000]: 일반 오류: PDO에서 2031이 발생하는 원인은 무엇입니까?
오류: PDO 오류: SQLSTATE[HY000]: 일반 오류: 2031
이 오류는 매개변수에 문제가 있음을 나타냅니다. SQL 쿼리. 이 경우 LIMIT 자리 표시자를 쿼리에 수동으로 추가하는 데 사용되는 바인딩값() 메서드에 문제가 있는 것으로 보입니다.
다음 코드가 오류를 일으키는 원인입니다.
<code class="php">if ($limit) { $sth->bindValue(':page', $page - 1, PDO::PARAM_INT); $sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT); }</code>
이 오류는 쿼리를 실행하기 전에 바인딩값()을 사용하여 바인딩해야 하는 자리 표시자(:page 및 :entries_per_page)가 쿼리에 포함되어 있기 때문에 발생합니다. 그러나 LIMIT 자리 표시자를 바인딩하기 위해 binValue()를 사용하기 전에 엔진은 이를 문자열로 변환합니다. 이 문제를 해결하려면 다음 코드를 사용할 수 있습니다.
<code class="php">if ($limit) { $query = str_replace(':page', $page - 1, $query); $query = str_replace(':entries_per_page', $page * $entries_per_page, $query); $sth->execute($criteria); }</code>
이 코드는 쿼리를 실행하기 전에 쿼리의 자리 표시자를 해당 값으로 바꿉니다.
중복에 주의하세요. 매개변수 이름
두 값을 동일한 매개변수 이름에 바인딩하면 오류 2031이 발생할 수도 있다는 점에 유의하는 것이 중요합니다. 예:
<code class="php">$sth->bindValue(':colour', 'blue'); $sth->bindValue(':colour', 'red');</code>
동일한 매개변수 이름을 두 번 사용하면 오류가 발생합니다. 따라서 각 매개변수 이름이 고유한지 확인하는 것이 중요합니다.
위 내용은 SQLSTATE[HY000]: 일반 오류: PDO에서 2031이 발생하는 원인은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!