Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zahl von bind_result unterbricht das Array php

Lassen Sie uns etwas klarstellen, Sie sparen keine Zeit (oder machen den Code hübscher), indem Sie mehrere Variablen in einer einzigen Zeile erstellen, es ist wirklich an der Zeit, die Eingabetaste zu drücken, sobald Sie Ihr Semikolon weggeworfen haben.

Der Grund, warum sich niemand die Mühe gemacht hat, Ihnen eine richtige Antwort zu geben, ist, dass Ihr Code wirklich schwer zu lesen ist.

Sie sollten zunächst damit beginnen, Ihren Code besser zu strukturieren, so etwas sollte auch in Betracht gezogen werden:

  • Stellen Sie sicher, dass etwas gepostet wird, gehen Sie nicht davon aus, dass $_POST['book'] existiert.
  • Bitte zeigen Sie uns alle Variablen und Funktionen, die Sie verwenden, wenn Sie um Hilfe bitten. Zeigen Sie uns die Werte von $Hostname, $Username, $Password, $DatabaseName, dies könnte tatsächlich hilfreich sein.
  • $PapierTableName? Definieren Sie es einfach in der Abfrage oder binden Sie den Namen auch in die Abfrage ein.
  • Strukturieren Sie die Abfrage als Zeichenfolge und bereiten Sie dann die Zeichenfolge vor, die die Abfrage enthält.
  • Ihnen fehlt ein Semikolon in der Abfrage.
  • Die Verwendung von $rit[$i] ist sinnlos, die Verwendung von $rit[] =funktioniert genauso gut mit dem Anhängen von Daten an das Array.
  • Schauen Sie sich utf8_encode an, ich glaube, Sie überkomplexieren Ihren Code.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) überschreibt alles, was Sie tun, Sie müssen $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

So kombiniert wird so etwas viel strukturierter sein:

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

Ich bin mir nicht sicher, ob das Ihr Problem beheben wird, aber wenn nicht, dann sollte es für Sie zumindest viel einfacher sein, herauszufinden, was falsch ist.

Die meisten auftretenden Fehler sind sehr häufig und grundlegend, aber unstrukturierter Code macht es schwer, sie zu finden.