sql >> Databasteknik >  >> RDS >> Mysql

Number från bind_result bryter arrayen php

Låt oss reda ut något, du sparar ingen tid (eller gör koden snyggare) genom att skapa flera variabler på en enda rad, det är verkligen dags att trycka på "enter"-knappen när du kastar ut semikolonet.

Anledningen till att ingen har brytt sig om att ge dig ett korrekt svar är för att din kod är väldigt svår att läsa.

Du bör till att börja med börja med att strukturera din kod mycket bättre, något i stil med detta bör också övervägas:

  • Se faktiskt till att något publiceras, anta inte att $_POST['bok'] existerar.
  • Visa oss alla variabler och funktioner du använder när du ber om hjälp, att visa oss värdena för $Hostname,$Username,$Password,$DatabaseName kan faktiskt hjälpa.
  • $PapierTableName? Definiera det bara i frågan, eller bind in namnet också i frågan.
  • Strukturera frågan som en sträng och förbered sedan strängen som innehåller frågan.
  • Du saknar ett semikolon i frågan.
  • Att använda $rit[$i] är meningslöst, att använda $rit[] =fungerar lika bra med att lägga till data till arrayen.
  • Ta en titt på utf8_encode, jag tror att du överkomplicerar din kod.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) skriver över allt du gör, du måste göra $ret[] =array_merge($ret, search($rit) , 4, $catlist[$i]));

Så tillsammans kommer något sådant här att vara mycket mer strukturerat:

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

Jag är inte säker på om det kommer att lösa ditt problem, men om det inte gjorde det borde det åtminstone vara mycket lättare för dig att ta reda på vad som är fel.

De flesta fel som uppstår är mycket vanliga och grundläggande, men ostrukturerad kod gör dem till ett helvete att hitta.




  1. pg gem sslmode=verify-full, var placerar man certifikat?

  2. välja på varandra följande nummer med SQL-fråga

  3. Oracle Export/Import problem med Tablespace

  4. Visa tidszonsbeskrivning i to_char() i Oracle