2015-06-25 59 views
0

我處於PDO學習曲線的最初階段,沉浸在我可以學習的所有內容中。請您建議下面的代碼是否是最好的方法。我想找到如果用戶有多個SQL Server表中的條目PHP PDO sqlsrv執行多個SELECT COUNT

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... */ 
} 

正如預期的那樣,返回的輸出是

$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"]=>...} 

這是代碼的幾個部分,我一個工作上。當頁面加載時,我將從7個表中拉回一行。是上述罰款,還是可以準備多個語句,然後在單個execute()語句中執行?

非常感謝。

回答

2

可以準備多個語句,然後在單個execute()語句中執行嗎?

即使有可能,也不會沒有解決你的問題,因爲他們是無關的PDO,屬於一般的數據庫知識,如表結構和優化。比方說,如果你把所有的計數器放在一張表中,你肯定能夠在一個查詢中得到它們。如果你創建一個用戶名索引,它會加快速度。

+0

太棒了......非常感謝:) – ChrisM