繁体   English   中英

使用PDO循环优化多个MySQL查询

[英]Optimizing multiple MySQL queries in a loop with PDO

考虑以下代码片段,其中有两个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

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

暂无
暂无

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

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