복붙노트

[SQL] PDO SQL 상태 "00000"하지만 여전히 오류? [복제]

SQL

PDO SQL 상태 "00000"하지만 여전히 오류? [복제]

아무도 그 이유를 설명 할 수

$sql->execute($params);

반환 FALSE 반면,

print $pdo->errorCode();
print_r($pdo->errorInfo());

두 수단이 문서의 성공에 따라 SQLSTATE 00000을 반환? 너무, 왜 SQLSTATE에서 성공 메시지를받을 수 있나요 ...는 INSERT 아무것도 실제로 데이터베이스에 삽입되는입니까?

그것이 도움이 경우,이 코드는 ...

$sql = $pdo->prepare("
        INSERT INTO user (
            username, fname, pass, salt, email,
            loc_id_home, country_id_home, region_id_home,
            cont_id_home, timestamp_reg, timestamp_upd, timestamp_lastonline, 
            online_status, gender, birthdate
            )
        VALUES (
            :username,:fname,:pass,:random_salt,:email,
            :loc_id_home,:country_id_home,:region_id_home,
            :cont_id_home,'".time()."','".time()."','".time()."',
            1,:gender,:birthdate)
        ");

$params=array(
    ':username'=>$username,
    ':fname'=>$fname,
    ':pass'=>$pass,
    ':random_salt'=>$random_salt,
    ':email'=>$email,
    ':loc_id_home'=>$loc_id_home,
    ':country_id_home'=>$country,
    ':region_id_home'=>$region,
    ':cont_id_home'=>$continent,
    ':gender'=>$gender,
    ':birthdate'=>$birthdate
);  

$sql->execute($params);

print $pdo->errorCode();
print_r($pdo->errorInfo());

해결법

  1. ==============================

    1.$ pdo-> ERRORINFO ()가 성공적으로 실행 된 마지막 문장을 의미하기 때문이다. $ 이후 SQL-> 거짓 ()가 반환을 실행, 그것은 (아무것도 또는 쿼리 이전에 하나) 그 진술을 참조 할 수 없습니다.

    $ pdo-> ERRORINFO ()가 성공적으로 실행 된 마지막 문장을 의미하기 때문이다. $ 이후 SQL-> 거짓 ()가 반환을 실행, 그것은 (아무것도 또는 쿼리 이전에 하나) 그 진술을 참조 할 수 없습니다.

    $는 SQL-> ()는 false를 반환 실행하는 이유에 관해서는, 나도 몰라 ... 중 하나가 당신의 $ 문제는 배열을 PARAMS 또는 데이터베이스 연결.

    참고 : PHP 설명서는 (http://php.net/manual/en/pdo.errorinfo.php) 수단 정확히 "데이터베이스 핸들 마지막 작업"을 정의하지 않지만, 바인딩 매개 변수에 문제가 발생했을 경우, 그 오류가 PDO 내부 데이터베이스와의 상호 작용없이 발생했을 것입니다. $ pdo-> ERRORINFO ()가 유효한지, true를 돌려) $가 pdo-> (실행하면라고하는 것이 안전합니다. $가 pdo->) (실행 false를 돌려주는 경우, $ pdo-> ERRORINFO의 동작은 () 명시 적으로 문서에서 삭제되지 않습니다. 내 경험에서 올바르게 기억, MySQL은 어떤 작업이 수행되지 않은 경우 false를 반환 오류를 반환하는 경우에도, 진정한 반환을 실행합니다. 문서를 특정하지 않기 때문에, 그것은 DB 드라이버 특정 될 수 있습니다.

    사용자가 지적했듯이이 대답은 문서가 명시 적으로 해석을 재확인하지 않습니다, 그것은 2012 년 9 월에 작성되었을 때의 같은 실제적인 경험을 반영한다. 또한 단지 특정 데이터베이스 드라이버 구현을 반영 할 수 있지만, 항상 $이 pdo->) (실행하는 경우는 $ pdo-> ERRORINFO ()가 유효한지, true를 돌려주는 것은 사실이어야한다.

    또한 세트 PDO를 할 수 있습니다 : 당신의 연결 순서 ERRMODE_EXCEPTION을. 예외 처리는 불필요 확인하고 오류를 조회 할 수 있습니다.

    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    
  2. ==============================

    2.내가 직면 유사한 문제,

    내가 직면 유사한 문제,

    이 남자 다운 인해 쿼리 오류로, PHP - myadmin하거나 쿼리 구문이 null을 떠나거나 열을 mentioan하지 같은 올바른 다른 간단한 오류 인 경우 쿼리가 fine.Even를 작동하는지 다른 쿼리 주자 및 확인에 쿼리를 실행하려고 발생 세트로 테이블 구조에 NOT NULL이 오류가 발생할 것입니다. (이 날에 의해 만들어진 errror했다)

    user1122069가) ($ pdo-> ERRORINFO에 대한 이유를 설명 말했듯이 아무 잘못이 원인 일 수 있습니다입니다

    이 도움이 희망 :)

  3. ==============================

    3.PHP 매뉴얼에서 :

    PHP 매뉴얼에서 :

    PDO :: ERR_NONE (문자열) SQL 문이 성공적으로 오류나 경고와 함께 발행 된 것을 의미 SQLSTATE '00000'에 해당한다. 에러가 발생하면 결정하기 위해 PDO :: errorCode를 () 또는 PDOStatement :: errorCode를 (을) 검사 할 때이 상수는 사용자의 편의를위한 것입니다. 이 어쨌든 오류 상태를 제기하는 방법의 반환 코드를 검사하여 인 경우에 당신은 일반적으로 알 수 있습니다.

    이 기록에 삽입했던 것처럼 그래서 소리. 테이블에서 마지막 레코드 ID를 확인 ... 어쩌면 당신은 단지 그것을 놓친?

  4. ==============================

    4.나는 한 번에이 오류가 발생했다. 난 단지 모든 오류에 대한 하나 개의 서버에 있어요. 다른 서버는 동일한 오류를 올바르게 오류를보고합니다. 즉, MySQL의 클라이언트 구성 오류했습니다 믿고 나를 이끌었다. 나는 특정 오류를 해결 없지만, 당신의 구성을 확인 않았다.

    나는 한 번에이 오류가 발생했다. 난 단지 모든 오류에 대한 하나 개의 서버에 있어요. 다른 서버는 동일한 오류를 올바르게 오류를보고합니다. 즉, MySQL의 클라이언트 구성 오류했습니다 믿고 나를 이끌었다. 나는 특정 오류를 해결 없지만, 당신의 구성을 확인 않았다.

  5. ==============================

    5.다음에 phpMyAdmin에 결과 쿼리를 시도 인 print_r하여 $ SQL ()을 확인하고 쿼리를 복사하려고합니다. 희망은 이유를 얻을 것이다. 관련이없는 값의 기회가 될 것입니다.

    다음에 phpMyAdmin에 결과 쿼리를 시도 인 print_r하여 $ SQL ()을 확인하고 쿼리를 복사하려고합니다. 희망은 이유를 얻을 것이다. 관련이없는 값의 기회가 될 것입니다.

  6. from https://stackoverflow.com/questions/11519966/pdo-sql-state-00000-but-still-error by cc-by-sa and MIT license