![](/img/trans.png)
[英]Errors for: mysqli_query, mysqli, mysqli_fetch_assoc, mysqli_result, mysqli_num_rows and imo wierd undefined variable
[英]Prepared statements and mysqli_query / mysqli_num_rows?
我試圖找出如何使我的代碼與准備好的語句一起工作。 我了解了注釋代碼的整個過程。 為了正確集成num_rows和mysqli_query部分,我該怎么做?
function login_check() {
global $connection;
$name = $_POST['name'];
$password = $_POST['password'];
$query = "SELECT id FROM members WHERE name = $name AND password = $password";
$stmt = $connection->prepare($query);
$stmt->bind_param('ss', $name, $password);
$stmt->execute();
$stmt->close();
// $result = mysqli_query($connection, $query);
// $rows = mysqli_num_rows($result);
if($rows > 0){
header('location:../../success.php');
exit;
}
else {
header('location:../../failed.php');
exit;
}
}
我試過的
$result = mysqli_query($connection, $stmt);
$rows = mysqli_num_rows($result);
更改
$query = "SELECT id FROM members WHERE name = $name AND password = $password";
至
$query = "SELECT `id` FROM `members` WHERE `name` = ? AND `password` = ?";
在表和列周圍添加反引號可防止mysql保留字錯誤。
刪除$stmt->close()
;
if( $stmt->num_rows > 0 ) {
$stmt->close();
header('location:../../success.php');
exit();
} else {
$stmt->close();
header('location:../../failed.php');
exit();
}
在這種情況下,最佳做法是在標頭前的if語句內添加$stmt->close()
。 因為在if語句之前添加它會導致$stmt->num_rows
始終返回0; 在if語句后添加它將不起作用,因為exit()
會阻止其執行。
從文檔中 :
關閉准備好的語句。 mysqli_stmt_close()也取消分配語句句柄。 如果當前語句具有待處理或未讀的結果,則此函數將其取消,以便可以執行下一個查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.