sql >> Databáze >  >> RDS >> Mysql

Číslo z bind_result porušuje pole php

Abychom si něco ujasnili, neušetříte žádný čas (ani neuděláte kód hezčím) vytvářením více proměnných na jednom řádku, je opravdu čas stisknout tlačítko "enter", jakmile vyhodíte středník.

Důvod, proč se nikdo neobtěžoval vám dát správnou odpověď, je ten, že váš kód je opravdu těžko čitelný.

Pro začátek byste měli začít tím, že svůj kód strukturujete mnohem lépe, mělo by se zvážit i něco takového:

  • Ve skutečnosti se ujistěte, že je něco zveřejněno, nepředpokládejte, že $_POST['book'] existuje.
  • Ukažte nám prosím všechny proměnné a funkce, které používáte, když žádáte o pomoc. Ukažte nám hodnoty $Hostname,$Username,$Password,$DatabaseName, které by mohly skutečně pomoci.
  • $PapierTableName? Stačí jej definovat v dotazu nebo svázat název také s dotazem.
  • Strukturujte dotaz jako řetězec a poté připravte řetězec, který obsahuje dotaz.
  • V dotazu vám chybí středník.
  • Použití $rit[$i] je zbytečné, použití $rit[] =will funguje stejně dobře jako při přidávání dat do pole.
  • Podívejte se na utf8_encode, myslím, že svůj kód zbytečně komplikujete.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) přepisuje vše, co děláte, musíte udělat $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

Takže v kombinaci bude něco takového mnohem strukturovanější:

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

Nejsem si jistý, zda to váš problém vyřeší, ale pokud ne, mělo by být pro vás přinejmenším mnohem snazší zjistit, co je špatně.

Většina chyb, které se vyskytují, je velmi běžná a základní, ale nestrukturovaný kód je dělá peklo.




  1. Spusťte uloženou proceduru pomocí entity framework

  2. Kontingenční data v T-SQL

  3. Aktualizovat, pokud existuje, vložit, pokud neexistuje

  4. V Oracle, pokud jde o syntaxi - jak převedu (+) syntaxi na moderní konvenční JOIN?