1

loadContent()呼び出されたときにデータベースにクエリを実行し、データをフォーマットして結果を返す関数があります。これは非常に原始的な CMS を構築するために使用されており、この関数はデータベースから記事をロードするために使用されています。

関数は次のとおりです。

    $articles = mysql_query("SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`='$pageID'");
            if(!$articles){
                die('Error!: ' . mysql_error());
            }
            while($arts = mysql_fetch_assoc($articles)){
                $content .= '<div class="article" id="art-' . $arts['id'] . '">';
                $content .= '<h1>' . $arts['name'] . '</h1>';
                $content .= $arts['content'];
                $content .= '</div>';
            }
        return $content; 
    }else{

私の問題は、何も返されないことです。SQL が検証され、2 つの行が返されます。ループ内のすべてをコメントアウトして行を追加し$content .= 'test';、return ステートメントを に変更するecho $content;と、関数は "test" を 2 回正常にエコーしました。それで、私がしたことの何が問題なのですか?

私を助けてくれてありがとう、私はPHPにかなり慣れていません。

アップデート:

投稿はすべての有効な変更を表すようになりました。

私はどこかに行きましたvar_dump。ステートメント$contentの直前にダンプしました。returnデータベース内のすべての記事 (そのうちの 2 つ) が の中に表示されましたstring(2445) ""。これにより、クエリに問題がないことが確認されます。私は今、return ステートメントと関係があると考えています。

4

4 に答える 4

3

これが関連しているかどうかはわかりませんが、最初のdivタグを閉じたことがないようです。id 属性の引用符も閉じません (アポストロフィで開き、引用符を連結します)。

すなわち:

... id='art-" . $arts['id'] . "'></div>";
于 2012-05-12T15:40:21.177 に答える
1

コードを次のように更新してみてください。

function loadContent(){
   $content = '';
   $pageID = 1;
   //
   $articles = mysql_query("SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` 
                            FROM `tb_articles` 
                            WHERE `page_id`='$pageID'");

        // you only need the associative array
        while($arts = mysql_fetch_array($articles, MYSQL_ASSOC)){
            // close your tag properly and use the concat operator
            $content .= '<div class="article" id="art-' . $arts['id'] . '">';
            $content .= '<h1>' . $arts['name'] . '</h1>';
            $content .= $arts['content'];
            $content .= '</div>';
        }

    return $content;

 }

mysql_error()また、呼び出しの後に実行して、mysql_query()問題が発生していないかどうかを確認することもできます。

もう1つ確認する必要があるのは、データベースにpage_idが1に等しい行が実際に存在するようにすることです。また、列名が正しいことを確認する必要があります。

于 2012-05-12T15:44:50.817 に答える
1
$content .= "<div class='article' id='art-" . $arts['id'] . '"'; 

そしてそれはあるべきです

$content .= "<div class='article' id='art-" . $arts['id'] . "'"; 
于 2012-05-12T16:25:58.870 に答える
0

これを試して

error_reporting(E_ALL);
ini_set("display_errors", 1);

function loadContent(){
   $content = '';
   $pageID = 1;
   $myQuery = "SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`='{$pageID}'";
   echo $myQuery;
   $myQuery = "SELECT `id`, `name`, `content`, `keywords`, `description`, `access_level` FROM `tb_articles` WHERE `page_id`=" . $pageID;
   echo $myQuery;
   $articles = mysql_query($myQuery) or die("Error found with the Query" . mysql_error());

        while($arts = mysql_fetch_assoc($articles)){
                $content .= "<div class='article' id='art-" . $arts['id'] . '"';
            $content .= '<h1>' . $arts['name'] . '</h1>';
            $content .= $arts['content'];
            $content .= '</div>';
        }

    return $content;

}

試して教えてください。うまくいく場合は、説明を更新します。

アップデート

コードが更新されました。現在2つのクエリがあり、それぞれを単独で実行してチェックします。

于 2012-05-12T16:14:17.197 に答える