sql >> Database >  >> RDS >> Mysql

Nummer van bind_result breekt de array php

Laten we iets rechtzetten, je bespaart geen tijd (of maakt de code mooier) door meerdere variabelen in een enkele regel te maken, het is echt tijd om op de "enter"-knop te drukken zodra je je puntkomma weggooit.

De reden waarom niemand de moeite heeft genomen om je een goed antwoord te geven, is omdat, nou ja, je code is echt moeilijk te lezen.

Je zou om te beginnen moeten beginnen met het veel beter structureren van je code, zoiets zou ook moeten worden overwogen:

  • Zorg er echt voor dat er iets wordt gepost, ga er niet vanuit dat $_POST['book'] bestaat.
  • Laat ons alle variabelen en functies zien die je gebruikt als je om hulp vraagt. Laat ons de waarden van $Hostname,$Username,$Password,$DatabaseName zien.
  • $PapierTableName? Definieer het gewoon in de query, of bind de naam ook in de query.
  • Structureer de query als een tekenreeks en bereid vervolgens de tekenreeks voor die de query bevat.
  • Je mist een puntkomma in de zoekopdracht.
  • Het gebruik van $rit[$i] is zinloos, het gebruik van $rit[] =werkt net zo goed met het toevoegen van gegevens aan de array.
  • Kijk eens naar utf8_encode, ik denk dat je je code te ingewikkeld maakt.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) overschrijft alles wat je doet, je moet doen $ret[] =array_merge($ret, search($rit) , 4, $catlist[$i]));

Dus gecombineerd, zal iets als dit veel meer gestructureerd zijn:

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

Ik weet niet zeker of dat je probleem zal oplossen, maar als dat niet het geval is, zou het in ieder geval veel gemakkelijker voor je moeten zijn om erachter te komen wat er mis is.

De meeste fouten die optreden zijn heel gewoon en eenvoudig, maar ongestructureerde code maakt ze moeilijk te vinden.




  1. Hoe kan ik uniciteit in een tabel afdwingen?

  2. FOUT 1005 MySQL Workbench Forward engineering

  3. Tips voor het upgraden van MySQL 5.7 naar MySQL 8

  4. oracle binaire gegevenstypen