这可能非常简单,我提前道歉,如果这是一个愚蠢的问题。
我在一个网页上工作,我有一个数据库,我调用的数据大部分工作正常,但我需要使用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
答案 0 :(得分:0)
您的大量代码需要清理,但我们可以在解决手头的问题后专注于此。
$Authors = mysql_query($sqlAuthors,$conn);
从查询中返回一个结果集,没有问题(除了不推荐使用mysql_query()之外,我们可以稍后讨论:)
现在,让我们假设一本书可能有多位作者,就像许多参考文献中的情况一样,并且因为你已经在你所回归的所有书籍上循环。让我们继续,将我们的新结果集放入与您已经完成的类似的循环中:
while($author_row = mysql_fetch_array($Authors)){
echo $author_row['Forename'];
}
上面的代码完全不完整,但希望它是你需要做的起点。
只需注意几点:不推荐使用mysql _ *(),所以请尽快切换到使用mysqli API!如果你不这样做,人们会开始在这里大喊大叫;)
确保在清理安全性后使用预准备语句。如果你做得对,容易防止,但sql注射是令人讨厌的。