2012-07-26 41 views
0

为什么PDO的fetchColumn()忽略我的查询的SQL LIMIT部分?PDO fetchColumn()忽略SQL“LIMIT”?

$结果在数据库中找到2条记录时返回“2”?

谢谢!

$sql = "SELECT count(*) FROM table WHERE Username = ? and 
Password = ? LIMIT 1"; 

$q = $this->connection->prepare($sql); 
$q->execute(array($user, $pwd)); 

$result = $q->fetchColumn(); 
echo $result; 

回答

1

因为在数据库中找到的记录数可能为2,但该聚合函数只需要一行来返回结果。这里的限制实际上是无用的。

换句话说,在服务器上运行没有LIMIT的查询,您会看到一个值为2的单行结果集(如果表中有两个这样的用户/密码组合)。

+0

感谢您的回复。是的,我明白了为什么现在正在发生。 fetchColumn()根本就没有做任何计数! - 我试图确保只有一个结果返回一个简单的登录脚本,你知道这样做的最好方法吗?谢谢。 – 2012-07-26 14:06:50

+0

我会通过在用户和密码字段中放置一个唯一索引来将其设计到我的表中。因此,你保证只有一个结果最大。 – 2012-07-26 14:08:19

+0

每个用户在数据库设计中都有一个唯一的ID,并且永远不会有用户名相同的情况,更不用说用户名和密码,但我只想尽可能多地构建安全性。你将如何检查唯一索引? – 2012-07-26 14:13:09