[英]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.
請注意,您實際上應該檢查這些調用的返回狀態,尤其是prepare
, execute
和fetch
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.