数据库
首页 > 数据库> > PDO rowCount()在MySQL上有效,但在SQL Server 2008 R2中不可用

PDO rowCount()在MySQL上有效,但在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)

问候.

解决方法:

只是引用manual

If the last SQL statement executed by the associated PDOStatement was
a SELECT statement, some databases may return the number of rows
returned by that statement. However, this behaviour is not guaranteed
for all databases and should not be relied on
for portable
applications.

标签:rowcount,php,mysql,pdo,sql-server-2008-r2
来源: https://codeday.me/bug/20191010/1884897.html