它说你的 SQL 语法有错误


<?php
include 'connect.php';
$id = $_GET['updateid'];
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $password = $_POST['password'];

    $sql = "UPDATE `personal info` SET id=$id, name='$name', email='$email', phone='$phone', password='$password' WHERE id=$id";
    $result = mysqli_query($con, $sql);

    if ($result) {
        echo "updated successfully";
        // header('location:display.php');
    } else {
        die(mysqli_error($con));
    }
}
?>

我尝试过的:

我尝试了这个,但也说“您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行 ” 附近使用的正确语法”idk 该怎么做

<?php
include 'connect.php';
$id = $_GET['updateid'];
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $password = $_POST['password'];

    $sql = "UPDATE `personal info` SET Name='$name', Email='$email', Phone='$phone', assword='$password' WHERE id=$id";
    $result = mysqli_query($con, $sql);

    if ($result) {
        echo "updated successfully";
        // header('location:display.php');
    } else {
        die(mysqli_error($con));
    }
}
?>

解决方案1

别那样做! 切勿连接字符串来构建 SQL 命令。 它使您很容易受到意外或故意的 SQL 注入攻击,从而破坏您的整个数据库。 始终使用参数化查询。

连接字符串时,会导致问题,因为 SQL 接收如下命令:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

就 SQL 而言,用户添加的引号终止了字符串,并且您会遇到问题。 但情况可能会更糟。 如果我输入以下内容: “x’;DROP TABLE MyTable;–” 那么 SQL 会收到一个非常不同的命令:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

其中 SQL 将其视为三个单独的命令:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全有效的 SELECT

SQL
DROP TABLE MyTable;

完全有效的“删除表”命令

SQL
--'

其他一切都是评论。
它确实如此:选择任何匹配的行,从数据库中删除该表,并忽略其他任何内容。

所以总是使用参数化查询! 或者准备经常从备份恢复数据库。 您确实定期进行备份,不是吗?

PHP 可以轻松地在查询中包含参数: PHP: pg_query_params – 手册[^]

コメント

タイトルとURLをコピーしました