簡體   English   中英

如何嵌套准備好的語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM