Функции ADODB и SQL SERVER

У меня есть веб-сервис, который подключается к моей базе данных MSSQL, используя ADODB для PHP. Затем я создал простую функцию для возврата строки, просто для тестов, но я реализую ее с другой логикой.

Вот моя функция SQL Server:

USE [myDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [myDB].[VerifyUser]
(
@user varchar(50),
@pass varchar(50)
)
RETURNS varchar(32)
AS
BEGIN
DECLARE @token varchar(32);
SET @token = 'Works!';

RETURN @token;
END

И это мой метод веб-службы:

function wseAutenticacao($usuario, $senha) {
require_once('include/adodb5/adodb.inc.php');

$db = &ADONewConnection('mssqlnative');
$db->Connect(<host>, <user>, <pass>, <db_name>);
$stmt = $db->Prepare('VerifyUser');
$db->InParameter($stmt, $usuario, 'user');
$db->InParameter($stmt, $senha, 'pass');
$db->OutParameter($stmt, $token, 'token');
$result = $db->Execute($stmt);

return array('result' => $result);
}

Я не получаю строку «Работает!» возвращается моей функцией sql. Возвращается логическое значение с ложным значением, как будто я делаю что-то не так, но я последовал примеру документации ADODB и теперь я не знаю, что мне делать. Я застрял!

Если кто-нибудь поделится вашими знаниями, я буду признателен!

Спасибо!

0

Решение

Локальная переменная @token видна только внутри самой функции. Результат скалярной функции необходимо назначить выходному параметру в исполняемом скрипте. Одним из методов, который вы можете попробовать, является параметризованный оператор SELECT, чтобы присвоить возвращаемое значение функции выходному параметру:

$stmt = $db->Prepare('SELECT @token = VerifyUser(@user, @pass);');
0

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

Я знаю, что ветка старая, но я ищу решение для чего-то подобного. Похоже, что текущая реализация ‘Mssqlnative’ не поддерживает параметры вообще. То есть базовый класс ADOConnection реализует метод макета Parameter который должен быть переопределен в подклассах. ADODB_mssqlnative не имеет переопределения этого метода, следовательно, ваши параметры исчезают в пустоте. Следующая вещь, текущая реализация _query() ожидает входные параметры в виде массива.
Таким образом, вы можете изменить свой код на это, чтобы он работал

$db = &ADONewConnection('mssqlnative');
$db->Connect(<host>, <user>, <pass>, <db_name>);
$stmt = 'VerifyUser';
$params = array($usuario, $senha, $token);
$result = $db->Execute($stmt, $params);

return array('result' => $result);

Также обратите внимание, что массив params не является ассоциативным. Текущая реализация sqlsrv_query не разрешает именованные параметры.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector