首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在组中使用的传入参数仍然返回1行?

在组中使用的传入参数仍然返回1行?
EN

Stack Overflow用户
提问于 2016-08-14 15:30:56
回答 1查看 284关注 0票数 2

我无意中发现了这种行为,现在我很好奇到底发生了什么。如果我试图将参数绑定到GROUP BY子句中的列名,数据实际上将被返回,但只返回一行。我知道您是https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as-parameter,使用表名或列名作为参数,但我想知道是什么原因导致这种情况在幕后发生。这深深地隐藏在我的(业余)代码中,而且很难排除故障,因为它没有抛出一个错误,它实际上返回了数据。我希望有更多的洞察力!

样本表:

代码语言:javascript
复制
| artist          | album          | label       |
|-----------------|----------------|-------------|
| John Coltrane   | A Love Supreme | MCA Records |
| John McLaughlin | Extrapolation  | Marmalade   |
| John Coltrane   | A Love Supreme | Impulse!    |
| John McLaughlin | Extrapolation  | Polydor     |

示例代码:

代码语言:javascript
复制
$field = 'artist';
$artist = '%john%';
$sql = 'SELECT artist, album
    FROM record_collection
    WHERE artist LIKE :artist
    GROUP BY :field';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':artist', $artist);
$stmt->bindParam(':field', $field);
$stmt->execute();
echo 'Row count: '. $stmt->rowCount();

返回:“行数: 1”

我注意到:

  • 使用“按艺术家分组”,并注释掉bindParam行的:字段,我得到了预期的“行计数: 2”。,这是正确的方法。
  • 使用WHERE子句中的参数:field作为列名(例如,"WHERE :field LIKE : gives“)提供"Row count: 0”。

所以我想知道的是:

  1. SQL/PDO在导致1行被返回的场景中做什么?
  2. 如果组中的参数BY不受支持,为什么不返回任何内容,或者更好地抛出一个错误?我认为没有,但是是否有任何合法的用途将参数传递到组BY?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 15:41:59

当您传入:field时,您将传入一个字符串值。因此,结果是group by <constant>,它返回一行。

不能参数化列名,因此必须将其直接放入SQL语句中:

代码语言:javascript
复制
$sql = 'SELECT artist, album
        FROM record_collection
        WHERE artist LIKE :artist
        GROUP BY '.$field'

:artist很好,因为它是一个值,而不是SQL中的标识符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38943718

复制
相关文章

相似问题

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