更新列时 query/prepared 语句中未使用索引
No index used in query/prepared statement when updating columns
我有这个错误:
No index used in query/prepared statement UPDATE members SET fname = ?, mname = ?, lname = ? WHERE username = ?
请记住,这是仅供登录用户使用的脚本,因此会话将始终启动。
此脚本用于 change/update 当前姓名(第一名、中间名和姓氏)。数据库中的列是 fname、mname 和 lname,都设置为 varchar(36)(因为用户的名字、中间名或姓氏不太可能超过 36 个字母)
这是我的表格:
<form method="POST" action="">
<input type="text" name="fname" class="input" placeholder="First Name"><br>
<input type="text" name="mname" class="input" placeholder="Middle Name"><br>
<input type="text" name="lname" class="input" placeholder="Last Name"><p>
<input type="submit" name="sbmtnm" class="buttondiv" value="Submit"><p>
</form>
这是我的 php 更新名称的代码:
<?php
mysqli_report(MYSQLI_REPORT_ALL);
if(isset($_POST['sbmtnm'])){
if(empty($_POST['fname']) && ($_POST['lname'])) {
echo "<font color='#DB4D4D'>First Name or Last name field is blank!</font>";
}
else {
$_POST['fname'] = $fname;
$_POST['mname'] = $mname;
$_POST['lname'] = $lname;
$_SESSION['username'] = $username;
$sqlnm = "UPDATE members SET fname = ?, mname = ?, lname = ? WHERE username = ?";
// I also tried this :
$sqlnm = "UPDATE members SET (fname, mname, lname) VALUES (?, ?, ?) WHERE username = ?";
//↑ This code shows another error message : You have an error in your SQL syntax; check the
//manual that corresponds to your MySQL server version for the right syntax to use near '(fname,
//mname, lname) VALUES (?, ?, ?) WHERE username = ?
$stmt = $mysqli->prepare($sqlnm);
if(false===$stmt){
die('prepare() failed:' . $mysqli->errno. htmlspecialchars($mysqli->error));
}
$check = $stmt->bind_param('ssss', $fname, $mname, $lname, $username);
if(false===$check){
die('bind_param() failed:' . htmlspecialchars($stmt->error));
}
$ok = $stmt->execute();
if(false===$ok){
die('execute() failed:' . htmlspecialchars($stmt->error));
}
$stmt->close();
if($ok == true){
echo "<p><font color='#00CC00'>Your name has been successfuly submitted.</font>";
}
}
}
?>
真不知道哪里出了问题...
尝试注释掉 mysqli_report(MYSQLI_REPORT_ALL);
,因为它的实例报告了太多错误,这可能会导致您的代码无法完全执行。
我有这个错误:
No index used in query/prepared statement UPDATE members SET fname = ?, mname = ?, lname = ? WHERE username = ?
请记住,这是仅供登录用户使用的脚本,因此会话将始终启动。
此脚本用于 change/update 当前姓名(第一名、中间名和姓氏)。数据库中的列是 fname、mname 和 lname,都设置为 varchar(36)(因为用户的名字、中间名或姓氏不太可能超过 36 个字母)
这是我的表格:
<form method="POST" action="">
<input type="text" name="fname" class="input" placeholder="First Name"><br>
<input type="text" name="mname" class="input" placeholder="Middle Name"><br>
<input type="text" name="lname" class="input" placeholder="Last Name"><p>
<input type="submit" name="sbmtnm" class="buttondiv" value="Submit"><p>
</form>
这是我的 php 更新名称的代码:
<?php
mysqli_report(MYSQLI_REPORT_ALL);
if(isset($_POST['sbmtnm'])){
if(empty($_POST['fname']) && ($_POST['lname'])) {
echo "<font color='#DB4D4D'>First Name or Last name field is blank!</font>";
}
else {
$_POST['fname'] = $fname;
$_POST['mname'] = $mname;
$_POST['lname'] = $lname;
$_SESSION['username'] = $username;
$sqlnm = "UPDATE members SET fname = ?, mname = ?, lname = ? WHERE username = ?";
// I also tried this :
$sqlnm = "UPDATE members SET (fname, mname, lname) VALUES (?, ?, ?) WHERE username = ?";
//↑ This code shows another error message : You have an error in your SQL syntax; check the
//manual that corresponds to your MySQL server version for the right syntax to use near '(fname,
//mname, lname) VALUES (?, ?, ?) WHERE username = ?
$stmt = $mysqli->prepare($sqlnm);
if(false===$stmt){
die('prepare() failed:' . $mysqli->errno. htmlspecialchars($mysqli->error));
}
$check = $stmt->bind_param('ssss', $fname, $mname, $lname, $username);
if(false===$check){
die('bind_param() failed:' . htmlspecialchars($stmt->error));
}
$ok = $stmt->execute();
if(false===$ok){
die('execute() failed:' . htmlspecialchars($stmt->error));
}
$stmt->close();
if($ok == true){
echo "<p><font color='#00CC00'>Your name has been successfuly submitted.</font>";
}
}
}
?>
真不知道哪里出了问题...
尝试注释掉 mysqli_report(MYSQLI_REPORT_ALL);
,因为它的实例报告了太多错误,这可能会导致您的代码无法完全执行。