Неопределенное исключение «PDOException» с сообщением «SQLSTATE [08P01]

Здравствуйте, я пытаюсь создать файл search.php для веб-сайта с PDO и PSQL, и я новичок во всем этом, поэтому я получаю эту ошибку

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000001" requires 1' in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php:45 Stack trace: #0 C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php(45): PDO->query('SELECT * FROM b...') #1 {main} thrown in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\Library\search.php on line 45

и я не могу понять, почему, и я понятия не имею, что делать … если кто-то может мне помочь
Это файл search.php:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include '/database/dbc.php';
//$sesion_type = $_GET['search'];
$dbc = dbc();

$search = $_POST['q'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Library</title>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<link rel="icon" href="images/biblioteca1.jpg"/>
</head>

<body>
<div id="container">
<div id="header">
<h2>Search</h2>
</div>
<div id="menu">
<ul>
<li><a href="index.php">Home</a></li>
</ul>
<div id="tfheader">
<form id="tfnewsearch" method="get" action="http://localhost:8080/Library/search.php">
<input type="text" class="tftextinput" name="q" size="21" maxlength="120"><input type="submit" value="search" class="tfbutton">
</form>
<div class="tfclear"></div>
</div>

</div>
<div id="content">
<?php
try
{
$quer1 = "SELECT * FROM books WHERE title LIKE :search OR author LIKE :search OR genre LIKE :search OR editor LIKE :search";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
foreach($dbc->query($quer1) as $row )
{
?>
<td><?php echo($row['title']);?></td>
<td><?php echo($row['author']);?></td>
<td><?php echo($row['editor']);?></td>
<td><?php echo($row['price']);?></td>
<td><?php echo($row['genre']);?></td>
<td><?php echo($row['bookid']);?></td>
<?php
}
?>
</div>
<div id="footer">
</div>
</div>
</body>
</html>

1

Решение

Сообщение об ошибке говорит вам точно, в чем проблема. Ваш запрос имеет 1 связанный параметр, но вы не привязываете к нему никаких значений. Попробуйте что-то вроде этого:

try {
$quer1 = "SELECT * FROM books WHERE title LIKE :search OR author LIKE :search OR genre LIKE :search OR editor LIKE :search";
$sth = $dbc->prepare($quer1);
$sth->bindParam(':search', $search);
$sth->execute();

while($row = $sth->fetch()) {
// ...
}

} catch(PDOException $e) {
echo $e->getMessage();
}

Смотрите также пример в ручном вводе для bindParam. Обратите внимание, что я также завернул всю операцию внутри try блок. В вашем примере единственное, что находится внутри него, — это присвоение строковой переменной, что не имеет смысла, так как присвоение строки будет никогда бросить исключение.

Вы также можете привязать параметры к вашему запросу непосредственно внутри вызова execute:

$sth->execute(array(':search' => $search));

Есть также несколько вариантов, которые вы можете передать fetch метод, и есть пара разных методы выборки Вы можете позвонить, так что не забудьте проверить их и использовать то, что имеет для вас наибольшее значение.

2

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

Других решений пока нет …

По вопросам рекламы [email protected]