2009-02-02 2 views
0

я следующий код, для которого я получаю ошибку:MySQLi обязательные поля в подготовленном заявлении

Предупреждение: mysqli_stmt :: bind_result() [MySQLi-stmt.bind-результат]: количество связываемых переменные не соответствуют количеству полей в подготовленном операторе в файле.

Если это только предупреждение, не должен ли код работать? Я хочу сделать select * и отобразить все данные, кроме одного поля, которое я хочу связать и обрабатывать отдельно. Есть ли способ, или лучший способ? Мое решение на данный момент (не проверено) состоит в том, чтобы связать правильное количество переменных с результатами с помощью getRecords, а затем привязать отдельно как другое имя с помощью getHtml.

Каковы преимущества связывания, и это необходимо.

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

Я также хотел бы знать, что случилось с моим IMG SRC заявление ..., я чувствую mising что-то элементарное, такие как слэш или цитаты.

Редактировать: Код теперь отображает ошибку после замены * с именами столбцов, однако цикл while никогда не вводится, и, следовательно, никаких действий не выполняется.

ответ

1

Возможно, вам нужно будет объяснить имена столбцов в SELECT, а не использовать *, as per the examples for MySQLi bind_result().

В связи с IMG линии, у вас есть дополнительный "после того, как .jpg

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

должен быть

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

Кроме того, вы на самом деле не нужно, чтобы вырваться из строки и объединить переменные, потому что использование «приведет к тому, что строка будет анализироваться для переменных в любом случае.

0

Я предполагаю, что проблема здесь:

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

Вы, вероятно, отсутствует столбец. Код будет работать, если у вас меньше столбцов, чем в результирующем наборе.

Что касается тега img, если вы находитесь на xhmtl, вам придется его закрыть.

+0

Я отсутствует столбец deliberatley, PRODUCT_DESC. Вы хотите сказать, что в вашем ответе код не будет работать, если у меня меньше столбцов, чем в результирующем наборе? – 2009-02-02 13:39:06

+0

Я имел в виду обратное, если вы поместили больше столбцов, код не будет работать. Меньше столбцов должно работать. –

+0

Как я могу пропустить столбец? У меня меньше, чем то, что будет возвращено select * .., я не понимаю. – 2009-02-02 13:59:36

0

Я хотел бы начать, фиксируя эту строку:

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

Я предполагаю, что это должно выглядеть следующим образом, вместо:

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 = ?")) { 
Смежные вопросы