mariadb 为什么我试图更新数据,但它显示我的错误行“$result=mysqli_query($connection,$query);“

tgabmvqs  于 2023-02-19  发布在  Mysql
关注(0)|答案(2)|浏览(142)

我有一个关于这个问题,我找不到我的代码中的问题在哪里,任何人都可以帮助我,请。

<?php

if($_POST['submit']) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $id = $_POST['id'];

    $query = "UPDATE users SET ";
    $query .="username = '$username' ";
    $query .="password = '$password' ";
    $query .="WHERE id = $id";

    $result = mysqli_query($connection, $query);

    if(!$result) {

        die ('QUERY FAILED' . mysqli_error($connection));

    }

}

?>

我需要将新数据更新到MySQL中,但它显示了错误消息:
致命错误:未捕获的mysqli_sql_异常:SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,了解在'password ='av' WHERE id ='附近使用的正确语法

qqrboqgw

qqrboqgw1#

查询中缺少,“”。

<?php

if($_POST['submit']) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $id = $_POST['id'];

    $query = "UPDATE users SET ";
    $query .= "username = '$username', "; // missing ','
    $query .= "password = '$password' ";
    $query .= "WHERE id = $id";

    $result = mysqli_query($connection, $query);

    if(!$result) {

        die ('QUERY FAILED' . mysqli_error($connection));

    }

}

?>

更新查询应为:
UPDATE users SET username = 'username', password = 'password' where id = 1

yizd12fk

yizd12fk2#

正如Majharul正确指出的那样,错误是由SET子句中列出的列之间缺少逗号(,)引起的。错误几乎总是紧接在错误中返回的查询部分之前:password='av' WHERE id=.
更重要的是,你不应该以纯文本存储密码,也不应该简单地连接字符串和/或直接将变量插入SQL。这是一个非常明显的SQL Injection漏洞和easy to exploit。你应该使用parameterized prepared statements将变量传递到查询中。
这是一个简单的示例(应该添加用户输入验证),说明您可以如何改进代码:

<?php

if($_POST['submit']) {
    $username = $_POST['username'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $id = $_POST['id'];

    /* Prepare your UPDATE statement */
    $stmt = mysqli_prepare($connection, 'UPDATE users SET username = ?, password = ? WHERE id = ?');

    /* Bind variables to parameters */
    mysqli_stmt_bind_param($stmt, 'ssi', $username, $password, $id);

    /* Execute the statement */
    $result = mysqli_stmt_execute($stmt);

    if(!$result) {

        die ('QUERY FAILED' . mysqli_error($connection));

    }

}

请阅读PHP docs for password_hash()了解更多详细说明。

相关问题