为什么我的SQL查询返回一个数组?
问题描述:
我有一张用户表,每个用户都有一个唯一的ID。当我尝试为会话获取其ID时,由于某种原因它将返回一个包含两个ID的数组。为什么我的SQL查询返回一个数组?
因此,在下面的代码中,$ _SESSION ['userid']变成了包含相同ID的两个实例的数组。
我想不通为什么尽管...
$_SESSION['userid'] = getUserID($_POST['username']);
function getUserID($username)
{
include 'db.inc.php';
try {
$sql = "SELECT id FROM user WHERE username = '". $username. "'";
$s = $pdo->prepare($sql);
$s->bindValue(':username', $username);
$s->execute();
}
catch (PDOException $e) {
$error = 'Error getting userid for '.$username . '....error: '.$e;
include $_SERVER['DOCUMENT_ROOT']."/database/includes/pages/error.html.php";
exit();
}
$row = $s->fetch();
return $row;
}
答
你的问题是在你的$s->fetch()
。默认情况下,PDO获取由字段和数字索引的数组,例如$row['id']
和$row[0]
试试这个:
$row = $s->fetch(PDO::FETCH_ASSOC);
return $row['id'];
+0
完美,谢谢! – dlofrodloh 2014-10-02 15:32:32
答
问题是$s->fetch()
正在返回一个对象。您需要修改它的关联数组返回:
$s->fetch(PDO::FETCH_ASSOC)
答
PDOStatement::fetch()
默认为返回PDO::FETCH_BOTH
:
返回由索引的数组两列名和0索引的列数在结果集中返回
(来自http://php.net/manual/en/pdostatement.fetch.php两者)
你需要做的:
$row = $s->fetch(PDO::FETCH_ASSOC);
答
你正在做的错$result = $sth->fetch();
你已经错过了PDO::FETCH_ASSOC
返回按列名索引的结果集中返回的数组。
所以你必须使用像
$row = $s->fetch(PDO::FETCH_ASSOC);
代码你检查你的数据库?也许它实际上包含相同的对象两次? – Dima 2014-10-02 15:16:47
不是一个解决方案,但是你的SQL语句不正确。为了将参数绑定到PDO,它应该看起来像'SELECT id FROM user WHERE username =:username' – 2014-10-02 15:17:26
为了说明,'getUserID()'返回一个关联数组?你可以发布该数组的内容(做'print_r($ row)')?你期待它返回什么? – 2014-10-02 15:18:14