Итак, во-первых, я знаю, что при подготовке заявления LIKE
с PDO есть определенные правила. Я уже просмотрел их, и я стараюсь следовать им, но запрос неизменно возвращает результаты, хотя я знаю, что сам запрос является законным (клиент командной строки MySQL корректно работает с запросом).У вас возникли проблемы с подготовленным заявлением PDO и «LIKE»
Это для школьного проекта; Мне нужно сделать сайт с бэкэндом MySQL/php для вымышленного книжного магазина.
У меня есть класс в php-скрипте под названием DBConnection
. Он находится в отдельном пространстве имен (отсюда обратные косые черты для объектов и функций PDO). Это часть его:
<?php
class DBConnection {
// ...
public function prepAndExecute($sql, $args) {
try {
$stmt = $this->conn->prepare($sql);
for($i = 1; $i <= count($args); $i++) {
$stmt->bindValue($i, $args[$i-1], \PDO::PARAM_STR);
}
$stmt->execute();
return $stmt;
} catch(\PDOException $e) {
return false;
}
}
}
?>
Фактический запрос MySQL Я пытаюсь запустить:
SELECT ISBN, Title, Author, Price FROM Book WHERE Title LIKE "%rich%";
Моя попытка с помощью PDO подготовленное заявление, чтобы запустить это на сайте:
<?php
// based on the search form from the previous page
// (all values are set correctly by the form, already tested)
$criteria = $_POST["searchCriteria"]; // "Title" (from a <select> element)
$term = $_POST["searchTerm"]; // "rich" (from the text box)
$conn = new DBConnection(); // uses namespace correctly, just didn't
// include here for simplicity
$sql = "SELECT ISBN, Title, Author, Price FROM Book WHERE ? LIKE ?";
$stmt = $conn->prepAndExecute($sql, array($criteria, "%" . $term . "%"));
// I have also tried $term = "%" . $term . "%", still no luck
echo $stmt->rowCount(); // 0
?>
Я выполнил указанный выше запрос в командной строке MySQL и получил 1 результат, как ожидалось. Я знаю, что класс/функции работают, потому что я использую эту же функцию для запуска всех других запросов SELECT и INSERT, и у меня не было проблем, пока я не попытаюсь запустить этот оператор LIKE.
Я что-то не так? Потому что я дважды и тройной проверил все и мог поклясться, что делаю это правильно. ?
Я считаю, что вы не можете использовать '$ Criteria' /' ' 's имена столбцов – Class
благодарю вас @class - я просто воткнул переменную для имени столбца и работает , –