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

时间:2015-02-07 13:20:13

标签: 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
              , 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/sea​​rchcast.php:90堆栈跟踪:#0   /var/www/sea​​rchcast.php(90):PDO->准备(' SELECT DISTINCT ...')#1   {main}在第90行的/var/www/sea​​rchcast.php中抛出

我尝试按照建议的here添加mysql_real_escape_string(s.movi​​eName),但它也没有用。

有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以阅读documentation

  

LIMIT子句可用于约束返回的行数   通过SELECT语句。 LIMIT需要一个或两个数字参数,   必须都是非负整数常量(使用时除外)   准备好的陈述)。

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

查看代码时,$page = 0转换为:

时会变为负数
$offset = (0 - 1) * 20 = -20;

因而错误。您可以强制$page的值为0时的值或类似值。

希望它有所帮助。