"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver el orden incorrecto de los parámetros en las actualizaciones de la base de datos de declaraciones preparadas en PHP?

¿Cómo resolver el orden incorrecto de los parámetros en las actualizaciones de la base de datos de declaraciones preparadas en PHP?

Publicado el 2024-11-08
Navegar:952

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

Declaración preparada en PHP para actualizaciones de bases de datos

Esta discusión se centra en la utilización adecuada de declaraciones preparadas en PHP para evitar vulnerabilidades como las inyecciones de SQL. El propósito del bloque de código en cuestión es actualizar una tabla de base de datos con un solo campo usando una declaración preparada.

En el código proporcionado, el método update() en el archivo class.Scripts.inc emplea un código preparado declaración en un intento de actualizar la tabla de volcado de datos. Sin embargo, la ejecución no tiene éxito debido a un orden de parámetros incorrecto durante el método bind_param(). El código actual vincula los parámetros en el orden de $id y $content, mientras que la instrucción SQL los espera en el orden opuesto, lo que lleva a una identificación de registro incorrecta y a que no se afecten filas.

El código corregido a continuación rectifica esto error al vincular los parámetros en el orden correcto y proporcionar un manejo de errores adicional:

$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
    trigger_error($this->mysqli->error, E_USER_ERROR);
    return;
}

$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);

/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';

/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
    trigger_error($stmt->error, E_USER_ERROR);
}

printf("%d Row inserted.\n", $stmt->affected_rows);

Con respecto a sus consultas específicas:

  1. El mensaje "0 filas insertadas" que encontró vence al orden inverso de los parámetros. Los parámetros de identificación y contenido se vincularon en el orden incorrecto, lo que provocó que la cláusula WHERE no coincidiera con ninguna fila.
  2. Al actualizar una tabla, es aceptable modificar solo los campos que necesita. Otras columnas de la tabla permanecerán sin cambios.
Declaración de liberación Este artículo se reimprime en: 1729512196 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3