[RESOLU] probleme sql "Invalid parameter number: number"

Eléphanteau du PHP | 24 Messages

04 juin 2022, 19:30

Bonjour

j'essaye de faire un UPDATE dans ma base de donné de stock sauf que j 'ai une erreur en retour:
Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of token.
Je pensai que c'etait une variable manquante mais non.
je cherche depuis 2 jours mais la mon cerveau ce liquéfie #-o

Voici mon code

Code : Tout sélectionner

// mise à jour du stock $stockSelectSql = 'SELECT stock FROM item WHERE itemNumber = :itemNumber'; $stockSelectStatement = $conn->prepare($stockSelectSql); $stockSelectStatement->execute(['itemNumber' => $itemNumber]); if($stockSelectStatement->rowCount() > 0) { $row = $stockSelectStatement->fetch(PDO::FETCH_ASSOC); $initialStock = $row['stock']; $newStock = $initialStock - $itemDetailsQuantity; } else { // Item is not in DB. Therefore, stop the update and quit $errorAlert = '<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">&times;</button>Item Number does not exist in DB. Therefore, update not possible.</div>'; $data = ['alertMessage' => $errorAlert]; echo json_encode($data); exit(); } // Construct the UPDATE query $updateItemDetailsSql = "UPDATE `item` SET `itemName`=':itemName',`discount`=':discount',`stock`=':stock',`unitPrice`=':unitPrice' WHERE `itemNumber`=':itemNumber'"; $updateItemDetailsStatement = $conn->prepare($updateItemDetailsSql); $updateItemDetailsStatement->execute(['itemName' => $itemName, 'discount' => $discount, 'stock' => $newStock, 'unitPrice' => $itemDetailsUnitPrice, 'itemNumber' => $itemNumber]); } echo ($updateItemDetailsSql); ?>

il me retourne ceci:

Code : Tout sélectionner

0.2389 498136 execute( $params = ['itemName' => 'incada 52 x 72', 'discount' => '52 x 72', 'stock' => 2000, 'unitPrice' => '270', 'itemNumber' => 'incada 52 x 72'] ) ...\postplanningfd.php:155

Mammouth du PHP | 2703 Messages

04 juin 2022, 22:05

UPDATE `item` SET `itemName`=:itemName
et non
UPDATE `item` SET `itemName`=':itemName'

Eléphanteau du PHP | 24 Messages

04 juin 2022, 22:35

alors soit je li mal mon code, et des foi cela m'arrive d'être sûr de lire ce que je veut lire..
mais la je pense que sur mon code j'ai bien ecri:

Code : Tout sélectionner

UPDATE `item` SET `itemName`=':itemName'

Mammouth du PHP | 2703 Messages

04 juin 2022, 22:41

c'est bien écrit
UPDATE `item` SET `itemName`=':itemName'
et comme, ce n'est pas ce que dit la doc https://www.php.net/manual/fr/pdo.prepare.php
php ne s'attend pas à ce que des paramètres soient passés car il n'y en a aucun dans la requête, d'où le message d'erreur.

Eléphanteau du PHP | 24 Messages

05 juin 2022, 11:30

peut tu m'expliquer je ne comprend pas cette histoire de paramètre,
je pensais que je devais faire:
un requête SQL,
un prépare de la requête
puis un exécute.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 juin 2022, 12:38

Tu mets des guillemets en trop dans ta requête
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 24 Messages

05 juin 2022, 13:33

oui je sais cela devrais être comme ceci:

Code : Tout sélectionner

'UPDATE item SET itemName=:itemName,discount=:discount,stock=:stock,unitPrice=:unitPrice WHERE itemNumber=:itemNumber';
mais comme cela ne fonctionné pas j 'ai pris le requête qui fonctionne dans phpmyadmin et coller.
je ne comprend pas pourquoi cela fonctionne depuis phpmyadmin et pas avec l'execute.

Mammouth du PHP | 1967 Messages

05 juin 2022, 17:53

essaye un mix entre les deux
$updateItemDetailsSql = "UPDATE `item` SET `itemName`=:itemName,`discount`=:discount,`stock`=:stock,`unitPrice`=:unitPrice WHERE `itemNumber`=:itemNumber";

quand PHP voit ton ':itemName' comme il voit des simple quote, il interprète cela comme une valeur et surement pas un paramètre d'où l'erreur énoncé nombre de paramètre attendu différent du nombre de paramètre donné.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 24 Messages

05 juin 2022, 18:28

essaye un mix entre les deux
$updateItemDetailsSql = "UPDATE `item` SET `itemName`=:itemName,`discount`=:discount,`stock`=:stock,`unitPrice`=:unitPrice WHERE `itemNumber`=:itemNumber";

quand PHP voit ton ':itemName' comme il voit des simple quote, il interprète cela comme une valeur et surement pas un paramètre d'où l'erreur énoncé nombre de paramètre attendu différent du nombre de paramètre donné.
=D> merci tout fonctionne en effet le problème venais de mes simple quote.
avec ton code Update fonctionne, encore merci.