这里我想将准备好的语句作为 test 函数的参数传递,该函数应该显示查询结果。但是下面的代码不起作用,因为它可能缺少我不喜欢的东西&# 39;知道。为了通过 test 函数显示结果,我该怎么做:
<?php
$mysqli = new mysqli("localhost","root","","test");
/*check connection*/
if(mysqli_connect_errno())
{
printf("connection failed: %s\n",mysqli_connect_error());
exit();
}
/*create prapared statement*/
$stmt1 = $mysqli->prepare("select id from posts");
$stmt2 =$mysqli->prepare("select username from members where id=?");
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($ID);
/*bind params*/
$stmt2->bind_param('i',$id);
/*bind results*/
$stmt2->bind_result($username);
while($stmt1->fetch())
{
/*set params*/
$id =$ID;
/*execute prapared statement*/
$stmt2->execute();$stmt2->store_result();
}
test($stmt1,$stmt2);//function call
function test($stmt1,$stmt2)
{
while($stmt1->fetch())
{
while($stmt2->fetch())
{
echo 'Username: '.$username.'<br/>';
}
}
}
?>
答案 0 :(得分:0)
我认为这种方式可能不是轻量级解决方案,但您可以使用mysqli_result::data_seek()
方法重置结果指针,并且您需要再次使用结果变量重新绑定它:
function test($stmt1, $stmt2)
{
$stmt1->data_seek(0);
while($stmt1->fetch())
{
$stmt2->data_seek(0);
$stmt2->bind_result($username);
while($stmt2->fetch())
{
echo 'Username: '.$username.'<br/>';
}
}
}
test($stmt1, $stmt2);
一个选项可以是在数组中存储while内部的绑定结果,然后根据需要随后使用该数组;但一切都取决于您的需求。
来源: http://www.php.net/manual/it/mysqli-result.data-seek.php
编辑-------------------
我刚建议使用数组来避免仅重用资源来循环相同的数据。
无论如何,它可能取决于您的环境,但如果您安装了mysqlnd驱动程序,您可以执行以下操作:
$res1 = $stmt1->get_result(); // here you can use get_result() to get the resultset
$myAy = array();
while($row = $res1->fetch_array())
{
$myAy[] = $row;
}
var_dump($myAy);
或其他方式可能是这样的:
...
$myAy = array();
while ($stmt1->fetch())
{
$id = $ID;
$myAy['id'] = $ID;
...
}
while ($stmt2->fetch())
{
$myAy['user'] = $username;
}
var_dump($myAy);
只是我的两分钱......