[英]PDO rowCount() works on MySQL but not in SQL Server 2008 R2
当我在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;
}
MySQL和SQL Server中的var_dump($ result-> fetch())
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"
}
SQL Server中的var_dump($ numrows)
int(-1)
MySQL中的var_dump($ numrows)
int(1)
问候。
我知道这是一个旧线程,但是今天早上我也遇到了类似的问题,而rowcount()
函数实际上可以与SQL Server一起使用。
我正在使用这样的连接字符串(以连接到SQL Server数据库):
$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
当我想使用需要知道要返回的行数的查询时(使用SQL Server),我使用PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
作为PDO prepare函数的第二个参数,如下所示:
$rs = $connection->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
这是Microsoft网站上的示例: https : //msdn.microsoft.com/zh-cn/library/ff628154(v=sql.105).aspx
好吧,共享一个好的解决方案永远不会太晚,
蒙特利尔的JonathanParent-Lévesque
只需引用手册 :
如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。 但是, 并非对于所有数据库都可以保证此行为,并且便携式应用程序不应该依赖此行为 。
您实际上不需要此功能。 以及大多数其他代码
$result = $this->dbConnect->prepare($sql);
$result->bindParam(':user',$this->data['username']);
$result->bindParam(':pass',$this->data['password']);
$result->execute();
$jsonLogin = $result->fetch(PDO::FETCH_ASSOC));
if ($jsonLogin) {
$jsonLogin['area'] = 'another';
return json_encode($jsonLogin);
}
是您所需的全部代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.