es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estoy intentando insertar datos en la base de datos, pero no puedo hacerlo.

Tengo un error en mi sitio web y he vuelto a leer mi texto 30 veces pero no puedo encontrar el error, ¿me puedes ayudar por favor?

— El error: —

Advertencia: PDOStatement::execute(): SQLSTATE[HY093]: Número de parámetros no válido: el número de variables vinculadas no coincide con el número de tokens en D:\Xamp\htdocs\monoShop\config\commandes.php en la línea 9

— El código: —

“`php

function ajouter($image, $nom, $prix, $desc)
{
if(require("connexion.php"))
{
$req = $access->prepare("INSERT INTO produits (image, nom, prix, description) VALUES ('$image', '$nom', $prix, '$desc')");

<pre><code> $req->execute(array($image, $nom, $prix, $desc));

$req->closeCursor();
</code></pre>

}
}

function afficher()
{
if(require("connexion.php"))
{
$req=$access->prepare("SELECT * FROM produits ORDER BY id DESC");

<pre><code> $req->execute();

$data = $req->fetchAll(PDO::FETCH_OBJ);

return $data;

$req->closeCursor();
}
</code></pre>

}

function supprimer($id)
{
if(require("connexion.php"))
{
$req=$access->prepare("DELETE FROM produits WHERE id=?");

<pre><code> $req->execute(array($id));

$req->closeCursor();
}
</code></pre>

}

?>“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error está relacionado con la cantidad de variables enlazadas que no coinciden con la cantidad de tokens, lo que significa que la declaración preparada no se está ejecutando correctamente. El fragmento de código proporcionado muestra que la consulta INSERT INTO en la línea 7 contiene variables que se pasan directamente a la cadena de consulta en lugar de enlazarse a marcadores de posición. Esto puede llevar a vulnerabilidades de inyección de SQL y también causar errores como el que se está experimentando.

    Para solucionar este error, las variables en la cadena de consulta en la línea 7 deben ser reemplazadas por marcadores de posición y luego enlazadas a los valores cuando se ejecuta la consulta usando execute(). Por ejemplo:

    $req = $access->prepare("INSERT INTO productos (imagen, nombre, precio, descripción) VALUES (?, ?, ?, ?)");
    
    $req->execute(array($imagen, $nombre, $precio, $desc));
    

    Se debe tener en cuenta que los marcadores de posición ? representan los valores que se pasarán utilizando el método execute(), y se escapan automáticamente para evitar vulnerabilidades de inyección de SQL.

Comments are closed.