2012-01-02 4 views
5

MySQLi를 사용하여 데이터베이스에서 여러 쿼리를 실행하려고합니다. 이건 내 코드입니다 : 그것은 그하지 그래서 내가, 데이터베이스 필드가 존재 함을 확인했다MySQLi에서 prepared statements false를 반환했습니다.

Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\ajax\login.php on line 42 

:

$stmt = $mysqli->prepare('SELECT password FROM `users` WHERE username=? LIMIT 1'); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($hashedPass); 
$stmt->fetch(); 

/* Check the passwords match */ 
$pwdHasher = new PasswordHash(8, FALSE); 
if(!$pwdHasher->CheckPassword($password, $hashedPass)) 
    exit; 

$stmt = $mysqli->prepare('SELECT u_id FROM `users` WHERE username=? LIMIT 1'); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
$stmt->bind_result($u_id); 
$stmt->fetch(); 

그러나 코드는 내가이 오류가 실행될 때. 첫 번째 쿼리가 작동하지만 두 번째 쿼리가 아닌 것 같습니다. 필자는 phpMyAdmin에서 자체적으로 쿼리를 실행 했으므로 성공적으로 결과 집합을 생성하므로 실제로 무엇이 잘못되었는지 알지 못합니다.

+0

'bind_param()'호출은 무엇입니까? 첫 번째 암호 또는'user_id' 필드의 두 번째 암호? 왜 단 하나의 쿼리 만 사용합니까? – Progman

답변

8

prepare 오류가 발생하면 false를 반환합니다. 시도하십시오

$stmt = $mysqli->prepare('SELECT u_id FROM `users` WHERE username=? LIMIT 1'); 
if ($stmt === FALSE) { 
    die ("Mysql Error: " . $mysqli->error); 
} 

및 일부 mysql 오류가 표시되어야합니다.

관련 문제