PDO:如何按超过 1 列排序?

问题描述 投票:0回答:0

主题说了。

我已经弄清楚如何使用 PDO 按 1 列排序。但我迫切需要按 3 列排序:年、月和日,例如,按降序排列。我已经为此苦苦思索了一天多,然后放弃了。

我的是一个动态查询,它使事情变得复杂,但据我所知,还有更大的问题在起作用。

我的查询是基于“你的常识”最优秀的教程给出的方法: https://phpdelusions.net/pdo_examples/dynamical_where

作者在“$conditions”数组中构建命令,在“$parameters”数组中构建绑定参数。在所有收集结束时,他将条件数组内爆成一个字符串并执行 $parameters 数组:

他经历了一系列这样的街区:

if (!empty($_GET['name']))
{
    // here we are using LIKE with wildcard search
    // use it ONLY if really need it
    $conditions[] = 'name LIKE ?';
    $parameters[] = '%'.$_GET['name']."%";
}

结束于:


if ($conditions)
{
    $sql .= " WHERE ".implode(" AND ", $conditions);
}

// the usual prepare/execute/fetch routine
$stmt = $pdo->prepare($sql);
$stmt->execute($parameters); 

我以类似的方式成功进行。内爆之后,我留下了一个类似于下面有效的查询。现在的任务是如何添加包含多个列的“order by”子句。

这里有几个我试过的查询/方法,(我正在做一个“select *”来代替这个例子的字段。总共 15 个):

$cmd='select * from calendar where mo like :mo, da like: da, (etc)  order by :yr, :mo, :da';

// I try to ball them up into an array
$order_by=array("$yr","$mo","$da");
$stmt = $dbo->prepare($cmd);
$stmt->bindParam(':order_by', $order_by , PDO::PARAM_INT);
$stmt->execute($_parameters); // (My convention is to put underscores in front of my arrays) 

失败

$cmd='select * from calendar where mo like :mo, da like: da, (etc)  order by :yr, :mo, :da';
$stmt = $dbo->prepare($cmd);
// I try to bind them individually
$stmt->bindParam(':yr', $yr , PDO::PARAM_INT);
$stmt->bindParam(':mo', $mo , PDO::PARAM_INT);
$stmt->bindParam(':da', $da , PDO::PARAM_INT);
$stmt->execute($_parameters);

失败

$cmd .= 'select * from calendar order by :yr, :mo, :da;
// I try to tack onto the $_parameters array:
$_parameters[] = ".$yr.','.$mo.','.$da.";

$stmt = $dbo->prepare($cmd);
$stmt->execute($_parameters);

失败

$cmd .= 'select * from calendar order by :yr, :mo, :da;
// I try this syntax:
$_parameters[] = $yr;
$_parameters[] = $mo;
$_parameters[] = $da;

$stmt = $dbo->prepare($cmd);
$stmt->execute($_parameters);

你猜对了,失败了。我可以继续。但如您所见,我已经尝试过 Joe College! :-)

我已经跟踪了 $_parameter 数组是如何被填充的,并且可以肯定地说它只填充了第一个“order by”参数。在本例中为“$yr”。 “$mo”和“$da”从不抬起丑陋的头。

我想我已经阅读了 stackoverflow 上的每一篇文章,这些文章都解决了“order by”子句,但没有一个地址按超过一列进行排序。

帮助!

pdo parameters sql-order-by
© www.soinside.com 2019 - 2024. All rights reserved.