我有一个用户表,每个用户都有一个唯一的ID。当我尝试为会话获取其ID时,由于某种原因返回一个包含两个ID的数组。
因此,在以下代码中,$ _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;
}
答案 0 :(得分:2)
您的问题出在$s->fetch()
。默认情况下,PDO获取由字段和数字索引的数组,例如$row['id']
和$row[0]
试试这个:
$row = $s->fetch(PDO::FETCH_ASSOC);
return $row['id'];
答案 1 :(得分:2)
PDOStatement::fetch()
默认返回PDO::FETCH_BOTH
:
返回由结果集
中返回的列名和0索引列号索引的数组
(取自http://php.net/manual/en/pdostatement.fetch.php)
你需要这样做:
$row = $s->fetch(PDO::FETCH_ASSOC);
答案 2 :(得分:1)
问题是$s->fetch()
正在返回一个对象。您需要修改它以返回关联数组:
$s->fetch(PDO::FETCH_ASSOC)
答案 3 :(得分:0)
您错误地使用了$result = $sth->fetch();
您错过了PDO::FETCH_ASSOC
,它返回了一个按结果集中返回的列名索引的数组。
所以你必须使用像
这样的代码$row = $s->fetch(PDO::FETCH_ASSOC);