Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库选择查询中的特殊字符转义_Php_Mysql_Mysql Real Escape String - Fatal编程技术网

Php 数据库选择查询中的特殊字符转义

Php 数据库选择查询中的特殊字符转义,php,mysql,mysql-real-escape-string,Php,Mysql,Mysql Real Escape String,我有以下查询,如果名称包含特殊字符,则该查询不起作用: 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

我有以下查询,如果名称包含特殊字符,则该查询不起作用:

 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'in/var/www/searchcast.php:90堆栈跟踪:#0 /var/www/searchcast.php(90):PDO->prepare('selectdistinct…')#1 {main}在第90行的/var/www/searchcast.php中抛出

我试着按照建议添加mysql\u real\u escape\u字符串(s.movieName),但效果不太好

谁能帮帮我吗

感谢您,您可以在以下内容中阅读:

LIMIT子句可用于约束返回的行数 通过SELECT语句。LIMIT接受一个或两个数值参数, 必须是非负的整数常量(使用 编写的声明)

我认为错误与您使用的
偏移量
值有关(显然
-20
)。你必须想办法避免这个数字为负数

看到您的代码时,当
$page=0
转换为:

$offset = (0 - 1) * 20 = -20;
这就是错误。当
$page
值为0或类似值时,可以强制将其值设为1


希望有帮助。

我发现右括号让人困惑。@草莓:对不起,我刚刚编辑了我的问题
'-20,20'
美元偏移量真的是-20吗?@mihai:即使没有偏移量艺术,当我直接在DB中编写查询时,我也会收到同样的错误:“您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在“鱼故事”附近使用的正确语法。您可以使用查询和/或这些变量中的值编辑您的问题吗?