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 已验证,它应该返回两行。我已经注释掉了循环中的所有内容并添加了该行$content .= 'test';并将返回语句更改为echo $content;并且该函数成功地回显了两次“测试”。那么我所做的有什么问题呢?

感谢您帮助我,我对 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()以查看是否有任何问题。

您应该检查的另一件事是,您的数据库中实际上有一行 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;

}

试着告诉我,如果可行,我会更新解释。

更新

代码已经更新,现在有两个查询,分别执行并检查。

于 2012-05-12T16:14:17.197 回答