2014-10-02 3 views
0

У меня есть таблица пользователей с уникальным идентификатором. Когда я пытаюсь получить свой идентификатор для сеанса, по какой-то причине он возвращает массив из двух идентификаторов.Почему мой SQL-запрос возвращает массив?

Таким образом, в следующем коде $ _SESSION ['userid'] становится массивом, содержащим два экземпляра одного и того же идентификатора.

Я не могу понять, почему, хотя ...

$_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

+3

Не решение, но ваш оператор SQL неверен. Чтобы связать параметр с PDO, он должен выглядеть так: 'SELECT id FROM user WHERE username =: username' –

+1

Чтобы уточнить,' getUserID() 'возвращает ассоциативный массив? Можете ли вы разместить содержимое этого массива (do 'print_r ($ row)')? Что вы ожидаете от возвращения? –

ответ

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

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); 
Смежные вопросы