Mysql
 sql >> Database >  >> RDS >> Mysql

Il numero da bind_result interrompe l'array php

Mettiamo in chiaro qualcosa, non stai risparmiando tempo (o rendendo il codice più carino) creando più variabili in una singola riga, è davvero il momento di premere il pulsante "invio" una volta eliminato il punto e virgola.

Il motivo per cui nessuno si è preso la briga di darti una risposta adeguata è perché, beh, il tuo codice è davvero difficile da leggere.

Per cominciare, dovresti iniziare strutturando il tuo codice in modo molto migliore, anche qualcosa del genere dovrebbe essere considerato:

  • Assicurati che qualcosa sia pubblicato, non dare per scontato che $_POST['book'] esista.
  • Per favore mostraci tutte le variabili e le funzioni che stai utilizzando quando chiedi aiuto, mostrandoci i valori di $Hostname,$Username,$Password,$DatabaseName potrebbe effettivamente essere d'aiuto.
  • $PapierTableName? Basta definirlo nella query o associare anche il nome alla query.
  • Struttura la query come una stringa, quindi prepara la stringa che contiene la query.
  • Manca un punto e virgola nella query.
  • L'uso di $rit[$i] è inutile, l'uso di $rit[] =funziona altrettanto bene con l'aggiunta di dati all'array.
  • Dai un'occhiata a utf8_encode, penso che tu stia complicando eccessivamente il tuo codice.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) sta sovrascrivendo tutto ciò che fai, devi fare $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

Quindi combinato, qualcosa del genere sarà molto più strutturato:

<?php
$postedBook = isset($_POST['book']) ? $_POST['book'] : false;

if($postedBook != false)
{
    $Hostname = 'localhost';
    $Username = 'root';
    $Password = '';
    $DatabaseName = 'dbName';

    $book = normalize_str(htmlentities(preg_replace('/\s+/',' ', $postedBook), ENT_QUOTES,'UTF-8'));
    $filecat = '../books/'.$book.'/'.$book.'.txt';
    $catlist = file($filecat, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    $mysqli = new mysqli($Hostname, $Username, $Password, $DatabaseName);
    $stmt = $mysqli->stmt_init();

    $query = "SELECT * FROM PapierTable WHERE book = ? ORDER BY position ASC, title ASC;";
    $prepared = $stmt->prepare($query);

    if($prepared)
    {
        $stmt->bind_param('s', $book);
        $stmt->execute();
        $result = $stmt->bind_result($iden, $title, $price, $image, $description, $category, $enrat, $rating);
        if($result)
        {
            $rit = array();
            while($stmt->fetch())
            {
                $rit[] = array(
                    invert_str(html_entity_decode($title, ENT_QUOTES, 'UTF-8')),
                    $price,
                    invert_str(html_entity_decode($image, ENT_QUOTES, 'UTF-8')),
                    invert_str(html_entity_decode($description, ENT_QUOTES, 'UTF-8')),
                    invert_str(html_entity_decode($category, ENT_QUOTES, 'UTF-8')),
                    $enrat,
                    $rating
                );
            }
            $stmt->close();
            $count = count($catlist);
            $ret = array();
            for($i = 0; $i < $count ; $i++)
            {
                $ret[] = array_merge($ret, search($rit, 4, $catlist[$i]))
            }
            echo json_encode($ret);
        }
        else
        {
            file_put_contents('binderror.txt', $stmt->error);
        }
    }
    else
    {
        file_put_contents('connecterror.txt',$stmt->error);
    }
}
?>

Non sono sicuro che ciò risolverà il tuo problema, ma in caso contrario dovrebbe essere almeno molto più facile per te scoprire cosa c'è che non va.

La maggior parte degli errori che si verificano sono molto comuni e basilari, ma il codice non strutturato li rende un inferno da trovare.