j'ai le code suivant, pour lequel j'obtiens l'erreur:mysqli champs de liaison dans une déclaration préparée
Avertissement: mysqli_stmt :: bind_result() [mysqli-stmt.bind-result]: Nombre de bind les variables ne correspondent pas au nombre de champs dans l'instruction préparée dans le fichier.
Si ce n'est qu'un avertissement, le code ne devrait-il pas encore fonctionner? Je veux faire un select * et afficher toutes les données à l'exception d'un champ, que je veux lier et gérer séparément. Y a-t-il un moyen de contourner ou une meilleure méthode? Ma solution pour le moment (non testé) est de lier le bon nombre de variables aux résultats avec getRecords, puis de lier séparément sous un nom différent avec getHtml.
Quels sont les avantages de la liaison, et est-ce nécessaire?
<?php
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"]; else
die("You should have a 'cmd' parameter in your URL");
$id = $_GET["id"];
$con = mysqli_connect("localhost", "user", "password", "db");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if($cmd=="GetSaleData") {
echo "test inside loop";
if ($getRecords = $con->prepare("SELECT SELECT Product_NO, Product_NAME, SUBTITLE, CURRENT_BID, START_PRICE, BID_COUNT, QUANT_TOTAL, QUANT_SOLD, ACCESSSTARTS, ACCESSENDS, ACCESSORIGIN_END, USERNAME, BEST_BIDDER_ID, FINISHED, WATCH, BUYITNOW_PRICE, PIC_URL, PRIVATE_AUCTION, AUCTION_TYPE, ACCESSINSERT_DATE, ACCESSUPDATE_DATE, CAT_DESC, CAT_PATH, COUNTRYCODE, LOCATION, CONDITIONS, REVISED, PAYPAL_ACCEPT, PRE_TERMINATED, SHIPPING_TO, FEE_INSERTION, FEE_FINAL, FEE_LISTING, PIC_XXL, PIC_DIASHOW, PIC_COUNT, ITEM_SITE_ID FROM Sales WHERE Product_NO = ?")) FROM SaleS WHERE PRODUCT_NO = ?")) {
$getHtml = $con->prepare("SELECT PRODUCT_DESC FROM SaleS WHERE PRODUCT_NO = ?");
$getHtml->bind_param("i", $id);
$getHtml->execute();
$getHtml->bind_result($PRODUCT_DESC);
$getRecords->bind_param("i", $id);
$getRecords->execute();
$getRecords->bind_result($PRODUCT_NO, $PRODUCT_NAME, $SUBTITLE, $CURRENT_BID, $START_PRICE, $BID_COUNT, $QUANT_TOTAL, $QUANT_SOLD, $ACCESSSTARTS, $ACCESSENDS, $ACCESSORIGIN_END, $USERNAME, $BEST_BIDDER_ID, $FINISHED, $WATCH, $BUYITNOW_PRICE, $PIC_URL, $PRIVATE_Sale, $Sale_TYPE, $ACCESSINSERT_DATE, $ACCESSUPDATE_DATE, $CAT_DESC, $CAT_PATH, $COUNTRYCODE, $LOCATION, $CONDITIONS, $REVISED, $PAYPAL_ACCEPT, $PRE_TERMINATED, $SHIPPING_TO, $FEE_INSERTION,
$FEE_FINAL, $FEE_LISTING, $PIC_XXL, $PIC_DIASHOW, $PIC_COUNT, $ITEM_SITE_ID);
while ($getRecords->fetch()) {
// operations snipped for question
echo "<h1>".$PRODUCT_NAME."</h1>
<div id='leftlayer' class='leftlayer'>
<p><strong>Username: </strong>".$USERNAME."
<p><strong>Shipping to: </strong> ". $country ."
<img src='./images/".$id.".jpg"' width='".$imageSize["width"]."' height='".$imageSize["height"]."'>
</div>
<div id='rightlayer'>
</div>";
//
}
}
}
}
Je voudrais aussi savoir ce qui ne va pas avec ma déclaration img src ..., je sens que je suis Mising quelque chose élémentaire, comme une barre oblique ou une citation.
edit: Le code affiche maintenant une erreur après le remplacement * avec des noms de colonne, cependant la boucle while n'est jamais entrée, et donc aucune action n'est effectuée.
Je manque une deliberatley colonne, PRODUCT_DESC. Voulez-vous dire dans votre réponse que le code ne fonctionnera pas si j'ai moins de colonnes que celles récupérées dans le jeu de résultats? –
Je voulais dire le contraire, si vous mettez plus de colonnes le code ne fonctionnera pas. Moins de colonnes devraient fonctionner. –
Comment pourrais-je manquer une colonne? J'ai moins que ce qui serait retourné par select * .., je ne comprends pas. –