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