2014-10-02 61 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); 
相關問題