질문:
다음을 사용하여 매개변수를 WHERE IN 절에 바인딩하려고 할 때 PDO의 경우 매개변수화 없이 수동으로 값을 삽입할 때와 달리 결과 개수는 항상 1입니다. 이러한 불일치의 원인은 무엇입니까?
코드:
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount();
답변:
안타깝게도 PHP 데이터 개체 (PDO)는 IN 절에 대한 바인딩 매개변수를 직접 지원하지 않습니다. $myArray 배열은 다음 SQL과 유사한 단일 문자열로 처리됩니다.
SELECT foo FROM bar WHERE ids IN ('1,2,3')
쉼표로 구분된 여러 값이 있음에도 불구하고 데이터베이스는 이를 하나의 문자열 값으로 해석합니다.
원하는 동작을 얻으려면 다음과 같이 IN 절을 쿼리에 수동으로 삽입해야 합니다.
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
안타깝지만, 현재로서는 PDO의 IN 절에 매개변수 바인딩을 위한 대체 메커니즘이 없습니다.
위 내용은 매개변수를 WHERE IN 절에 바인딩할 때 PDO가 하나의 행만 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!