2013-07-24 34 views
0

我有以下代碼:mysqli的預處理語句似乎不工作

<?php 
if(!empty($_POST)){ 
    $db = new mysqli('localhost', 'root', '', 'verif1'); 
    $password = $_POST['pass']; 
    $username = $_POST['user']; 
     $table = "admins"; 
    $password = hash("sha256", $password); 
    $statement = $db->prepare("SELECT COUNT(*) FROM {$table} WHERE username = ? AND password = ?"); 
    $statement->bind_param("ss", $username, $password); 
    $statement->execute(); 
    $statement->bind_result($numrows); 
    if($numrows == 1){ 
     echo "yeah correct!<br>"; 
    }else{ 
     echo "No :(<br>"; 
    } 
} 


?> 

<form action="" method="POST"> 
    <input type="textbox" name="user"> 
    <br> 
    <input type="password" name="pass"> 
     <br> 
    <input type="submit"> 
</form> 

我敢肯定,這一切都是正確的(沒有錯誤投擲,沒有),它只是不工作! 我試過的print_r()來查看已返回的反對,我得到這個: 的執行(之​​後)我這樣做:

print_r($statement); 
die(); 

,這讓我這個:

mysqli_stmt對象( [affected_rows] => -1 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 1 [errno] => 0 [error] => [error_list] => Array ()[sqlstate] => 00000 [id] => 1)

回答

-1

您可以使用下面的代碼來計算的行數,而不是$statement->bind_result($numrows);

$statement->store_result(); 
if ($statement->num_rows == 1) 
    echo "yeah correct!<br>"; 
} else { 
    echo "No :(<br>"; 
} 
+0

都能跟得上的,他們不能 –

+0

@YourCommonSense您不介意更詳細地瞭解它如何工作。這是在官方[PHP網站]上提供的代碼(http://www.php.net/manual/en/mysqli-stmt.num-rows.php)。不是特意叫你錯,而只是尋找解釋。 –

+0

@Brandon Enriquez:如果你想要統計表中有多少行,該怎麼辦?你會選擇一切只是爲了獲得行數? – zerkms