【发布时间】:2013-10-05 04:04:33
【问题描述】:
我是 PDO 新手,我不明白为什么我只能选择数据库表中的第一行。
这是我的数据库表:
Column Type Null Default Comments
id int(11) No
cred varchar(20) No
tok char(40) No
ptok char(40) No
t char(128) No
expires varchar(26) No
Indexes
Keyname Type Unique Packed Column Cardinality Collation Null Comment
PRIMARY BTREE Yes No id 1 A No
ptok BTREE Yes No ptok 1 A No
这是我的 SELECT(查找)函数:
public function findTriplet($credential,$token, $persistentToken) {
$sql = "SELECT IF(SHA1(?) = {$this->tokenColumn}, 1, -1) AS token_match " .
"FROM {$this->tableName} WHERE {$this->credentialColumn} = ? " .
"AND {$this->persistentTokenColumn} = SHA1(?) LIMIT 1 ";
$query = $this->connection->prepare($sql);
$query->execute(array($token, $credential, $persistentToken));
$result = $query->fetchColumn();
if(!$result) {
return self::TRIPLET_NOT_FOUND;
}
elseif ($result == 1) {
return self::TRIPLET_FOUND;
}
else {
return self::TRIPLET_INVALID;
}
}
无论如何我试图寻找答案,但我不知道 PDO 这么好所以没关系..
我试过玩那个,没有成功.. 任何人都知道我在 findTriplet 函数中的问题是什么以及我做错了什么? 它只会选择第一个数据库行,所以如果我有超过 1 行,它将返回 false。
感谢分配。
【问题讨论】:
-
尝试读取documentation:从结果集的下一行返回单列,如果没有更多行,则返回 FALSE。 如果您想获取多行,你必须多次调用它。
-
@Your Common Sense, Yeaafcours,如果你不喜欢请不要评论,我做测试,问题来自 PDO / SQL 查询我不确定是哪一个,它只会选择从第一行开始。
-
@Barmar,谢谢,我会阅读并尝试。
-
@Barmar ,我的代码使用与 PHP 文档中相同的正确方式。它仍然只从数据库表中选择第一行。可能是数据库表属性错误?
-
不清楚你的函数应该如何处理多行。如果其中一个包含 1,另一个包含 -1,函数应该返回
TRIPLET_FOUND还是TRIPLET_INVALID?