2014-10-03 2 views
0

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

Вот мой 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 Documentation и теперь, я не знаю, что мне нужно делать. Я застрял!

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

Спасибо!

ответ

0

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

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

К сожалению, не работает! Но спасибо! –

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 не позволяет использовать именованные параметры.

Смежные вопросы