这是我在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();
现在,我希望在内部使用$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);
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。