来自mysql php数组的值未显示

时间:2013-11-30 21:36:05

标签: php mysql sql arrays

这可能非常简单,我提前道歉,如果这是一个愚蠢的问题。

我在一个网页上工作,我有一个数据库,我调用的数据大部分工作正常,但我需要使用mysql查询,而不仅仅是选择所有或特定字段:< / p>

$sqlAuthors = ('SELECT authors.Forename, authors.Surname
                         FROM authors
                         LEFT JOIN BookAuthor ON  authors.AuthorID = BookAuthor.AuthorID
                         LEFT JOIN Books ON  BookAuthor.BookID = Books.BookID
                         WHERE Books.BookID="'.$loopnumber.'"');

这个查询我已经在数据库上测试过并且工作正常,查询将会有多个记录。

我的代码是:

$conn = mysql_connect('localhost', 'root', '');
        mysql_select_db('library', $conn);
        $sql = "SELECT * FROM Books";
        $result = mysql_query($sql, $conn) or die("Can't run query");
        $loopnumber = 1;                            
        if (mysql_num_rows($result) ==0 ){echo "No Books have been found";}
        else
        {
            while ($row = mysql_fetch_object($result)) 
            {
                $sqlAuthors = ('SELECT authors.Forename, authors.Surname
                         FROM authors
                         LEFT JOIN BookAuthor ON  authors.AuthorID = BookAuthor.AuthorID
                         LEFT JOIN Books ON  BookAuthor.BookID = Books.BookID
                         WHERE Books.BookID="'.$loopnumber.'"');
                $Authors  = mysql_query($sqlAuthors,$conn);

                echo'<article class="topContent">
                    <header><h2><a href="../ResponsiveCSS/first post">'.$row->BookName.'</a></h2></header>                   
                    <footer><p class="post-info">Written By: '.print_r(mysql_fetch_array($Authors)).' '.$Authors[Forename].'</p></footer>

最后一行是我尝试输出值的地方。

但是,如果我有$ Authors [Forename],它会给我错误:

Notice: Use of undefined constant Forename - assumed 'Forename' in I:\xamptest\htdocs\Library\index.php on line 51

即使我有:

print_r(mysql_fetch_array($Authors))

并且工作和输出:

Array ( [0] => J.R.R [Forename] => J.R.R [1] => Tolkien [Surname] => Tolkien )

因此它应该识别它,同样阵列打印出现在它所在的线附近,甚至不是相同的DIV,但它应该在那里只有“1”回显。

如果我尝试:

'.$Authors[1].'

然后我没有错误,但没有打印出来。

不知道它是否会有所帮助,但下面是网站页面的部分:http://i.imgur.com/mMEQke5.png

应该打印作者名称,其中写着“写入:”,而只是“1”。

我还是比较陌生,但我很难过。

所有人都非常感谢-Tom

1 个答案:

答案 0 :(得分:0)

您的大量代码需要清理,但我们可以在解决手头的问题后专注于此。

$Authors  = mysql_query($sqlAuthors,$conn);

从查询中返回一个结果集,没有问题(除了不推荐使用mysql_query()之外,我们可以稍后讨论:)

现在,让我们假设一本书可能有多位作者,就像许多参考文献中的情况一样,并且因为你已经在你所回归的所有书籍上循环。让我们继续,将我们的新结果集放入与您已经完成的类似的循环中:

while($author_row = mysql_fetch_array($Authors)){
    echo $author_row['Forename'];
}

上面的代码完全不完整,但希望它是你需要做的起点。

只需注意几点:不推荐使用mysql _ *(),所以请尽快切换到使用mysqli API!如果你不这样做,人们会开始在这里大喊大叫;)

确保在清理安全性后使用预准备语句。如果你做得对,容易防止,但sql注射是令人讨厌的。