提问者:小点点

更新函数返回错误-CRUD应用程序PHP MYSQL


以下是我在单击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");
    
}

我该怎么解决这个问题? 提前致谢


共1个答案

匿名用户

首先,您应该使用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之外,还应该使用带有绑定参数的准备好的语句