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>
}
?>“`
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:Se debe tener en cuenta que los marcadores de posición
?
representan los valores que se pasarán utilizando el métodoexecute()
, y se escapan automáticamente para evitar vulnerabilidades de inyección de SQL.