2014-09-05 102 views
0

我有一個mysql查詢,我用來登錄到數據庫,但由於某種原因,它返回-1,即使我把正確的值和相同的查詢執行沒有bind_param使用綁定參數時mysqli執行失敗

$username = $_POST['username']; 
$password = md5($_POST['password']); 
$user_array = array('username' => $username,'password' => $password); 
$queryname = "SELECT username, password FROM user WHERE username = ? AND password = ?"; 

function auth($queryname,$user_array) { 
     $stmt = $this->connection->prepare($queryname); 
     $stmt->bind_param('ss', $user, $pass); 
     $user=$user_array['username']; 
     $pass=$user_array['password']; 
     $stmt->execute();  
     return $stmt->affected_rows;   
    } 

任何關於如何調試的建議?

+0

我已經做,現在 – Bazinga777 2014-09-05 06:03:19

+0

從[手動](http://php.net/manual/mysqli-stmt.affected-rows.php)〜* 「-1表示查詢返回錯誤」*。此外,一個'SELECT'查詢是**永遠**不會導致'affected_rows' – Phil 2014-09-05 06:11:10

+0

@Phil我的bind_param中可能會有任何錯誤我使用md5哈希文本,它存儲爲varchar – Bazinga777 2014-09-05 06:12:06

回答

1

$stmt->affected_rows returns the total number of rows changed, deleted, or inserted

此功能只能查詢工作,其更新的表。爲了從SELECT查詢中獲取行數,請改爲使用mysqli_stmt_num_rows()

更改return $stmt->affected_rows;到:

$stmt->store_result(); 
$count = $stmt->num_rows; 
$stmt->close(); 
return $count; 
+0

謝謝,那工作 – Bazinga777 2014-09-05 06:19:59

+1

@ Bazinga777你也必須關閉$ stmt:看到修改後的代碼 – Rimas 2014-09-05 06:24:58

+0

我已經這樣做了,謝謝 – Bazinga777 2014-09-05 06:46:00