query example php mysql pdo sql-server-2008-r2 rowcount

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