집 >데이터 베이스 >MySQL 튜토리얼 >내 PHP PDO 준비 문에서 '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!