2014-10-02 62 views
0

我有一张用户表,每个用户都有一个唯一的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; 

} 
+1

代码你检查你的数据库?也许它实际上包含相同的对象两次? – Dima 2014-10-02 15:16:47

+3

不是一个解决方案,但是你的SQL语句不正确。为了将参数绑定到PDO,它应该看起来像'SELECT id FROM user WHERE username =:username' – 2014-10-02 15:17:26

+1

为了说明,'getUserID()'返回一个关联数组?你可以发布该数组的内容(做'print_r($ row)')?你期待它返回什么? – 2014-10-02 15:18:14

回答

2

你的问题是在你的$s->fetch()。默认情况下,PDO获取由字段和数字索引的数组,例如$row['id']$row[0]试试这个:

$row = $s->fetch(PDO::FETCH_ASSOC); 
return $row['id']; 

更多信息请参见http://php.net/manual/en/pdostatement.fetch.php

+0

完美,谢谢! – dlofrodloh 2014-10-02 15:32:32

1

问题是$s->fetch()正在返回一个对象。您需要修改它的关联数组返回:

$s->fetch(PDO::FETCH_ASSOC) 
2

PDOStatement::fetch()默认为返回PDO::FETCH_BOTH

返回由索引的数组两列名和0索引的列数在结果集中返回

(来自http://php.net/manual/en/pdostatement.fetch.php两者)​​

你需要做的:

$row = $s->fetch(PDO::FETCH_ASSOC); 
0

你正在做的错$result = $sth->fetch();你已经错过了PDO::FETCH_ASSOC返回按列名索引的结果集中返回的数组。

所以你必须使用像

$row = $s->fetch(PDO::FETCH_ASSOC); 
相关问题