【问题标题】:php pagination get a mysql error [closed]php分页得到一个mysql错误[关闭]
【发布时间】:2012-09-12 20:51:12
【问题描述】:

我有一个页面,我在相册中添加了分页并且工作正常,但我发现了一个问题。为了检查目的,我在 url 中输入了一些值,例如 ?page=a 或 ?page=0.1 (使用 ?page=1、?page=2 等整数没有任何错误)并显示此错误:

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,以在第 7 行的 '-15 , 15' 附近使用正确的语法”

所以如果用户尝试输入这样的值,那会不会是一个安全问题?如何应用某种检查并防止这种情况发生?

这是我的代码

$per_page = 15;
$pages_query = mysql_query("SELECT COUNT(`album_id`) FROM `albums` ", $connection);
$pages = ceil(mysql_result($pages_query, 0) / $per_page);

$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;

$start = ($page - 1) * $per_page;
$query_get_imgs = "SELECT `albums`.`album_id`,
                                `albums`.`album_name`,
                                COUNT(`images`.`image_id`) AS `image_count`
                                FROM `albums` LEFT JOIN `images`
                                ON `albums`.`album_id`= `images`.`album_id`
                                GROUP BY `albums`.`album_id` ORDER BY `albums`.`album_id` DESC LIMIT {$start} , {$per_page} ";
$get_imgs = mysql_query($query_get_imgs, $connection) or die(mysql_error());
$row_get_imgs = mysql_fetch_assoc($get_imgs);
$totalRows_get_imgs = mysql_num_rows($get_imgs);

【问题讨论】:

  • 使用is_numeric验证page

标签: php pagination mysql-error-1064


【解决方案1】:

试试这个

$page = (isset($_GET['page']) && is_numeric($_GET['page'])) ? (int)$_GET['page'] : 1;

【讨论】:

    【解决方案2】:

    为避免此问题,您需要检查$start 是否大于或等于0。

    【讨论】:

    • 好的,所以我必须确保 $start > 0 ??我实际上如何在此 $start = ($page - 1) * $per_page; 中应用此检查
    • $start = ($page - 1) * $per_page; $start = $start > 0 ? $start : 0;$start = $page > 0 ? ($page - 1) * $per_page : 0;
    【解决方案3】:

    if($page<1) 呢? (但不,这不是安全风险)。

    【讨论】:

      【解决方案4】:

      当页面从 0 开始时

      $start = ($page - 1) * $per_page;
      
      $start = -15 and that is wrong because the index start from 0
      

      你需要给 0 一个特例

      【讨论】:

      • 好的,所以我必须确保 $start > 0 ??我实际上如何在此 $start = ($page - 1) * $per_page; 中应用此检查
      【解决方案5】:

      以及同一主题的另一个变体;-)

      $start = (max(1, $page)-1) * $per_page;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 2014-11-11
        • 2013-03-29
        相关资源
        最近更新 更多