Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Numer z bind_result przerywa tablicę php

Wyjaśnijmy sobie, że nie oszczędzasz czasu (ani nie upiększasz kodu) tworząc wiele zmiennych w jednym wierszu, naprawdę nadszedł czas, aby nacisnąć przycisk „enter” po wyrzuceniu średnika.

Powodem, dla którego nikt nie zadał sobie trudu, aby dać ci właściwą odpowiedź, jest to, że twój kod jest naprawdę trudny do odczytania.

Na początek powinieneś zacząć od lepszej struktury kodu, coś takiego również powinno być brane pod uwagę:

  • Właściwie upewnij się, że coś zostało opublikowane, nie zakładaj, że $_POST['book'] istnieje.
  • Pokaż nam wszystkie zmienne i funkcje, których używasz, gdy prosisz o pomoc. Wyświetlenie nam wartości $Hostname,$Username,$Password,$DatabaseName może w rzeczywistości pomóc.
  • $PapierTableName? Po prostu zdefiniuj ją w zapytaniu lub przypisz nazwę do zapytania.
  • Zorganizuj zapytanie jako ciąg, a następnie przygotuj ciąg, który zawiera zapytanie.
  • W zapytaniu brakuje średnika.
  • Używanie $rit[$i] jest bezcelowe, użycie $rit[] =działa równie dobrze z dołączaniem danych do tablicy.
  • Spójrz na utf8_encode, myślę, że nadmiernie komplikujesz swój kod.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) nadpisuje wszystko, co robisz, musisz zrobić $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

W połączeniu, coś takiego będzie znacznie bardziej uporządkowane:

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

Nie jestem pewien, czy to rozwiąże twój problem, ale jeśli tak się nie stało, powinno być przynajmniej o wiele łatwiej dowiedzieć się, co jest nie tak.

Większość występujących błędów jest bardzo powszechna i podstawowa, ale nieustrukturyzowany kod sprawia, że ​​trudno je znaleźć.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić ścieżkę klasy sterownika jdbc?

  2. Jaki jest najlepszy sposób na zmniejszenie liczby zapytań, gdy klasa DAO ma metody korzystające z tego samego wyniku?

  3. dostępność pokoi w hotelu mysql

  4. Czy w MySQL istnieje alternatywa dla TOP?

  5. MySQL - Błąd zduplikowanego wpisu podczas próby dodania nowej kolumny