Cela signifie que vous avez une erreur dans votre syntaxe SQL

la programmation


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

Ce que j’ai essayé :

J’ai essayé celui-ci mais je dis aussi “Vous avez une erreur dans votre syntaxe SQL ; vérifiez le manuel qui correspond à la version de votre serveur MariaDB pour connaître la bonne syntaxe à utiliser près de ” à la ligne 1″ je ne sais pas quoi faire

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

Solution 1

Ne fais pas ça comme ça ! Ne concaténez jamais de chaînes pour créer une commande SQL. Cela vous laisse grand ouvert aux attaques accidentelles ou délibérées par injection SQL qui peuvent détruire l’intégralité de votre base de données. Utilisez toujours des requêtes paramétrées à la place.

Lorsque vous concaténez des chaînes, vous posez des problèmes car SQL reçoit des commandes telles que :

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

La citation ajoutée par l’utilisateur termine la chaîne en ce qui concerne SQL et vous rencontrez des problèmes. Mais cela pourrait être pire. Si j’arrive et tape ceci à la place : “x’;DROP TABLE MyTable;–” Alors SQL reçoit une commande très différente :

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

Ce que SQL considère comme trois commandes distinctes :

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

Un SELECT parfaitement valide

SQL
DROP TABLE MyTable;

Une commande “supprimer la table” parfaitement valide

SQL
--'

Et tout le reste n’est qu’un commentaire.
C’est ce qui se passe : sélectionne toutes les lignes correspondantes, supprime la table de la base de données et ignore tout le reste.

Utilisez donc TOUJOURS des requêtes paramétrées ! Ou soyez prêt à restaurer fréquemment votre base de données à partir d’une sauvegarde. Vous effectuez régulièrement des sauvegardes, n’est-ce pas ?

PHP facilite l’inclusion de paramètres dans les requêtes : PHP : pg_query_params – Manuel[^]

コメント

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