php - query - rowcount pdo example
PDO rowCount() funciona en MySQL pero no en SQL Server 2008 R2 (3)
Tengo un problema cuando obtengo el número de filas en SQL Server 2008 porque mi código funciona bien usando MySQL pero no en 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 ()) en MySQL y 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) en SQL Server
int(-1)
var_dump ($ numrows) en MySQL
int(1)
Saludos.
Solo citando el manual :
Si la última instrucción SQL ejecutada por la PDOStatement asociada era una instrucción SELECT, algunas bases de datos pueden devolver el número de filas devueltas por esa instrucción. Sin embargo, este comportamiento no se garantiza para todas las bases de datos y no se debe confiar en las aplicaciones portátiles.
Realmente no necesitas esta función. Además de la mayoría del otro código
$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);
}
es todo el código que necesitas
Sé que es un hilo viejo, pero tuve una pregunta similar esta mañana y en realidad hay una forma para que la función rowcount()
funcione con el servidor SQL.
Estoy usando una cadena de conexión como esta (para conectarme a una base de datos del servidor SQL):
$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Y cuando quiero usar una consulta para la cual necesito saber el número de filas a devolver (con el servidor SQL), uso PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
como segundo parámetro de la función de preparación de PDO así:
$rs = $connection->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
Aquí está el ejemplo del sitio web de Microsoft: https://msdn.microsoft.com/en-us/library/ff628154(v=sql.105).aspx
Bueno, nunca es demasiado tarde para compartir una buena solución,
Jonathan Parent-Lévesque de Montreal