首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP返回按主键查询的结果集

PHP返回按主键查询的结果集
EN

Stack Overflow用户
提问于 2018-08-27 03:42:37
回答 1查看 74关注 0票数 1

我试图按发布日期以降序从数据库中提取前X行,但是我发现,尽管如果直接在我的本地数据库上执行查询,效果会很好,但在PHP中,结果集始终是按主键的顺序执行的。下面是这段代码:

代码语言:javascript
复制
public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM blogs
        ORDER BY " . ":order" . " LIMIT :numRows";

$st = $conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->bindValue( ":order", $order, PDO::PARAM_STR);
$st->execute();
$list = array();

while ( $row = $st->fetch() ) {
  echo $row['id'];
  $article = new Blogpost( $row );
  $list[] = $article;
}


// Now get the total number of articles that matched the criteria
$sql = "SELECT FOUND_ROWS() AS totalRows";
$totalRows = $conn->query( $sql )->fetch();
$conn = null;
return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
}

运行此命令时,回显的输出如下: 50 51 52 53 54

数据库是使用以下查询创建的(以显示结构):

代码语言:javascript
复制
 DROP TABLE IF EXISTS blogs;
 CREATE TABLE blogs
(
  id              smallint unsigned NOT NULL auto_increment,
  publicationDate date NOT NULL,
  title           varchar(255) NOT NULL,
  summary         text NOT NULL,
  content         mediumtext NOT NULL,
  views           int(11) NOT NULL,
  previewPic      varchar(255) NOT NULL,

  PRIMARY KEY     (id)
);

我尝试过运行不同的查询,结果总是以主键的升序返回。为什么?

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 03:46:29

不能参数化标识符,如列名、表名、函数和运算符。

假设你认为你是在按以下方式排序:

代码语言:javascript
复制
order by views

实际上,这是:

代码语言:javascript
复制
order by 'views'  -- a constant string

我猜MySQL足够聪明,知道按字符串排序是没有用的,所以它按照读取数据的顺序返回字符串。注意:不能保证这将是主键顺序,尽管通常是这样的。

不幸的是,您将不得不修改查询字符串,因此您可以生成:

代码语言:javascript
复制
order by views  -- or whatever column you want
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52029701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档