【发布时间】:2013-05-13 21:30:29
【问题描述】:
当我在 SQL Server 2008 中获取行数时遇到问题,因为我的代码在使用 MySQL 但在 SQL Server 中无法正常工作。
$sql = "SELECT TOP 1 U.Id , U.Name, U.Profile, P.Name NameProfile
FROM sa_users U
INNER JOIN sa_profiles P ON P.Id = U.Profile
WHERE User = :user AND Pass = :pass";
$result = $this->dbConnect->prepare($sql) or die ($sql);
$result->bindParam(':user',$this->data['username'],PDO::PARAM_STR);
$result->bindParam(':pass',$this->data['password'],PDO::PARAM_STR);
if (!$result->execute()) {
return false;
}
$numrows = $result->rowCount();
$jsonLogin = array();
var_dump($numrows);
if($numrows > 0) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$jsonLogin = array(
'name' => $row['Name'],
'id' => $row['Id'],
'profile' => $row['Profile'],
'n_profile' => $row['NameProfile']
);
}
$jsonLogin['area'] = 'another';
return $jsonLogin;
} else {
return false;
}
var_dump($result->fetch()) 在 MySQL 和 SQL Server 中
array(8) {
["Id"]=>
string(1) "1"
[0]=>
string(1) "1"
["Nombre"]=>
string(13) "Administrador"
[1]=>
string(13) "Administrador"
["Perfil"]=>
string(1) "1"
[2]=>
string(1) "1"
["NomPerfil"]=>
string(13) "Administrador"
[3]=>
string(13) "Administrador"
}
var_dump($numrows) 在 SQL Server 中
int(-1)
var_dump($numrows) 在 MySQL 中
int(1)
问候。
【问题讨论】:
-
并非所有数据库都返回查询元数据中的行数。 mysql恰好是其中之一,mssql不是。
-
我不知道.. 你知道另一种获取查询总行数的方法吗?我尝试使用 $r = $result->fetchColumn(); $numrows = 计数($r);但在 while($row = $r) 或 while($row = $result->fetch()) 中不识别索引。
-
可能唯一实用的方法是单独做一个
select count(*)。但是,如果您无论如何都要获取所有数据(并且它不是一个非常庞大的数据集),那么请获取一个数组并在之后计算行数。 -
但是使用 select count(*) 需要对数据库执行两个查询,一个用于比较,另一个用于获取数据...如果不存在其他方式,我需要这样做。
标签: php mysql pdo sql-server-2008-r2 rowcount