这是我在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()
。
答案 0 :(得分:4)
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);
...
}
答案 1 :(得分:4)
我已经解决了这个问题:
$query = "SELECT name FROM usertable WHERE id = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('i', $id);
$id= $_GET['id'];
$stmt->execute();
$result = $stmt->get_result();
$stmt->free_result();
$stmt->close();
while ($row = $result->fetch_array(MYSQLI_NUM))
{
echo $row[0]." ";
}
只需使用get_result()
和fetch_array()