我有两张桌子;
图书 ,book_id ,mbook_id(与master_books表中的mbook_id的关系) ,org_id ,book_rating
master_books ,mbook_id ,BOOK_NAME ,book_authors ,book_summary ,book_pub_date ,book_ISBN10 ,book_ISBN13 ,book_image
现在的想法是master_books表中有一系列书籍,但是说有3个图书馆都有同一本书。书籍表只是引用书籍信息的master_books表ID而不是书的3个条目。
首先,我设置了一个简单的查询来获取所有书籍,如此;
$result = mysqli_query($link, "SELECT books.book_id, master_books.book_name, master_books.book_image FROM books JOIN master_books ON master_books.mbook_id WHERE org_id='" . $org_id . "'");
我正在使用以下内容输出数据;
$books = mysqli_fetch_array($result);
foreach($books as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
结果如下;
Key=0, Value=1
Key=book_id, Value=1
Key=1, Value=Picturepedia: 15 Plants (Picturepedia)
Key=book_name, Value=Picturepedia: 15 Plants (Picturepedia)
Key=2, Value=9780751350852.jpg
Key=book_image, Value=9780751350852.jpg
我试图弄清楚为什么它与Key = 0重复,然后是Key = book_id等等。以Key = 0,Key = 1,Key = 2开头的行不应该在那里
答案 0 :(得分:1)
如果您只想获取带有键名的数组而不是数字元素,请使用它:
$books = mysqli_fetch_array($result, MYSQLI_ASSOC);
答案 1 :(得分:0)
这是因为mysqli_fetch_array
收到2个参数而你忽略了第二个:resulttype
在文档中,您有3个选项:
MYSQLI_ASSOC
- 您会在阵列密钥MYSQLI_NUM
- 您在阵列密钥MYSQLI_BOTH
- 您会收到两个选项,都是重复的。 这是默认设置。 正如你所说
以Key = 0,Key = 1,Key = 2开头的行不应该在那里
我想你想这样称呼:$books = mysqli_fetch_array($result, MYSQLI_ASSOC);
答案 2 :(得分:0)
回复完全有效。
您存储在$books
中的mysqli_fetch_array()
返回的数组仅代表结果表中的一行。
您可以使用列名访问结果表的列,例如book_id
,或使用SELECT
语句中的位置:book_id
是您请求的第一个字段,因此索引0,book_name
是第二个,因此索引1等等类推。
如果您不想要或不需要带索引的条目,请改用mysqli_fetch_assoc()
。
要访问下一行,您必须使用循环:
while($books = mysqli_fetch_array($result)) {
// do stuff
}
只要另一行可用,这将获取另一行。获取完所有内容后,mysqli_fetch_array()
将返回NULL
,其结果为false
,循环将结束。