У меня проблема, когда я получаю количество строк в 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)
С уважением.
Просто цитирую руководство:
Если последний оператор SQL, выполненный связанным PDOStatement, был
оператор SELECT, некоторые базы данных могут возвращать количество строк
возвращается этим утверждением. Тем не мение, такое поведение не гарантируется
для всех баз данных и не следует полагаться на для портативного
Приложения.
Я знаю, что это немного старая тема, но у меня был похожий вопрос сегодня утром, и на самом деле есть способ 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
Ну, никогда не поздно поделиться хорошим решением,
Джонатан Родитель-Левеск из Монреаля
Вам на самом деле не нужна эта функция. Как и большая часть другого кода
$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);
}
это весь код, который вам нужен.