简体   繁体   English

PHP PDO sqlsrv执行多个SELECT COUNT

[英]PHP PDO sqlsrv executing multiple SELECT COUNT

I'm at the very beginning of my PDO learning curve and soaking up all I can learn. 我正处于PDO学习曲线的开始,并且全神贯注地学习。 Please can you advise if the code below is the best approach. 请您告知以下代码是否是最佳方法。 I want to find if a user has an entry in more than one SQL Server table 我想查找用户是否在多个SQL Server表中具有一项

try {
    $conn = new PDO("sqlsrv:Server=$pdoServer;Database=$pdoDatabase;", $pdoUID, $pdoPWD);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  
} catch (PDOException $e) {
    die(error_log(print_r("Could not connect to SQL Server".$e->getMessage(), TRUE), 0));
}

if (isValidUsername($username)) {
    $res_sites = $res_PR = $res_TA = array();

    try {
        $stmt_PR = $conn->prepare("SELECT Count(*) AS PRcounter FROM tbl1 WHERE usr_username=:username");
        $stmt_TA = $conn->prepare("SELECT Count(*) AS TAcounter FROM tbl2 WHERE usr_username=:username");

        $stmt_PR->bindParam(':username',$username,PDO::PARAM_STR);
        $stmt_TA->bindParam(':username',$username,PDO::PARAM_STR);

        $stmt_PR->execute();
        $stmt_TA->execute();

        $res_PR = $stmt_PR->fetch();
        $res_TA = $stmt_TA->fetch();

        $stmt_sites = $conn2->query("SELECT site_ID,site_name FROM tbl3 WHERE isDeleted IS NULL ORDER BY site_name ASC");
        while ($row = $stmt_sites->fetch(PDO::FETCH_ASSOC)){
            $res_sites[$row['site_ID']]['site_name']=$row['site_name'];
        }
    } catch (PDOException $e) {
        echo "Error occurred. Error message: ". $e->getMessage();
    }

    /* do more stuff... */
}

As expected, the output returned is 如预期的那样,返回的输出是

$res_PR: array(2) {["PRcounter"]=>string(1) "0" [0]=>string(1) "0"}
$res_TA: array(2) {["TAcounter"]=>string(1) "0" [0]=>string(1) "0"}
$res_sites: array(211) {[0]=>array(3) {["site_ID"]=>string(1) "1" ["site_name"]=>...}

This is one of several sections of code I'm working on. 这是我正在处理的几部分代码之一。 I will be pulling a row back from 7 tables when the page loads. 页面加载时,我将从7个表中退回一行。 Is the above fine, or can the multiple statements be prepared and then executed in a single execute() statement? 上面的方法是否还可以,还是可以准备多个语句,然后在单个execute()语句中执行?

Many thanks. 非常感谢。

can the multiple statements be prepared and then executed in a single execute() statement? 可以准备多个语句,然后在单个execute()语句中执行?

No. 没有。

Even if it was possible, it wouldn't solve none of your problems, because they are irrelevant to PDO, and belongs to general database knowledge, such as table structure and optimization. 即使有可能,也不会解决任何问题,因为它们与PDO无关,属于常规数据库知识,例如表结构和优化。 Say, if you put all your counters in one table, you'll surely be able to get them in one query. 说,如果将所有计数器放在一个表中,那么您肯定可以在一个查询中获得它们。 And if you create an index for username, it will speed things up. 而且,如果您为用户名创建索引,它将加快速度。

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

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