Mysql
 sql >> база данни >  >> RDS >> Mysql

Число от bind_result прекъсва масива php

Нека да разберем нещо, не спестявате време (или не правите кода по-красив), като създавате множество променливи в един ред, наистина е време да натиснете бутона „въвеждане“, след като изхвърлите точката и запетая.

Причината, поради която никой не си е направил труда да ви даде подходящ отговор, е, че вашият код е наистина труден за четене.

Като начало трябва да започнете, като структурирате по-добре кода си, нещо подобно също трябва да се обмисли:

  • Всъщност се уверете, че нещо е публикувано, не предполагайте, че $_POST['book'] съществува.
  • Моля, покажете ни всички променливи и функции, които използвате, когато поискате помощ, показвайки ни стойностите на $Hostname,$Username,$Password,$DatabaseName наистина може да помогне.
  • $PapierTableName? Просто го дефинирайте в заявката или свържете името също в заявката.
  • Структурирайте заявката като низ, след което подгответе низа, който съдържа заявката.
  • В заявката ви липсва точка и запетая.
  • Използването на $rit[$i] е безсмислено, използването на $rit[] =ще работи добре с добавяне на данни към масива.
  • Погледнете utf8_encode, мисля, че прекалено усложнявате кода си.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) презаписва всичко, което правите, трябва да направите $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

Така комбинирано нещо подобно ще бъде много по-структурирано:

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

Не съм сигурен дали това ще реши проблема ви, но ако не го реши, би трябвало поне да ви бъде много по-лесно да разберете какво не е наред.

Повечето от грешките, които възникват, са много чести и основни, но неструктурираният код ги прави трудни за намиране.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете локална база данни с помощта на mysql?

  2. Как да интегрирам Asterisk сървър с външна релационна база данни, като mysql?

  3. Използвайки PHP MYSQLi как да управлявате само длъжници и само кредитори с action_type DR и CR

  4. PDOStatement::rowCount резултат, когато се използва след PDO::commit?

  5. MySQL Connector C++ 64-битова компилация от източник във Visual Studio 2012