将MySQLi中的预准备语句作为函数参数传递

时间:2014-07-09 14:39:26

标签: php mysqli

这里我想将准备好的语句作为 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/>';
      }     

   }     

  }

?>

1 个答案:

答案 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);

只是我的两分钱......