我有以下查询,如果名称包含特殊字符,则不起作用:
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->准备(' SELECT DISTINCT ...')#1 {main}在第90行的/var/www/searchcast.php中抛出
我尝试按照建议的here添加mysql_real_escape_string(s.movieName),但它也没有用。
有人可以帮助我吗?
由于
答案 0 :(得分:0)
您可以阅读documentation:
LIMIT子句可用于约束返回的行数 通过SELECT语句。 LIMIT需要一个或两个数字参数, 必须都是非负整数常量(使用时除外) 准备好的陈述)。
我认为错误与您使用的offset
值有关(显然是-20
)。你必须想办法避免这个数字为负数。
查看代码时,$page = 0
转换为:
$offset = (0 - 1) * 20 = -20;
因而错误。您可以强制$page
的值为0时的值或类似值。
希望它有所帮助。