Domanda
Ho questo codice parziale:
if ($getRecords = $con->prepare("SELECT * FROM AUCTIONS WHERE ARTICLE_NO = ?"))
{
$getHtml = $con->prepare("SELECT ARTICLE_DESC FROM AUCTIONS WHERE ARTICLE_NO = ?");
$getHtml->bind_param("i", $pk);
$getHtml->execute();
$getHtml->bind_result($ARTICLE_DESC);
$getRecords->bind_param("i", $pk);
$getRecords->execute();
$getRecords->bind_result($ARTICLE_NO, $ARTICLE_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);
Che altrimenti funziona bene, tuttavia ottengo un errore:
Il numero di variabili di bind non corrisponde al numero di campi nell'istruzione preparata
Nell'ultima riga che ho pubblicato.
Non sono sicuro di quale sia il problema. Voglio usare alcune colonne separate, ad esempio ARTICLE_DESC. Questo significa che non posso usare select * e devo inserire ciascuno dei nomi di colonna nella query?
modifica: è necessario associare? ci sono vantaggi in termini di sicurezza o prestazioni? Posso anche fare a meno?
Soluzione
In realtà dovresti impostare i nomi delle colonne anziché usare *.
In questo modo, saprai esattamente quali colonne passare al metodo bind_result.
Altri suggerimenti
Se stai vincolando i risultati, non dovresti farlo con un carattere jolly nella tua query SQL. Pensa a cosa accadrebbe se una colonna fosse aggiunta o rimossa dalla tabella che stai vincolando.