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

标签 php mysql database

我有一个连接表,它提供了我数据库中的所有书籍。所有书籍都正常显示。但我需要根据表单中输入的搜索查询来处理它。 这是我的加入查询。

$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>

如何获取仅使用相应搜索查询进行搜索的结果。例如,如果我搜索一本名为“Romeo Juliet”的书,我只需要显示该书

我尝试用此代码测试显示但从未成功

$titlequery = mysqli_query($connection," SELECT * FROM "$rs" WHERE Title = "$title" ");
$rows = mysqli_fetch_assoc($titlequery);

帮我解决这个问题。

最佳答案

您正在尝试执行子查询,但您传入的 $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 会将 "SELECT * FROM "$rs"WHERE Title = "$title"" 字符串解释为 SELECT * FROM,即 $rs 资源、WHERE Title =$title 变量和 ,但没有任何串联。您需要反斜杠您的 SQL 引用,例如 "SELECT * FROM\"$rs\"WHERE Title =\"$title\"",这样 PHP 就不会认为您想结束您的 SQL 引用。字符串。

关于php - 获取搜索表单的结果 - MySQL PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451247/

相关文章:

php - 使用php同时处理数据库中的多个条目

PHP/MySQL : Using array elements in WHERE clause using prepared statements

php - 在mysql中使用group by查询和order by查询进行选择

mysql - 在 INSERT 查询中传递列

php - 查询在逗号分隔列表mysql中查找值

database - 如何读取 Apache Derby 数据库日志?

php - 指导我使用 phpleague 库实现 Oauth2 PHP 服务器

php - 现在 Zend Query 已被弃用,在 url 中发布查询的最佳方式是什么?

php - 上传并保存图片路径到mysql

Oracle:将 VARCHAR2 列更改为 CLOB