gpt4 book ai didi

PHP通过主键返回查询的结果集

转载 作者:行者123 更新时间:2023-11-29 07:29:43 25 4
gpt4 key购买 nike

我试图按发布日期降序从数据库中获取前 X 行,但是我发现,如果直接在我的本地数据库上执行查询,则查询工作得很好,但在 PHP 中,结果集始终按顺序排列的主键。这是一段代码:

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] ) );
}

运行时, echo 的输出如下:50 51 52 53 54

数据库是使用此查询创建的(向您展示结构):

 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)
);

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

最佳答案

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

假设您认为您正在通过以下方式订购:

order by views

实际上,这是:

order by 'views'  -- a constant string

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

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

order by views  -- or whatever column you want

关于PHP通过主键返回查询的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52029701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com