내 PHP PDO 준비 명령문에서 \'잘못된 매개변수 번호\' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-25 09:25:18
원래의
158명이 탐색했습니다.

Why Does My PHP PDO Prepared Statement Throw an

PHP PDO에서 잘못된 매개변수 번호 오류

PDO를 사용하여 준비된 명령문을 실행하려고 하면 "SQLSTATE[HY093" 오류가 발생할 수 있습니다. ]: 잘못된 매개변수 번호입니다." 이 문제는 매개변수 마커의 잘못된 사용으로 인해 발생합니다.

제공된 add_persist 함수는 다음과 같은 준비된 명령문을 사용합니다.

INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash
로그인 후 복사

execute() 메서드를 사용하여 매개변수 값을 바인딩할 때 함수는 다음 값을 사용합니다.

["user_id" => $user_id, "hash" => $hash, "expire" => $future]
로그인 후 복사

그러나 준비된 명령문에는 PDO에서 허용되지 않는 해시에 대한 중복 매개변수 표시가 포함되어 있습니다. 이 문제를 해결하려면 전달되는 각 값에 고유한 매개변수 표시자를 할당해야 합니다.

수정된 코드는 다음과 같습니다.

$sql = "INSERT INTO persist (user_id, hash, expire)
        VALUES (:user_id, :hash, :expire)
        ON DUPLICATE KEY UPDATE hash=:hash2";

$stm = $db->prepare($sql);

$stm->execute(
    array("user_id" => $user_id, 
          "hash" => $hash, 
          "expire" => $future,
          "hash2" => $hash)
);
로그인 후 복사

추가 매개변수 :hash2를 사용하면 준비된 명령문에 매개변수 표시자가 중복되어 오류가 해결되었습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿