Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从SQL方法返回值_Php_Sql_Class_Include_Extends - Fatal编程技术网

Php 从SQL方法返回值

Php 从SQL方法返回值,php,sql,class,include,extends,Php,Sql,Class,Include,Extends,]我完全不明白为什么下面的代码不返回值。我有两个相互关联的sql表。在一个类中,我有以下方法,在该方法的范围内,一切都很好。var转储显示正确的数据。下面的代码在class.php中说明 public function getId($username, $password) { if (isset($_SESSION['username'])) { $sql = "SELECT person_id FROM user WHERE username = ?";

]我完全不明白为什么下面的代码不返回值。我有两个相互关联的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];
}
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>";
    }
}
但是,当我将该值返回到主文档showinfo.php并声明以下内容时:

$user_id = $id[0];
var_dump($user_id);
然后,var转储回显“NULL”。下面的方法也在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];
}
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>";
    }
}
公共函数showInfo($user\u id){
$sql=“从person_id=?”中选择*;
$stmt=$this->dbh->prepare($sql);
$stmt->bindParam(1,$user\u id);
$stmt->execute();
$result=$stmt->fetch(PDO::fetch_ASSOC);
foreach($结果为$行){
echo“.print_r($row,true)。”;
}
}
有谁能告诉我怎么做吗?
非常感谢您花时间和精力来帮助我。

我猜您尝试使用索引
[0]
访问字段两次


可能尝试只返回$id,然后访问外部类上的
[0]

我的PHP有点生疏,我现在没有测试权限,但是你不需要在问号周围加上单引号,这样它就可以被SQL引用了吗

i、 e

(但不是两者都有!)

所以SQL可以看到 从person_id='MyVal'中选择*FROM person

而不是 从person\u id=MyVal的person中选择*FROM


它会将其解释为列名

您不会显示方法的调用位置

您在showinfo.php中尝试了以下操作:

$user_id = getId('someusername', 'somepassword')
这不应该是


还是类似的?很抱歉,这不是答案,但我不能评论。

不,这不是必需的,在方法的范围内,返回的值是正确的,我似乎无法将其获取到本地范围之外。您可以提供变量转储的结果吗?当然:数组(1){[0]=>string(1)“1”}什么是
$id=$id为?哦,没有复制粘贴正确的,应该是$id=$id[0];我不确定,但我只是测试了它,它不会工作,事实上它破坏了整个页面:P
$user_id = getId('someusername', 'somepassword')