Frage

Ich habe den folgenden Code, für die ich den Fehler:

Warnung : mysqli_stmt :: bind_result () [mysqli-stmt.bind-Ergebnis.]: Anzahl der Bind-Variablen nicht Anzahl der Felder in vorbereitete Anweisung in der Datei übereinstimmen

Ist dies nur eine Warnung, soll nicht der Code immer noch funktionieren? Ich möchte ein select * tun und alle Daten außer einem Feld angezeigt werden, die ich möchte separat binden und zu handhaben. Gibt es eine Möglichkeit, um, oder eine bessere Methode? Meine Lösung im Moment (unerprobten) ist die richtige Menge an Variablen zu den Ergebnissen mit getRecords zu binden, und dann binden separat als einen anderen Namen mit getHTML.

Was sind die advanatges binden kann, und es ist notwendig.

<?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>";
//
} 
}
}
}

Ich möchte auch wissen, was mit meiner img src Aussage falsch ist ..., ich glaube, ich etwas Elementares wie ein Schrägstrich oder Zitat bin mising.

bearbeitet. Der Code zeigt nun ein Fehler nach * mit Spaltennamen ersetzen, aber die while-Schleife nie eingegeben, und daher werden keine Aktionen durchgeführt

War es hilfreich?

Lösung

Sie müssen möglicherweise explicity die Spaltennamen in der SELECT angeben, anstatt Verwendung *, gemäß den Beispielen für MySQLi bind_result () .

In Bezug auf die img Linie, Sie haben eine extra "nach .jpg

<img src='./images/".$id.".jpg"' width=

sollte

<img src='./images/".$id.".jpg width=

Auch Sie müssen nicht tatsächlich aus der Zeichenfolge brechen und die Variablen verketten, weil "mit bewirkt, dass die Zeichenfolge für Variablen ohnehin analysiert werden.

Andere Tipps

Ich vermute, das Problem hier ist:

$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);

Sie fehlen wahrscheinlich eine Spalte. Der Code wird funktionieren, wenn Sie weniger Spalten als die in der Ergebnismenge abgerufen werden.

Wie für den img-Tag, wenn Sie auf XHMTL sind, werden Sie sie schließen müssen.

Ich würde beginnen, indem diese Zeile Festsetzung:

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 = ?")) {

Ich nehme an, es wie dieser Stelle aussehen sollte:

if ($getRecords = $con->prepare("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 = ?")) {
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top