Page 1 sur 1

probleme sql "Invalid parameter number: number"

Posté : 04 juin 2022, 19:30
par mije69
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

Re: probleme sql "Invalid parameter number: number"

Posté : 04 juin 2022, 22:05
par or 1
UPDATE `item` SET `itemName`=:itemName
et non
UPDATE `item` SET `itemName`=':itemName'

Re: probleme sql "Invalid parameter number: number"

Posté : 04 juin 2022, 22:35
par mije69
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'

Re: probleme sql "Invalid parameter number: number"

Posté : 04 juin 2022, 22:41
par or 1
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.

Re: probleme sql "Invalid parameter number: number"

Posté : 05 juin 2022, 11:30
par mije69
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.

Re: probleme sql "Invalid parameter number: number"

Posté : 05 juin 2022, 12:38
par @rthur
Tu mets des guillemets en trop dans ta requête

Re: probleme sql "Invalid parameter number: number"

Posté : 05 juin 2022, 13:33
par mije69
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.

Re: probleme sql "Invalid parameter number: number"

Posté : 05 juin 2022, 17:53
par Spols
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é.

Re: probleme sql "Invalid parameter number: number"

Posté : 05 juin 2022, 18:28
par mije69
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.