Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQLi中将准备好的语句作为函数参数传递_Php_Mysqli - Fatal编程技术网

Php 在MySQLi中将准备好的语句作为函数参数传递

Php 在MySQLi中将准备好的语句作为函数参数传递,php,mysqli,Php,Mysqli,在这里,我想将准备好的语句作为测试函数的参数传递,该函数应该显示查询结果。但是下面的代码不起作用,因为它可能缺少一些我不知道的内容。为了通过测试函数显示结果,我应该做些什么: <?php $mysqli = new mysqli("localhost","root","","test"); /*check connection*/ if(mysqli_connect_errno()) { printf("connection failed: %s\n",mysql

在这里,我想将准备好的语句作为测试函数的参数传递,该函数应该显示查询结果。但是下面的代码不起作用,因为它可能缺少一些我不知道的内容。为了通过测试函数显示结果,我应该做些什么:

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

   }     

  }

?>

我认为这种方法可能不是轻量级的解决方案,但您可以使用
mysqli\u result::data\u 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);
或者另一种方式可以是这样的:

$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);

只有我的两分钱…

您已经
获取了所有
$stmt1
结果<代码>获取
如果不倒带结果集,则再次读取它们将无效。谢谢。。但是我该怎么做呢@Nietthedark绝对感谢你。。。。你能告诉我如何将两个结果集存储在两个数组@ilpaijin中吗