簡體   English   中英

准備好的語句和mysqli_query / mysqli_num_rows?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM