gpt4 book ai didi

php - 使用 PDO 优化循环中的多个 MySQL 查询

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

考虑以下代码片段,其中有两个 MySQL 查询作为循环的一部分被触发:

<?php
$requested_names_array = ['ben','john','harry'];

$statement_1 = $connection->prepare("SELECT `account_number` FROM `bank_members` WHERE `name` = :name");
$requested_name = "";
$statement_1->bindParam(":name",$requested_name); //$requested_name will keep changing in value in the loop below

foreach($requested_names_array as $requested_name){
$execution_1 = $statement_1->execute();
if($execution_1){
//fetch and process results of first successful query
$statement_2 = $connection->prepare("SELECT `account_balance` from `account_details` WHERE `account_number` = :fetched_account_number");
$statement_2->bindValue(":fetched_account_number",$fetched_account_number);
$execution_2 = $statement_2->execute();
if($execution_2){
//fetch and process results of second successful query, possibly to run a third query
}
}else{
echo "execution_1 has failed, $statement_2 will never be executed.";
}
}
?>

这里的问题是$statement_2被一次又一次地准备,而不是仅仅使用不同的参数执行。

我不知道 $statement_2 是否也可以在进入循环之前准备好,因此它仅在其参数在循环中更改时执行(而不是准备),就像 $statement_1 一样。

在这种情况下,您最终会首先准备几个语句,每个语句都将在随后的循环中执行。

即使这是可能的,也可能效率不高,因为如果其他语句执行失败,某些语句的准备将是徒劳的。

您建议如何保持这种结构的优化?

最佳答案

您应该重写为联接:

SELECT account_number, account_balance
FROM bank_members
INNER JOIN account_details ON bank_members.account_number = account_details.account_number

一个查询,准备一次,执行一次,获取您需要的所有数据。

关于php - 使用 PDO 优化循环中的多个 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402298/

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