복붙노트

내 PDO 진술서가 작동하지 않습니다.

PHP

내 PDO 진술서가 작동하지 않습니다.

이것은 내 PHP SQL 문이며, var dumping 동안 false를 반환합니다.

$password_md5 = md5($_GET['password']);
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)');
$result = $sql->execute(array(
                    ':fullname' => $_GET['fullname'], 
                    ':email' => $_GET['email'], 
                    ':username' => $_GET['username'],
                    ':password' => $password_md5,
                    ':password_plain' => $_GET['password']));

해결법

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

    1.

    PDO 문이 FALSE를 반환하면 쿼리가 실패했음을 의미합니다. 오류를 인식하려면 적절한 오류보고 모드에서 PDO를 설정해야합니다.

    연결 한 직후에이 줄을 코드에 넣으십시오.

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

    오류 메시지를받은 후에는 읽고 이해해야합니다. 너무 분명하게 들리지만 학습자는 종종 오류 메시지의 극단적 인 유용성을 간과합니다. 그러나 대부분의 경우 문제를 매우 간단하게 설명합니다. 예를 들어, 특정 테이블이 존재하지 않는다고 말하면 철자, 오타, 대소 문자, 자격 증명 등을 확인해야합니다. 또는 SQL 구문에 오류가 있다고 표시되면 SQL을 검사해야합니다. 문제 지점은 오류 메시지에 인용 된 쿼리 부분 바로 앞에 있습니다.

    또한 오류 메시지를 신뢰해야합니다. 토큰 수가 바인딩 된 변수의 수와 일치하지 않는다고 말하면 그렇습니다. 결석 한 테이블이나 열에 대해서도 마찬가지입니다. 선택의 여지가 그것이 자신의 실수이든 오류 메시지이든 상관없이 항상 전의 것을 고수하십시오. 다시 말하지만,이 사이트의 수많은 질문은이 조언이 매우 유용하다는 것을 증명합니다.

    PDO 오류를 보려면 PHP 오류를 일반적으로 볼 수 있어야합니다. 이렇게하려면 사이트 환경에 따라 PHP를 구성해야합니다.

    error_reporting은 항상 E_ALL로 설정되어야합니다.

    또한 일반적인 망상에도 불구하고 오류보고를 위해 try-catch를 사용하지 않아야합니다. PHP는 PDO 오류를 이미보고하고 더 나은 방식으로보고합니다. catch되지 않는 예외는 개발에 매우 ​​유용하지만 사용자 정의 된 오류 페이지를 표시하려는 경우 여전히 try catch를 사용하지 않고 사용자 정의 오류 처리기 만 설정하면됩니다. 요컨대, PDO 오류를 특별한 것으로 처리 할 필요는 없지만이를 코드의 다른 오류로 간주 할 수 있습니다.

  2. from https://stackoverflow.com/questions/32648371/my-pdo-statement-doesnt-work by cc-by-sa and MIT lisence