如何从mysqli的类函数中获得$stmt返回


how to get $stmt to return from a class function in mysqli

我的问题是我在类函数中使用mysqli。我希望能够返回$stmt并使用它,这样我就可以从我的html中分离出很多php。

这是我的第一个代码位,它在ticket

类中
public function listTickets(){
    $query = "SELECT `subject` FROM `tickets` WHERE `test_id`=?";
    $stmt = $this->db->prepare($query);
    $stmt->bind_param('i',$_SESSION['data']);
    $stmt->execute();
    $stmt->bind_result($subject);
    return $stmt;
}

然后我像这样从另一个文件调用它,但当然这不起作用,因为出于某种原因,我的类函数没有返回绑定的$stmt。但是没有错误。

$stmt=$ticket->listTickets();
while($stmt->fetch())
{
    echo '<pre>'.$subject.'</pre>';
}

但是,如果我在返回后绑定它,它就会工作,这很烦人,因为我已经在我的函数中绑定了它。

$stmt=$ticket->listTickets();   
$stmt->bind_result($subject);
while($stmt->fetch())
{
    echo '<pre>'.$subject.'</pre>';
}

所以绑定后返回工作,但我宁愿返回绑定的$stmt,这样我可以有更少的代码混乱我的html。

我知道有各种方法可以从mysqli调用返回输出,比如将其加载到数组和其他东西中,但我试图用尽可能少的代码来完成它(请不要建议pdo.)

所以我的问题是我如何从我的函数返回绑定的$stmt,而不必在返回后绑定它?

好的,我要再加一点。我的mysqli工作正常,因为当我在函数内执行此操作时,它工作正常

while($stmt->fetch())
        {
            echo '<pre>'.$subject.'</pre>';
        }

$subject没有在listTickets()方法中定义。方法范围内的变量在方法外部不可见。我认为你最后写的代码是最好的方法。

看到没有人能给我一个满意的答案,我煞费苦心地找到了自己的答案。这与作用域无关。

实际上我有两个答案,它们都有效。在新的答案中,我不需要绑定变量,因为我使用了fetch_assoc或fetch_object。

这就是我的答案

public function listTickets(){
    $query = "SELECT `subject` FROM `tickets` WHERE `test_id`=?";
    $stmt = $this->db->prepare($query);
    $stmt->bind_param('i',$_SESSION['data']);
    $stmt->execute();
    $result = $stmt->get_result();
    $stmt->close();
    return $result;
    //Notice I am not binding at all, and instead of returning $stmt, I am returning $result.
}

好的,上面的代码对两个答案是相同的,但在我的另一个文件中,我可以用两种不同的方式来做。下面是第一种方法,它输出一个对象

$result=$ticket->listTickets();
while($row = $result->fetch_object()){
    echo $row->subject;
}

这是第二种方式,它输出一个关联数组

$result=$ticket->listTickets();
while($row = $result->fetch_assoc()){
    echo $row['subject'];
}

区别在于第一个使用对象,第二个使用关联数组。

我花了好几个小时才算出来,但我很高兴我自己算出来了。