获取搜索表单的结果-MySQL PHP

获取搜索表单的结果-MySQL PHP,php,mysql,database,Php,Mysql,Database,我有一个联接表,它提供了我数据库中的所有书籍。所有的书都陈列得很好。但我需要根据表单中输入的搜索查询进行处理。 这是我对join的查询 $rs = mysqli_query($connection,"SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,

我有一个联接表,它提供了我数据库中的所有书籍。所有的书都陈列得很好。但我需要根据表单中输入的搜索查询进行处理。 这是我对join的查询

$rs = mysqli_query($connection,"SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
            FROM books bk
            JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
                ON bk.id = cp.book_id
            JOIN category cat
                ON cat.id = bk.category_id
            JOIN publishers pub
                ON pub.id = bk.publisher_id
            JOIN books_covers bk_co
                ON bk_co.book_id = bk.id
            JOIN covers co
                ON co.id = bk_co.cover_id
            JOIN books_authors bk_aut
                ON bk_aut.book_id = bk.id
            JOIN authors aut
                ON aut.id = bk_aut.author_id
            JOIN books_languages bk_lan
                ON bk_lan.book_id = bk.id
            JOIN languages lan
                ON lan.id = bk_lan.lang_id
            JOIN books_locations bk_loc
                ON bk_loc.book_id = bk.id
            JOIN locations loc
                ON loc.id = bk_loc.location_id
            ORDER BY bk.title ASC
                ");
    $copies = mysqli_query($connection,"SELECT DISTINCT COUNT(copies.book_id) FROM copies INNER JOIN books ON copies.book_id=books.id
        ");
    $dup = mysqli_query($connection,"SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id");
    $rows_copies = mysqli_fetch_array($copies);
    $rows = mysqli_fetch_assoc($rs);
    $tot_rows = mysqli_num_rows($rs);
这是我的搜索表单变量

if(!empty($_GET)){
    $title = $_GET['title'];
    $author = $_GET['author'];
    $isbn = $_GET['isbn'];
    $language = $_GET['language'];
    $publisher = $_GET['publisher'];
    $year = $_GET['year'];
    $category = $_GET['category'];
}else{
    $title = "";
    $author = "";
    $isbn = "";
    $language = "";
    $publisher = "";
    $year = "";
    $category = "";
    $language = "";
}
这是我用来显示结果的代码

<div class="jumbo">
   <?php if($tot_rows > 0){  ?>
   <?php do { ?>
       <div class="col-md-3">
           <span class="product-image">

                <img src="<?php echo $rows['Cover'] ?>" class="img-thumbnail product-img" alt="">
            </span>
               <ul class="iteminfo">
                    <li><strong>Title: </strong><?php echo $rows['Title'] ?></li>
                    <li><strong>Category: </strong><?php echo $rows['Category'] ?></li>
                    <li><strong>Author: </strong><?php echo $rows['Author'] ?></li>
                    <li><strong>Price: </strong><?php echo $rows['Price']." Rs" ?></li>
                    <li><strong>Publisher: </strong><?php echo $rows['Publisher'] ?></li>
                    <li><strong>Copies: </strong><?php echo $rows['Copies'] ?></li>
                </ul>
        </div>
    <?php } while($rows=mysqli_fetch_assoc($rs)); }else{ ?>
    <?php echo 'No Results'; }?>
   </div>

请帮助我解决此问题。

您试图执行子查询,但传入的
$rs
变量是一个资源,而不是字符串。如果将原始查询设置为变量并将其传入,则该查询应能正常工作:

$sql = "SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
        FROM books bk
        JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
            ON bk.id = cp.book_id
        JOIN category cat
            ON cat.id = bk.category_id
        JOIN publishers pub
            ON pub.id = bk.publisher_id
        JOIN books_covers bk_co
            ON bk_co.book_id = bk.id
        JOIN covers co
            ON co.id = bk_co.cover_id
        JOIN books_authors bk_aut
            ON bk_aut.book_id = bk.id
        JOIN authors aut
            ON aut.id = bk_aut.author_id
        JOIN books_languages bk_lan
            ON bk_lan.book_id = bk.id
        JOIN languages lan
            ON lan.id = bk_lan.lang_id
        JOIN books_locations bk_loc
            ON bk_loc.book_id = bk.id
        JOIN locations loc
            ON loc.id = bk_loc.location_id
        ORDER BY bk.title ASC
            ";
$rs = mysqli_query($connection, $query);
$titlequery = mysqli_query($connection, " SELECT * FROM ({$query}) WHERE Title = '{$title}'");

另外,当需要使用PHP引号作为字符串分隔符时,请注意SQL查询中的引号。PHP将把“$rs”中的
“SELECT*”字符串解释为
SELECT*FROM
$rs
资源,
中的Title=
$Title
变量和
,但不进行任何连接。您需要反斜杠您的SQL引号,比如
“SELECT*FROM\“$rs\”其中Title=\“$Title\”
,这样PHP就不会认为您想要结束字符串。

mysqli\u fetch\u assoc
只返回一行。您必须在循环中调用它以获取所有行。在
$rs
查询中,您需要提供where语句,该语句将结果限制为搜索条件。而且,您不能像在
$titlequery
中那样在查询中传递
mysqli结果,首先,我认为您的SQL连接错误。每次像现在这样向SQL语句中添加变量时,都必须使用“.”来连接它,即“从“$rs.”中选择*,其中….”选择不同的计数(copies.book\u id)是什么从副本内部在副本上连接书籍。book_id=books.id
do?我之前添加了一个代码,以使书籍仅在添加副本时显示。否则它不会显示。
$sql = "SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
        FROM books bk
        JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
            ON bk.id = cp.book_id
        JOIN category cat
            ON cat.id = bk.category_id
        JOIN publishers pub
            ON pub.id = bk.publisher_id
        JOIN books_covers bk_co
            ON bk_co.book_id = bk.id
        JOIN covers co
            ON co.id = bk_co.cover_id
        JOIN books_authors bk_aut
            ON bk_aut.book_id = bk.id
        JOIN authors aut
            ON aut.id = bk_aut.author_id
        JOIN books_languages bk_lan
            ON bk_lan.book_id = bk.id
        JOIN languages lan
            ON lan.id = bk_lan.lang_id
        JOIN books_locations bk_loc
            ON bk_loc.book_id = bk.id
        JOIN locations loc
            ON loc.id = bk_loc.location_id
        ORDER BY bk.title ASC
            ";
$rs = mysqli_query($connection, $query);
$titlequery = mysqli_query($connection, " SELECT * FROM ({$query}) WHERE Title = '{$title}'");