簡體   English   中英

使用MySQL預准備語句選擇多列

[英]SELECT multiple columns using mySQL prepared statement

這樣可以成功地從表中檢索數據,但是不使用mySQL准備的語句。

$sql = "SELECT email, created_at, firstname, lastname FROM users WHERE id ='" . $_SESSION['id'] . "'";
$result = mysqli_query($link, $sql);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        $email_address = $row["email"];
        $creatiom_time = $row["created_at"];
        $fname = $row["firstname"];
        $lname = $row["lastname"];
    }
}

如何將其轉換為准備好的語句以防止SQL注入? 我對其進行轉換的嘗試未檢索到數據。

$stmt = mysqli_prepare($link, "SELECT email, created_at, firstname, lastname FROM users WHERE id=?");
$stmt->bind_param("i", $_SESSION['id']);
$stmt->execute();
$stmt->bind_result($email_address, $creatiom_time, $fname, $lname);
$stmt->close();

我究竟做錯了什么? 電子郵件是唯一的,因此它應該只返回一行; 但是,當我使用上述准備好的語句時,什么也不會返回。 謝謝。

您實際上需要使用fetch將行數據存儲到綁定的結果變量中:

$stmt = mysqli_prepare($link, "SELECT email, created_at, firstname, lastname FROM users WHERE id=?");
$stmt->bind_param("i", $_SESSION['id']);
$stmt->execute();
$stmt->bind_result($email_address, $creatiom_time, $fname, $lname);
$stmt->fetch();
$stmt->close();
echo $email_address; // etc.

請注意,您實際上應該檢查這些調用的返回狀態,尤其是prepareexecutefetch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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