Dice que tienes un error en tu sintaxis SQL.

programación


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

Lo que he probado:

Probé este pero también digo “Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MariaDB para conocer la sintaxis correcta que debe usar cerca de ” en la línea 1″. No sé qué hacer

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

Solución 1

¡No lo hagas así! Nunca concatene cadenas para crear un comando SQL. Lo deja completamente expuesto a ataques de inyección SQL accidentales o deliberados que pueden destruir toda su base de datos. Utilice siempre consultas parametrizadas en su lugar.

Cuando concatenas cadenas, causas problemas porque SQL recibe comandos como:

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

La cita que agregó el usuario termina la cadena en lo que respecta a SQL y surgen problemas. Pero podría ser peor. Si en su lugar escribo esto: “x’;DROP TABLE MyTable;–” Entonces SQL recibe un comando muy diferente:

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

Que SQL ve como tres comandos separados:

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

Un SELECT perfectamente válido

SQL
DROP TABLE MyTable;

Un comando perfectamente válido para “eliminar la tabla”

SQL
--'

Y todo lo demás es un comentario.
Así lo hace: selecciona las filas coincidentes, elimina la tabla de la base de datos e ignora todo lo demás.

¡Así que SIEMPRE utilice consultas parametrizadas! O prepárese para restaurar su base de datos desde la copia de seguridad con frecuencia. Realizas copias de seguridad con regularidad, ¿no?

PHP facilita la inclusión de parámetros con consultas: PHP: pg_query_params – Manual[^]

コメント

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