我的问题是我在类函数中使用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>';
}
答案 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'];
}
不同之处在于第一个使用对象而第二个使用关联数组。
我花了很多时间来解决这个问题,但我很高兴我实际上已经完成了这项工作。