从SQL方法返回值

时间:2014-07-10 12:36:20

标签: php sql class include extends

]我完全没有想到为什么下面的代码没有返回值。我有2个相互关联的sql表。在一个类中,我有以下方法,并且在该方法的范围内一切都很好。 var转储显示正确的数据。以下代码在class.php中说明。

public function getId($username, $password) {
    if (isset($_SESSION['username'])) {
        $sql = "SELECT person_id FROM user WHERE username = ?";
        $stmt = $this->dbh->prepare($sql);
        $stmt->bindParam(1, $_SESSION['username']);
        $stmt->execute();
        $id = $stmt->fetch(PDO::FETCH_NUM);
        $id = $id[0];
    }
    ELSE {
        echo "Failed to retreive person_id";
    }
    var_dump($id);
    return $id[0];
}

然而,当我将该值返回到作为主文档的showinfo.php并声明以下内容时:

$user_id = $id[0];
var_dump($user_id);

然后var dump回应" NULL"。我需要它用于下面的方法,该方法也在class.php中。

public function showInfo($user_id) {
    $sql = "SELECT * FROM person WHERE person_id = ?";
    $stmt = $this->dbh->prepare($sql);
    $stmt->bindParam(1, $user_id);
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    foreach ($result as $row) {
    echo "<pre>".print_r  ($row, true)."</pre>";
    }
}

有没有人可以这么好地告诉我如何完成这项工作? 非常感谢您花时间和精力帮助我。

3 个答案:

答案 0 :(得分:0)

我猜你试图访问索引[0]两次的字段。

也许尝试返回$ id,然后访问外层的[0]

答案 1 :(得分:0)

我的PHP有点生疏,我现在无法访问测试,但是你不需要在问号周围单引号,所以它引用了SQL吗?

即。

$sql = "SELECT * FROM person WHERE person_id = '?'";

$stmt->bindParam(1, "'" + $_SESSION['username'] + "'");

(但不是两个!)

以便SQL看到     SELECT * FROM person WHERE person_id ='MyVal'

而不是     SELECT * FROM person WHERE person_id = MyVal

它将其解释为列名

答案 2 :(得分:0)

您无法显示调用该方法的位置。

你在showinfo.php中试过这个:

$user_id = $id[0];

不应该......

$user_id = getId('someusername', 'somepassword')

或类似的东西?对不起,这不是答案,但我无法发表评论。