mysqli_stmt_execute () ожидает, что параметр 1 будет mysqli_stmt,

Привет, мне нужна помощь. В настоящее время я пытаюсь создать страницу поиска, на которой пользователь может искать конкретную книгу по названию книги, категории, году и издателю.

Я создал свою основную форму поиска HTML, и это код ниже:

<!DOCTYPE html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Page Title</title>
</head>
<body>
<form id ="SearchPage" action="SearchPage.php" method="get">
<h1> Search Page</h1>

Book Title <input type="text" name="bookTitle" />

Category <select name="catDesc">
<option value = "Business & Commerce">Business & Commerce</option>
<option value = "Databases">Databases</option>
<option value = "Databases and Web Development">Databases and Web Development</option>
<option value = "Fiction">Fiction</option>
<option value = "Flex & Flash Programming">Flex & Flash Programming</option>
<option value = "Netorks">Netorks</option>
<option value = "Programming">Programming</option>
<option value = "Systems Design">Systems Design</option>
<option value = "Web Development">Web Development</option>
</select>Publisher <input type="text" name="pubName"/>

Year <input type="text" name="bookYear"/>

<input type ="submit" value-"Find Books"/>

</form>
</body>
</html>

И это PHP-код, который я сделал ниже:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Search Page</title>
</head>
<body>
<table>
<tr>
<th>Book Title</th>
<th>Year</th>
<th>Category</th>
<th>Publisher</th>
</tr>
<?php

include 'database_mysqli_conn.php';

$bookTitle = $_REQUEST['bookTitle'];
$bookYear =$_REQUEST['bookYear'];
$catDesc =$_REQUEST['catDesc'];
$pubName =$_REQUEST['pubName'];

$sql = "SELECT bookTitle, bookYear, catDesc, pubName, FROM nbc_book b inner join nbc_category c on b.catID = c.catID inner join nbc_publisher p on b.pubID = p.pubID WHERE 1";

$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $bookTitle, $bookYear, $bookPrice, $catDesc);

if (!empty($bookTitle)) {

$sql= $sql." AND bookTitle = '$bookTitle'";

}

if (!empty($bookYear)) {

$sql= $sql." AND bookYear = '$bookYear'";

}

if (!empty($catDesc)) {

$sql= $sql." AND catDesc = '$catDesc'";

}

if (!empty($pubName)) {

$sql= $sql." AND pubName = '$pubName'";

}

while (mysqli_stmt_fetch($stmt)){
echo "<tr>
<td>$bookTitle</td>
<td>$bookYear</td>
<td>$catDesc</td>
<td>$pubName</td>
</tr>";
}

mysqli_stmt_close($stmt);
mysqli_close($conn);

?>

</body>
</html>

проблема в том, что это сообщение об ошибке, которое я получаю при отправке запроса:

Предупреждение: mysqli_stmt_execute () ожидает, что параметр 1 будет mysqli_stmt, логическое значение приведено в /home/unn_w11036829/public_html/PHPexercises/SearchPage.php в строке 27

Предупреждение: mysqli_stmt_bind_result () ожидает, что параметр 1 будет mysqli_stmt, логическое значение приведено в /home/unn_w11036829/public_html/PHPexercises/SearchPage.php в строке 28

Предупреждение: mysqli_stmt_fetch () ожидает, что параметр 1 будет mysqli_stmt, логическое значение приведено в /home/unn_w11036829/public_html/PHPexercises/SearchPage.php в строке 54

Предупреждение: mysqli_stmt_close () ожидает, что параметр 1 будет mysqli_stmt, логическое значение приведено в /home/unn_w11036829/public_html/PHPexercises/SearchPage.php в строке 63
Название книги Год Категория Издатель

Может кто-нибудь, пожалуйста, скажите мне, где я иду не так! Я застрял на этом в течение последнего часа, и это сводит меня с ума.

заранее спасибо

1

Решение

Не удалось подготовить запрос, не удалось проверить его и т. Д.

$sql = "SELECT bookTitle, bookYear, catDesc, pubName, FROM nbc_book b inner join ..."^--- stray comma

Никогда КОГДА-ЛИБО Предположим, что запрос БД будет успешным. Особенно в процессе разработки. Всегда предполагайте неудачу, проверяйте неудачу и рассматривайте успех как приятный сюрприз:

$stmt = mysqli_prepare($conn, $sql) or die(mysqli_error($conn));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2

Другие решения

МЕНЯТЬ

$sql = "SELECT bookTitle, bookYear, catDesc, pubName, FROM nbc_book b inner join nbc_category c on b.catID = c.catID inner join nbc_publisher p on b.pubID = p.pubID WHERE 1";

К

$sql = "SELECT bookTitle, bookYear, catDesc, pubName FROM nbc_book b inner join nbc_category c on b.catID = c.catID inner join nbc_publisher p on b.pubID = p.pubID WHERE 1";

Обратите внимание на запятую после вашего pubName.

РЕДАКТИРОВАТЬ: Вы должны обернуть ваш mysqli_stmt_execute ($ stmt) в if, чтобы убедиться, что вы ловите ошибки, как это

if(mysqli_stmt_execute($stmt)){
//YOUR CODE
}
else{
echo mysqli_stmt_error;
}
0