다중 삽입 쿼리를 실행하려고 하면 "SQLSTATE[HY093]: 잘못된 매개 변수"와 같은 오류가 발생할 수 있습니다. 번호: 매개변수가 정의되지 않았습니다." 이 오류는 쿼리의 자리 표시자 값(?) 수가 전달되는 매개 변수 수와 일치하지 않을 때 발생합니다.
다음 코드 예제를 고려하세요.
// BUILD VALUES $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash"); $q->execute($matches);
이 시나리오에서 , 실행이 호출되기 직전에 count($matches)가 count($values)와 동일하기 때문에 당황할 수 있습니다. 그러나 오류는 지속됩니다.
기본 문제:
$values를 자리 표시자 값으로 채우기 전에 기존 값으로 초기화할 때 기본 문제가 발생합니다. 결과적으로 개수 불일치가 발생합니다.
해결책:
이 오류를 해결하려면 루프 내에 $value를 채우기 전에 빈 배열을 초기화했는지 확인하세요. 이렇게 하면 자리 표시자 값 수가 삽입되는 데이터 요소 수와 일치합니다.
추가 고려 사항:
수정된 코드 예:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches);
위 내용은 다중 삽입 쿼리가 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'로 인해 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!