我正在尝试使用准备好的语句更改我的 SQL 查询。想法:我通过while循环从数据库中获取多条记录,然后在循环中从数据库中获取一些附加数据。
这是我的旧 SQL 代码(简化):
$qry = "SELECT postId,title,userid from post WHERE id='$id'";
$rst01 = mysqli_query($mysqli, $qry01);
// loop trough mutiple results/records
while (list($postId,$title,$userid) = mysqli_fetch_array($rst01)) {
// second query to select additional data
$query05 = "SELECT name FROM users WHERE id='$userid";
$result05 = mysqli_query($mysqli, $query05);
$row05 = mysqli_fetch_array($result05);
$name = $row05[name ];
echo "Name: ".$name;
// do more stuff
// end of while loop
}
现在我想用准备好的语句重写它。我的问题:是否可以在获取另一个准备好的语句时运行准备好的语句?我仍然需要像在旧 SQL 代码中为 $name 所做的那样的名称。
这是到目前为止所写的。
$stmt0 = $mysqli->stmt_init();
$stmt0->prepare("SELECT postId,title,userid from post WHERE id=?");
$stmt0->bind_param('i', $id);
$stmt0->execute();
$stmt0->bind_result($postId,$title,$userid);
// prepare second statement
$stmt1 = $mysqli->stmt_init();
$stmt1->prepare("SELECT name FROM users WHERE id= ?");
while($stmt0->fetch()) {
$stmt1->bind_param('i', $userid);
$stmt1->execute();
$res1 = $stmt1->get_result();
$row1 = $res1->fetch_assoc();
echo "Name: ".$row1['name'] ;
}
它为循环中的第二个语句返回错误:
Warning: mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt in ...
如果我对循环使用旧方法,并且只使用准备好的语句来获取 $name 它可以工作。