繁体   English   中英

无法在php和mysql中执行查询

[英]Unable to execute query in php & mysql

下面给出的是我的查询代码。 我正在使用PDO。

search.php页面:

<?php

    //Retrieving input values
    if(!empty($_POST)) {

        //Extracting input field values
        $book_id = $_POST['search_book_id'];
        $title = $_POST['search_title'];
        $author_name = $_POST['search_author_name'];

        //Calling function to execute the query
        $results_search_book = search_book($book_id, $title, $author_name);


        //Echoing out the query results

        if(count($results_search_book) > 0) {

          echo "<tbody>";


          foreach ($results_search_book as $row) {
            echo "$rowStart";

            echo "$row[TITLE]";

            echo "$rowEnd";
          }
          echo "</tbody>";
        } else {
            echo "<tfoot>";
            echo "<td colspan='4'>The query returned an empty set!</td>";
            echo "</tfoot>";
        }

    } else {
        echo "<tfoot>";
        echo "<td colspan='4'>No content to display, you haven't run a query yet!<br>Error custom message!</td>";
        echo "</tfoot>";
    }


  ?>

这是functions.php页面,它连接到db和查询。 我正在尝试调用函数search_book($book_id, $title, $author_name); 并返回结果集以进行打印。

这是functions.php页面:

function search_book($x, $y, $z) {
    $conn = connect_db();

    $book_id = $x;
    $title = '%' . $y . '%';
    $author_name = '%' . $z . '%';

    echo $book_id;
    echo $title;
    echo $author_name;
    try {

        //Preapring the query
        $results = $conn->prepare("SELECT TITLE, A.BRANCH_NAME, A.BRANCH_ID, NO_OF_COPIES, COUNT(BOOK_LOANS.BOOK_ID) AS NUM_OUT, NO_OF_COPIES - COUNT(BOOK_LOANS.BOOK_ID) AS NUM_AVAIL, AUTHOR_NAME
                                    FROM
                                        (SELECT TITLE, BOOK.BOOK_ID, BOOK_COPIES.BRANCH_ID, BRANCH_NAME, NO_OF_COPIES, BOOK_AUTHORS.AUTHOR_NAME
                                        FROM BOOK,BOOK_COPIES,LIBRARY_BRANCH,BOOK_AUTHORS
                                        WHERE BOOK_COPIES.BOOK_ID=BOOK.BOOK_ID AND BOOK_AUTHORS.BOOK_ID = BOOK.BOOK_ID AND (BOOK.TITLE LIKE :title OR BOOK.BOOK_ID = :book_id OR BOOK_AUTHORS.AUTHOR_NAME LIKE :author_name)
                                        AND BOOK_COPIES.BRANCH_ID=LIBRARY_BRANCH.BRANCH_ID) AS A
                                        LEFT OUTER JOIN BOOK_LOANS ON A.BOOK_ID=BOOK_LOANS.BOOK_ID AND A.BRANCH_ID=BOOK_LOANS.BRANCH_ID
                                        GROUP BY A.BOOK_ID, A.BRANCH_ID");


        //Executing the query
        $results->bindParam(':book_id', $book_id, PDO::PARAM_STR);
        $results->bindParam(':title', $title, PDO::PARAM_STR);
        $results->bindParam(':author_name', $author_name, PDO::PARAM_STR);
        $results->execute();

        $data = $results->fetchAll();
        return $data;


    } catch(PDOException $e) {
        echo 'ERROR: Book Search query failed!';
    }
}

我得到所有的行作为回报,而我只需要合格的行。

这解决了第一个问题,您错过了最后一个(也是)最重要的部分: 获取

$returnValues = array();
if ($stmt = $results->execute())
{
    while ($data = $stmt->fetch()) 
    {
      $returnValues[] = $data;
    }
}
return $returnValues;

现在,您发布了更多的代码,而在sql查询中,检索所有结果或仅寻找所需内容的问题就出在SQL查询中,我认为您应该考虑从头开始重新启动,并更好地考虑要实现的结果:不要认为您需要2个子查询,3个自然连接和1个LEFT OUTER JOIN来完成任务。

因为您什么都不输出。 您只需执行查询,甚至不检查结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM