준비된 문을 디버깅하려고하지만 문제가 있습니다. 아래 스크립트를 사용하면 '테스트 1'과 '테스트 2'가 브라우저에 표시되지만 '테스트 3'은 표시되지 않습니다. my -> fetch() 문이 작동하지 않는 것 같습니다. 오류 없음.Prepared Statement; fetch() 또는 fetch_all()? While 문 관련 문제
if (empty($login_errors)) { // OK to proceed!
echo 'test one';
$pas = get_password_hash($p);
$loginQuery = $dbc->prepare("SELECT id, username, type FROM user WHERE (email=? AND pass=?)");
$loginQuery->bind_param('ss',$e,$pas);
$loginQuery->execute();
$loginQuery->bind_result($id,$username,$type);
echo 'test two';
while($loginQuery->fetch()){
echo 'test three';
$idRow = $id;
$usernameRow = $username;
$_SESSION['user_id'] = $idRow[0];
$_SESSION['username'] = $usernameRow[0];
}
echo 'test four';
}
내 첫번째 생각 선택되는 하나의 필드 (한 바인드 결과) ->fetch()
있을 때 사용하는 것이었다. 나는 을 사용했는데 ($loginQuery->bind_result($id,$username,$type);
) 3 개가 있지만 HTTP 500 오류가 다시 발생합니다.이 생각이 맞습니까? 하나의 fetch(), 많은 fetch_all()?
두 페치가 작동하지 않는 이유는 무엇입니까? 내 코드에 문제가있는 것을 볼 수 있습니까?
'test four'가 표시됩니다. 이는 쿼리가 데이터를 반환하지 않음을 나타냅니다. 이 같은
$q = "SELECT id, username, type, IF(date_expires >= NOW(), true, false) FROM user WHERE (email='$e' AND pass='" . get_password_hash($p) . "')";
$r = mysqli_query ($dbc, $q);
구문이 정확합니다. 왜 'echo'test four ';'* after *'를 추가하면 쿼리가 결과를 반환하지 않음을 나타낼까요? 그 여분의 테스트가 보이지 않는다면 스크립트가 자동으로 죽어 가고'error_reporting'을 켜거나/켜야 함을 의미합니다. 또한 최소한'prepare()'와'execute()'에 대한 반환 값을 확인해야하며, 스크립트 실행을 중단하지 않고 실패 할 수 있습니다. – Sammitch
감사합니다. 'test four'가 표시되며 SQL 쿼리 결과가 표시되지 않습니다. 내 초기 준비되지 않은 성명서 (아래)가 잘 작동했기 때문에 이것은 혼란 스럽습니다.업데이트 된 작업을 포함하도록 질문을 수정했습니다. – DVCITIS