PHP PDO sqlsrv 执行多个 SELECT COUNT
PHP PDO sqlsrv executing multiple SELECT COUNT
我正处于 PDO 学习曲线的最开始,正在吸收我能学到的所有东西。请您告知以下代码是否是最佳方法。我想查找用户是否在多个 SQL 服务器 table
中有一个条目
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 table 秒后拉回一行。以上是否可以,还是可以准备多个语句,然后在单个 execute() 语句中执行?
非常感谢。
can the multiple statements be prepared and then executed in a single execute() statement?
没有。
即使可以,也解决不了你none的问题,因为它们与PDO无关,属于一般数据库知识,如table结构和优化。比方说,如果您将所有计数器放在一个 table 中,您肯定能够在一个查询中获取它们。如果您为用户名创建索引,它会加快速度。
我正处于 PDO 学习曲线的最开始,正在吸收我能学到的所有东西。请您告知以下代码是否是最佳方法。我想查找用户是否在多个 SQL 服务器 table
中有一个条目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 table 秒后拉回一行。以上是否可以,还是可以准备多个语句,然后在单个 execute() 语句中执行?
非常感谢。
can the multiple statements be prepared and then executed in a single execute() statement?
没有。
即使可以,也解决不了你none的问题,因为它们与PDO无关,属于一般数据库知识,如table结构和优化。比方说,如果您将所有计数器放在一个 table 中,您肯定能够在一个查询中获取它们。如果您为用户名创建索引,它会加快速度。