>백엔드 개발 >PHP 튜토리얼 >다중 삽입 쿼리가 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'로 인해 실패하는 이유는 무엇입니까?

다중 삽입 쿼리가 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'로 인해 실패하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 02:09:13207검색

Why Does My Multiple Insert Query Fail with

"다중 삽입 쿼리를 준비하는 중 오류 발생"

다중 삽입 쿼리를 실행하려고 하면 "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를 채우기 전에 빈 배열을 초기화했는지 확인하세요. 이렇게 하면 자리 표시자 값 수가 삽입되는 데이터 요소 수와 일치합니다.

추가 고려 사항:

  • 해시 열에 고유 인덱스가 있는지 확인하세요. 중복 항목을 방지합니다.
  • 준비 및 실행 대신 준비된 문($stmt)을 사용합니다. 방법.

수정된 코드 예:

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.