我的问题是我在类函数中使用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'];
}
区别在于第一个使用对象,第二个使用关联数组。
我花了好几个小时才算出来,但我很高兴我自己算出来了。