sql >> データベース >  >> RDS >> Mysql

bind_resultからの数値は、配列phpを壊します

    簡単に言えば、1行に複数の変数を作成することで時間を節約する(またはコードをより美しくする)ことはありません。セミコロンを捨てたら、「Enter」ボタンを押すときです。

    誰もあなたに適切な答えをわざわざ与えなかった理由は、まあ、あなたのコードは本当に読みにくいからです。

    まず、コードをより適切に構造化することから始めるべきです。次のようなことも検討する必要があります。

    • 実際に何かが投稿されていることを確認してください。$_POST['book']が存在するとは限りません。
    • ヘルプを求めるときに使用しているすべての変数と関数を示してください。$Hostname、$ Username、$ Password、$DatabaseNameの値が実際に役立つ可能性があります。
    • $ PaperierTableName?クエリで定義するか、名前もクエリにバインドします。
    • クエリを文字列として構造化し、クエリを保持する文字列を準備します。
    • クエリにセミコロンがありません。
    • $ 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. MySQLで2つのクエリ結果が等しいかどうかを比較するにはどうすればよいですか?

    2. SQLの条件の実行順序'where'句

    3. PEARの代替:PHP5.3上のMDB2

    4. ORA-21700:オブジェクトが存在しないか、ODP.NETから呼び出された入力パラメータとして連想配列の削除のマークが付けられています