php – 在mysqli中存储并迭代查询结果

这是我在PHP中的简单查询,使用mysqli面向对象的样式:

$query = "SELECT name FROM usertable WHERE id = ?";
$stmt = $MysqLi->prepare($query);
$stmt->bind_param('i', $id);
$id= $_GET['id'];
$stmt->execute();
$stmt->bind_result($name);

while($stmt->fetch()){
   echo $name." ";
}

$stmt->free_result();
$stmt->close();

这很好用.我获取了从select语句中检索的名称列表.

现在,我希望在内部使用$name变量作为另一个查询的参数,但是MysqLi不允许这样做,因为我必须关闭一个查询然后调用第二个查询.

所以我认为我必须存储第一个查询的结果,然后迭代调用查询的结果.

我尝试过以下方法

$query = "SELECT name FROM usertable WHERE id = ?";
$stmt = $MysqLi->prepare($query);
$stmt->bind_param('i', $id);
$id= $_GET['id'];
$stmt->execute();
//$stmt->bind_result($name);
$result = $stmt->store_result();
$stmt->free_result();
$stmt->close();

while ($row = $result->fetch_row()) 
{
    echo $row[0]." ";
}

但这不起作用.从来没有达到内部代码.

N.B.:我想避免使用multi_query().

解决方法:

mysqli_stmt::store_result返回一个布尔值.根据文件,它应该是这样的:

$stmt->execute();
$stmt->store_result();

$stmt->bind_result($name);

while($stmt->fetch()){
    //echo $name." ";
    // try another statement
    $query = "INSERT INTO usertable ...";
    $stmt2 = $MysqLi->prepare($query);
    ...
}

$stmt->free_result();
$stmt->close();

如果这不起作用,您可以先将所有行提取一个数组中,然后再次循环该数组:

$stmt->execute();
$stmt->bind_result($name);
$names = array();
while($stmt->fetch()){
    $names[] = $name;
}
$stmt->free_result();
$stmt->close();

foreach($names as $name) {
    $query = "INSERT INTO usertable ...";
    $stmt = $MysqLi->prepare($query);
    ...
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...