prepare('SELECT * FROM t-6ren">
gpt4 book ai didi

php - 由准备好的语句生成的 while 循环内的准备好的语句

转载 作者:行者123 更新时间:2023-11-29 07:54:07 24 4
gpt4 key购买 nike

所以我只是想知道这是否是一个好的做法,或者由于某种原因这种类型的代码是否会影响系统的速度和功能?

$foo = "bar";
$stmt = $db->prepare('SELECT * FROM table WHERE bar=?');
$stmt->bind_param('s',$foo);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()){
$val1 = $row['val1'];
$val2 = $row['val2'];
echo "<section>";
$stmt2 = $db->prepare('SELECT * FROM table2 WHERE bar=?');
$stmt2->bind_param('s',$foo);
$stmt2->execute();
$result2 = $stmt2->get_result();
while($row = $result2->fetch_assoc()){
$val1 = $row['val1'];
$val2 = $row['val2'];
}
$stmt->close();
echo "</section>";
}
$stmt->close();

第一个语句可以生成 50 条或更多数据,这意味着将生成另一个 50 条或更多语句,这很糟糕吗?

感谢您的回答。

最佳答案

每次准备一条语句时,都需要调用 MySQL,这是昂贵的。如果是同样的语句,那就没有必要,而且浪费时间。

您也只需绑定(bind)参数一次。 bind_param 将参数与变量的引用相关联。因此循环只需要更新变量的值并调用execute

在您的代码中,似乎每次循环都重复内部查询是不必要的。它不依赖于从外部查询检索到的任何内容,因此每次都会返回相同的结果集。您应该执行一次,将结果保存在数组中,然后每次都循环遍历该数组,以避免不必要地访问数据库。

如果这只是一个人为的示例,并且外部查询返回的数据与内部查询的参数之间确实存在依赖关系,那么您可能应该将它们作为包含 JOIN< 的单个查询来执行 两个表之间。

关于php - 由准备好的语句生成的 while 循环内的准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com