>데이터 베이스 >MySQL 튜토리얼 >내 PHP PDO 준비 문에서 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'가 발생하는 이유는 무엇입니까?

내 PHP PDO 준비 문에서 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-16 08:48:16865검색

Why Does My PHP PDO Prepared Statement Throw

PHP PDOException: "SQLSTATE[HY093]: 잘못된 매개변수 번호"

PHP PDOException 디버깅은 특히 다음과 같은 경우 어려울 수 있습니다. "SQLSTATE[HY093]: 잘못된 매개변수 번호" 오류가 발생했습니다. 이 오류는 종종 준비된 문에서 명명된 매개 변수가 잘못 사용되었음을 나타냅니다.

다음 PHP 코드를 고려하세요.

function add_persist($db, $user_id) {
    $hash = md5("per11".$user_id."sist11".time());
    $future = time()+(60*60*24*14);
    $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";
    $stm = $db->prepare($sql);
    $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future));
    return $hash;
}

이 함수를 실행할 때 "SQLSTATE[HY093]: Invalid" 오류가 발생합니다. 매개변수 번호"가 발생할 수 있습니다. 근본 원인은 Execute() 메서드가 호출되는 줄에 있습니다. 특히 ON DUPLICATE KEY UPDATE hash=:hash 절은 삽입 및 업데이트 작업 모두에 동일한 매개변수 이름 ":hash"를 사용합니다.

이 문제를 해결하려면 고유한 매개변수 이름을 제공해야 합니다. 업데이트 절의 해시 값에 대한 것입니다. 수정된 코드는 다음과 같습니다.

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
$stm->execute(
    array(":user_id" => $user_id, 
          ":hash" => $hash, 
          ":expire" => $future,
          ":hash2" => $hash)
);

업데이트 절의 해시 값에 고유한 매개 변수 이름 ":hash2"를 제공하면 "SQLSTATE[HY093]: 잘못된 매개 변수 번호" 오류를 해결할 수 있습니다. 이렇게 하면 PDO 드라이버가 매개변수를 준비된 SQL 문에 올바르게 매핑할 수 있습니다.

위 내용은 내 PHP PDO 준비 문에서 'SQLSTATE[HY093]: 잘못된 매개 변수 번호'가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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