У меня есть следующий запрос, который не работает в случае, если имя содержит специальные символы:
case 'byMovie':
$items_per_page = 20;
$offset = 0;
$page_count = 0;
include('Connection.php');
$query1 = $conn->prepare("SELECT DISTINCT s.starName
, s.starImdbID
, s.movieName
, p.posterLink
FROM star_film as s
LEFT
JOIN star_Posters as p
ON s.starImdbID = p.starImdbID
WHERE s.movieName LIKE :q
");
$query1->execute(array(':q' => '%' . $searchText . '%'));
$row_count = $query1->rowCount();
$page_count = (int)ceil($row_count / $items_per_page);
$page = min($page_count, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 1,
'min_range' => 1,
),
)));
if($page > $page_count) { //double check that request page is in range
$page = 1; // error to user, maybe set page to 1
}
$offset = ($page - 1) * $items_per_page;
$query = $conn->prepare("SELECT DISTINCT s.starName, s.starImdbID, s.movieName, p.posterLink FROM star_film as s LEFT JOIN star_Posters as p ON s.starImdbID = p.starImdbID WHERE s.movieName LIKE :q LIMIT " . $offset . "," . $items_per_page);
$query->execute(array(':q' => '%' . $searchText . '%'));
break;
}
Например, если фильм называется «Рыбная история», он показывает мне эту ошибку:
Неустранимая ошибка: необработанное исключение ‘PDOException’ с сообщением
‘SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064
ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашему
Версия сервера MySQL для правильного синтаксиса, чтобы использовать около ‘-20,20’ в строке
1 ‘в /var/www/searchcast.php:90 Трассировка стека: # 0
/var/www/searchcast.php(90): PDO-> prepare (‘SELECT DISTINCT …’) # 1
{main} добавлено в /var/www/searchcast.php в строке 90
Я попытался с добавлением mysql_real_escape_string (s.movieName), как предложено Вот, но это тоже не сработало.
Может ли кто-нибудь любезно помочь мне?
Спасибо
Как вы можете прочитать в документация:
Предложение LIMIT может использоваться для ограничения количества возвращаемых строк.
с помощью оператора SELECT. LIMIT принимает один или два числовых аргумента,
которые оба должны быть неотрицательное целочисленные константы (кроме случаев использования
подготовленные заявления).
Я думаю, что ошибка связана с offset
значение, которое вы используете (по-видимому, -20
). Вы должны найти способ избежать отрицательного числа.
Видя ваш код, он становится отрицательным, когда $page = 0
что переводится как:
$offset = (0 - 1) * 20 = -20;
и, следовательно, ошибка. Вы могли бы заставить значение $page
быть одним, когда это 0 или что-то в этом роде.
Надеюсь, поможет.
Других решений пока нет …