【发布时间】:2013-11-30 21:36:04
【问题描述】:
这可能很简单,如果这是一个愚蠢的问题,我提前道歉。
我在一个网页上工作,我有一个数据库,我从中调用数据大部分工作正常,但是我需要使用 mysql 查询,而不仅仅是选择所有或特定字段:
$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
【问题讨论】:
-
您在 while 循环中使用了
mysql_fetch_object;所以你将结果作为一个对象而不是一个数组来获取;但mysql_fetch_array给你的作者 - 尽量保持一致 -
但是您在作者 SQL 查询中注入了任意数字
$loopnumber- 它与书籍没有任何关系,那么您实际上想做什么?由于您的作者查询使用连接,您为什么不加入您的图书查询? -
书籍可以有多个作者,作者可以写多本书,我有一个连接表来摆脱这种多对多的关系。还说明了查询有效,很好,我什至向您展示了数组输出值,所以我不明白您在说什么。请保持建设性,而不是批评已证明有效的方法。
-
至于不一致,是的,也许我应该使用 fetch 对象,但这并不能解决为什么我所拥有的东西不起作用。 loopnumber 也不是任意的,因为页面输出数据库中的所有书籍,其 ID 从 1 开始......一分钱掉了吗?我什至再次用值显示整个数组的输出,但你说我的 WHERE 子句中有一个不相关的值......
-
啊,是的,请原谅我的愚蠢;您的数据库保证只有连续的书籍 ID 号,并且永远不会有任何间隙;因此,您可以简单地创建一个额外的变量来使用,而不是使用实际的图书 ID.... 除非您使用单个连接查询完成所有这些操作,这会让您的生活变得更轻松