Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Número de bind_result quebra o array php


Vamos esclarecer uma coisa, você não está economizando tempo (ou tornando o código mais bonito) criando várias variáveis ​​em uma única linha, é realmente hora de apertar o botão "enter" uma vez que você jogue fora seu ponto e vírgula.

A razão pela qual ninguém se preocupou em lhe dar uma resposta adequada é porque, bem, seu código é muito difícil de ler.

Você deve, para começar, começar estruturando melhor seu código, algo assim também deve ser considerado:
  • Certifique-se de que algo foi postado, não presuma que $_POST['book'] existe.
  • Mostre-nos todas as variáveis ​​e funções que você está usando quando pede ajuda, mostrando os valores de $Hostname,$Username,$Password,$DatabaseName pode realmente ajudar.
  • $PapierTableName? Basta defini-lo na consulta ou vincular o nome também à consulta.
  • Estruture a consulta como uma string e prepare a string que contém a consulta.
  • Está faltando um ponto e vírgula na consulta.
  • Usar $rit[$i] é inútil, usar $rit[] =funcionará tão bem para anexar dados ao array.
  • Dê uma olhada em utf8_encode, acho que você está complicando demais seu código.
  • $ret =array_merge($ret, search($rit, 4, $catlist[$i])) está substituindo tudo que você faz, você tem que fazer $ret[] =array_merge($ret, search($rit , 4, $catlist[$i]));

Então combinado, algo assim será muito mais estruturado:
<?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);
    }
}
?>

Não tenho certeza se isso resolverá seu problema, mas se não resolver, pelo menos deve ser muito mais fácil para você descobrir o que está errado.

A maioria dos erros que ocorrem são muito comuns e básicos, mas o código não estruturado os torna um inferno de encontrar.