Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le nombre de bind_result casse le tableau php

Soyons clairs, vous ne gagnez pas de temps (ou ne rendez pas le code plus joli) en créant plusieurs variables sur une seule ligne, il est vraiment temps d'appuyer sur le bouton "Entrée" une fois que vous avez jeté votre point-virgule.

La raison pour laquelle personne ne s'est donné la peine de vous donner une bonne réponse est que, eh bien, votre code est vraiment difficile à lire.

Vous devriez, pour commencer, commencer par mieux structurer votre code, quelque chose comme ceci devrait également être considéré :

  • Assurez-vous que quelque chose est publié, ne supposez pas que $_POST['book'] existe.
  • Veuillez nous montrer toutes les variables et fonctions que vous utilisez lorsque vous demandez de l'aide, en nous montrant les valeurs de $Hostname,$Username,$Password,$DatabaseName qui pourraient réellement aider.
  • $PapierTableName ? Définissez-le simplement dans la requête ou liez également le nom dans la requête.
  • Structurez la requête sous forme de chaîne, puis préparez la chaîne contenant la requête.
  • Il manque un point-virgule dans la requête.
  • Utiliser $rit[$i] est inutile, utiliser $rit[] =fonctionnera aussi bien avec l'ajout de données au tableau.
  • Jetez un œil à utf8_encode, je pense que vous compliquez trop votre code.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) écrase tout ce que vous faites, vous devez faire $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

Ainsi combiné, quelque chose comme ceci sera beaucoup plus structuré :

<?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);
    }
}
?>

Je ne sais pas si cela résoudra votre problème, mais si ce n'est pas le cas, il devrait au moins être beaucoup plus facile pour vous de découvrir ce qui ne va pas.

La plupart des erreurs qui se produisent sont très courantes et basiques, mais le code non structuré les rend infernales à trouver.