【问题标题】:ORDER BY date while also using LIMIT in a MySQL query - PHPORDER BY date 同时在 MySQL 查询中使用 LIMIT - PHP
【发布时间】:2010-11-07 05:29:15
【问题描述】:

你好,

我不太明白这一点,我正在尝试从 MySQL 中提取记录,按时间倒序排列并将结果限制为每页四个(并使用分页来组织页面)。它目前正在返回此错误:

致命错误:第 126 行 /Users/allan/Sites/4is_site/casestudylist.php 中的 SQL

$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM studies  ORDER BY date desc WHERE niche = '{$_GET['niche']}' $limit";

分页工作正常,刚才我尝试添加我遇到问题的 ORDER BY。

【问题讨论】:

  • 另外,我听说我需要逃避这个:'{$_GET['niche']}',我该怎么做?

标签: php mysql pagination sql-order-by


【解决方案1】:

该语法不正确。这应该可以。

$escapedNiche = mysql_real_escape_string($_GET['niche']);
$query = "SELECT * FROM studies WHERE niche = '$escapedNiche' ".
         "ORDER BY date DESC $limit";

供将来参考 - SELECT Syntax

【讨论】:

    【解决方案2】:

    顺便说一句,要转义 $_GET['niche']:

    $clean_niche = mysql_escape_string($_GET['niche']);
    $limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
    $query = "SELECT * FROM studies  "
            ."WHERE niche = '{$clean_niche}' "
            ."ORDER BY date desc $limit";
    

    这将通过转义 $_GET['niche'] 中的字符来帮助保护您免受 SQL 注入攻击。

    为了提高安全性,请考虑使用绑定参数 (google'em) 和/或 Zend DB 等库函数来访问数据库。

    【讨论】:

    • mysql_escape_string 仅在输入被引号包围时才清理输入。要清理限制,您可以使用 is_numeric() 验证“niche”参数是否为整数。
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多