update1:我嘗試了所有的建議(很欣賞順便說一句),但執行仍然沒有通過顯示「更新0行」。我嘗試了多種方法來解決這個問題,但似乎沒有任何效果。如何使用準備好的語句來更新表格而不是沒有準備的形式
這裏是我此刻的代碼:
if(isset($_POST['Done'])) {
$updateCD = "UPDATE users SET lgs=?, its=?, hbs=?, bios=?, pls=?, cts=? WHERE email=?";
$stmt = $con->prepare($updateCD);
$stmt->bind_param('sssssss', $_POST['lgs'], $_POST['its'], $_POST['hbs'], $_POST['bios'], $_POST['pls'], $_POST['cts'], $_GET['email']);
$stmt->execute();
if ($stmt->errno) {
echo "FAILURE!!! " . $stmt->error;
}
else {
echo "Updated {$stmt->affected_rows} rows";
$stmt->close();
}
}
我想用預處理語句代替我的基本SQLI查詢,以提高我的代碼的安全性。
此UPDATE語句涉及更新數據庫中用戶的配置文件信息。問題是,儘管我遵循的模型,更新執行沒有通過,從而在數據庫中沒有任何改變。
PHP代碼:關閉後
$email_login = mysqli_real_escape_string($con, $GET['email']);
$lg = mysqli_real_escape_string($con, $_POST['lgs']);
$it = mysqli_real_escape_string($con, $_POST['its']);
$hb = mysqli_real_escape_string($con, $_POST['hbs']);
$bio = mysqli_real_escape_string($con, $_POST['bios']);
$pl = mysqli_real_escape_string($con, $_POST['pls']);
$ct = mysqli_real_escape_string($con, $_POST['cts']);
if(isset($_POST['Done'])) {
$updateCD = "UPDATE users SET lgs=?, its=?, hbs=?, bios=?, pls=?, cts=? WHERE email=?";
$stmt = $con->prepare($updateCD);
$stmt->bind_param('sssssss', $lg, $it, $hb, $bio, $pl, $ct, $email_login);
$stmt->execute();
if ($stmt->errno) {
echo "FAILURE!!! " . $stmt->error;
}
else {
echo "Updated {$stmt->affected_rows} rows";
$stmt->close();
}
}
注:我明白爲什麼它可能看起來,如果這個問題是類似的另外一個,但絕不是它的精確複製。所提到的問題涉及更新一般的表格,而這個問題放大了使用預處理語句來執行更新。我已經知道如何在不使用預處理語句的情況下更新表,所以我想用更可靠的框架來提高我的代碼語法。雖然這兩個問題都是相關的,但他們有不同的範圍。
什麼錯誤你得到了嗎? – Mureinik
@Mureinik我不斷收到「更新0行」 – CodeMerchant
execute()方法的返回值是什麼?如果它是'假',則呼叫失敗。 [見文檔](https://secure.php.net/manual/en/mysqli-stmt.execute.php)。 – halfer