[英]How do I nest prepared statements?
我正在將一些舊代碼更新為准備好的語句,但之前的嵌套查詢不再有效。 我應該先創建一個單獨的數組然后循環遍歷它嗎? 如果是這樣,怎么做?
<?php
// GET BOOKS
$stmt=$mysqli->prepare('SELECT book_name, book_num, isbn FROM master_books WHERE id=?');
$stmt->bind_param('s', $book_id);
$stmt->execute();
$stmt->bind_result($book_name, $book_num, $isbn);
while ($stmt->fetch()) {
echo "<p>$isbn $book_name ($book_num)<br />\n";
// GET AUTHOR(S)
$stmt2=$mysqli->prepare('SELECT last_name, first_name FROM master_authors WHERE book_num=? ORDER BY last_name ASC');
$stmt2->bind_param('s', $book_num);
$stmt2->execute();
$stmt2->bind_result($last_name, $first_name);
$authors=array();
while ($stmt2=fetch()) {
$name="$last_name, $first_name";
$authors[]=$name;
}
echo implode(", ", $authors).'</p>';
}
$stmt->close();
$stmt2->close();
?>
使用JOIN並使用GROUP_CONCAT
聚合作者可以幫助您通過一個查詢來實現這一目標,並減少對額外嵌套循環的需求。
請參閱下面的可能編輯。
<?php
// GET BOOKS
$stmt=$mysqli->prepare("
SELECT
b.book_name,
b.book_num,
b.isbn,
GROUP_CONCAT(
CONCAT(a.last_name,', ' , a.first_name )
SEPARATOR ' , '
) as authors
FROM
master_books b
LEFT JOIN
master_authors a ON a.book_num = b.book_num
GROUP BY
b.book_name,
b.book_num,
b.isbn
WHERE b.id=?
");
$stmt->bind_param('s', $book_id);
$stmt->execute();
$stmt->bind_result($book_name, $book_num, $isbn, $authors);
while ($stmt->fetch()) {
echo "<p>$isbn $book_name ($book_num)<br />\n$authors</p>";
}
$stmt->close();
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.