我正在嘗試使用 PHP 和 MySQL 進行注冊和登錄.. 但是當我輸入相同的電子郵件時,它會顯示錯誤...當我嘗試輸入相同的電子郵件時.. 已經注冊,它會顯示錯誤。它應該直接重定向到 signup-success.html,但它在第 45 行顯示錯誤.. 我嘗試將其替換為但即使這也沒有幫助.. 我是 php 新手,所以我正在關注我的教程'正在這樣做...... https://www.youtube.com/watch?v=5L9UhOnuos0
{
$stmt->execute();
} catch (mysqli_sql_exception $e) {
if ($e->getCode() == 1062) {
die("email address is already taken");
}
}
--------------------------------------------------------------------------
$password_hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
$mysqli = require __DIR__ . "/database.php";
$sql = "INSERT INTO user (name, email, password_hash)
VALUES (?, ?, ?)";
$stmt = $mysqli->stmt_init();
if ( ! $stmt->prepare($sql)) {
die("SQL error: " . $mysqli->error);
}
$stmt->bind_param("sss",
$_POST["name"],
$_POST["email"],
$password_hash);
if ($stmt->execute()) {
header("Location: signup-success.html");
exit;
} else {
if ($mysqli->errno === 1062) {
die("email already taken");
} else {
die($mysqli->error . " " . $mysqli->errno);
}
}
這是網站顯示的..
致命錯誤:未捕獲的 mysqli_sql_exception:D:\Programy\XAMPP\XAMPP\htdocs\login01\process-signup.php:45 中的鍵 'email' 的重復條目 '[email protected]' 堆疊跟蹤:#0 D:\Programy \XAMPP\XAMPP\htdocs\login01\process-signup.php(45): mysqli_stmt->execute() #1 {main} 在 D:\Programy\XAMPP\XAMPP\htdocs\login01\process-signup.php 中拋出第 45 行
uj5u.com熱心網友回復:
->execute()當您嘗試執行 INSERT 并且由于重復值而失敗時,您的呼叫會引發例外。(關于例外拋出的規則在 php 版本 8 中發生了變化。)例外在 php 中有點讓人頭疼。在不記錄它們的情況下捕獲并完全處理它們是很棘手的。
這是該怎么做。
將您的查詢更改為INSERT IGNORE。
$sql = "INSERT IGNORE INTO user (name, email, password_hash) VALUES (?, ?, ?)";使用像這樣的代碼檢查插入是否成功:
$result = $stmt->execute(); if ($result && $mysqli->affected_rows === 1) { header("Location: signup-success.html"); exit; } else if ($result && $mysqli->affected_rows !== 1) die("email already taken"); } else { die($mysqli->error . " " . $mysqli->errno); }
這將讓您在不依賴錯誤號的情況下控制您的邏輯,除非您的 SQL 陳述句崩潰和燒毀,而不是當您遇到 UNIQUE INDEX 沖突時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/514516.html
下一篇:騰訊云簡單使用
