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;
}

var_dump ($ result-> выборки ()) в 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)

С уважением.

0

Решение

Просто цитирую руководство:

Если последний оператор SQL, выполненный связанным PDOStatement, был
оператор SELECT, некоторые базы данных могут возвращать количество строк
возвращается этим утверждением. Тем не мение, такое поведение не гарантируется
для всех баз данных и не следует полагаться на
для портативного
Приложения.

0

Другие решения

Я знаю, что это немного старая тема, но у меня был похожий вопрос сегодня утром, и на самом деле есть способ rowcount() функция для работы с SQL сервером.

Я использую строку подключения вот так (для подключения к базе данных SQL-сервера):

$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

И когда я хочу использовать запрос, для которого мне нужно знать номер возвращаемой строки (с сервером SQL), я использую PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL как второй параметр PDO подготовить функцию так:

$rs = $connection->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));

Вот пример с сайта Microsoft: https://msdn.microsoft.com/en-us/library/ff628154(v=sql.105).aspx

Ну, никогда не поздно поделиться хорошим решением,

Джонатан Родитель-Левеск из Монреаля

3

Вам на самом деле не нужна эта функция. Как и большая часть другого кода

$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);
}

это весь код, который вам нужен.

0
По вопросам рекламы [email protected]