以下是我在单击Update时得到的错误。
您的SQL语法中有一个错误; 请检查与MariaDB服务器版本相对应的手册,以确定在第1行“”附近使用的正确语法
更新功能代码-
if (isset($_POST['update'])) {
$user_id = $_POST['user_id'];
$email = $_POST['email'];
$password = $_POST['password'];
$mysqli->query("UPDATE users SET email='$email', password='$password' WHERE user_id=$user_id") or
die($mysqli->error);
$_SESSION['message'] = "Records been Updated";
$_SESSION['msg_type'] = "warning";
header("location: login.php");
}
我该怎么解决这个问题? 提前致谢
首先,您应该使用mysqli_real_escape_string来跳过引号或类似的特殊字符。
您应该为所有输入参数使用以下代码:
// Trim all the incoming data:
$trimmed_data = array_map('trim', $_POST);
// escape variables for security
$email = mysqli_real_escape_string( $conn, $trimmed_data['email'] );
$password = mysqli_real_escape_string( $conn, $trimmed_data['password'] );
$user_id = mysqli_real_escape_string( $conn, $trimmed_data['user_id'] );
同样检查您的代码,sql查询似乎很好,但我没有发现任何数据库连接正在建立。
$link = mysqli_connect("$hostname", "$username", "$password", "$databaseName", "$databasePort");
if (mysqli_connect_errno($link)) {
die('Connect Error (' . mysqli_connect_errno($link) . ') '. mysqli_connect_error($link));
}
您使用的是非常不安全的普通密码文本,相反,您应该保存使用PHP的password_hash()创建的密码散列,您可以使用password_verify()验证该密码
您直接在查询中指定变量,这使得它可以接受各种sql注入。 因此,除了使用mysqli_real_escape_string之外,还应该使用带有绑定参数的准备好的语句