繁体   English   中英

多个预准备语句(SELECT)

[英]Multiple prepared statements (SELECT)

我正在尝试使用预准备语句更改我的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
}

现在我想用准备好的语句重写它。 我的问题:是否可以在获取另一个准备好的声明中运行预备语句? 我仍然需要像我为$ name做的旧SQL代码中的名称。

这是迄今为止所写的内容。

$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,它就可以工作。

您可以使用一个JOIN ed查询实际执行此操作:

SELECT p.postId, p.title, p.userid, u.name AS username
FROM post p
JOIN users u ON u.id = p.userid
WHERE p.id = ?

通常,如果您在循环中运行查询,则可能有更好的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM