Nó báo là bạn có lỗi trong cú pháp SQL

lập trình


<?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));
    }
}
?>

Những gì tôi đã thử:

tôi đã thử cái này nhưng cũng nói “Bạn có lỗi trong cú pháp SQL; hãy kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MariaDB của bạn để biết cú pháp phù hợp để sử dụng gần ” ở dòng 1″ tôi không biết phải làm gì

<?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));
    }
}
?>

Giải pháp 1

Đừng làm như vậy! Không bao giờ nối các chuỗi để xây dựng lệnh SQL. Nó khiến bạn có nguy cơ bị tấn công SQL SQL vô tình hoặc cố ý, có thể phá hủy toàn bộ cơ sở dữ liệu của bạn. Thay vào đó, hãy luôn sử dụng các truy vấn được tham số hóa.

Khi bạn nối các chuỗi, bạn sẽ gặp vấn đề vì SQL nhận được các lệnh như:

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

Trích dẫn mà người dùng đã thêm sẽ chấm dứt chuỗi liên quan đến SQL và bạn gặp vấn đề. Nhưng nó có thể tồi tệ hơn. Thay vào đó, nếu tôi gõ cái này: “x’;DROP TABLE MyTable;–” thì SQL sẽ nhận được một lệnh rất khác:

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

SQL nào được coi là ba lệnh riêng biệt:

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

CHỌN hoàn toàn hợp lệ

SQL
DROP TABLE MyTable;

Lệnh “xóa bảng” hoàn toàn hợp lệ

SQL
--'

Và mọi thứ khác là một bình luận.
Đúng như vậy: chọn bất kỳ hàng phù hợp nào, xóa bảng khỏi DB và bỏ qua mọi thứ khác.

Vì vậy, LUÔN LUÔN sử dụng các truy vấn được tham số hóa! Hoặc hãy sẵn sàng khôi phục DB của bạn từ bản sao lưu thường xuyên. Bạn có sao lưu thường xuyên phải không?

PHP giúp dễ dàng đưa các tham số vào các truy vấn: PHP: pg_query_params – Hướng dẫn sử dụng[^]

コメント

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