为什么我的SQL查询返回一个数组?

时间:2014-10-02 15:14:44

标签: php mysql sql

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

}

4 个答案:

答案 0 :(得分: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

答案 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);