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

时间:2016-09-17 10:38:20

标签: php function class mysqli

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

这是我的第一段代码,它位于故障单类

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>';
        }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

看到没有人能给我一个满意的答案,我痛苦地找到了自己的答案。这与范围无关。

实际上我有两个答案,他们都有效。在新的答案中,我不必绑定我的变量,因为我使用的是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'];
}

不同之处在于第一个使用对象而第二个使用关联数组。

我花了很多时间来解决这个问题,但我很高兴我实际上已经完成了这项工作。