]我完全没有想到为什么下面的代码没有返回值。我有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>";
}
}
有没有人可以这么好地告诉我如何完成这项工作? 非常感谢您花时间和精力帮助我。
答案 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')
或类似的东西?对不起,这不是答案,但我无法发表评论。