Нет результатов при вызове UDF в операторе select - PullRequest
1 голос
/ 26 сентября 2019

Используя PHP 7.1, PDO, я пытаюсь выполнить запрос к удаленной базе данных SQL Server, которая все прекрасно подключается и может выполнять запросы, принимает при использовании пользовательских функций.

Оператор выполняетсянормально, когда запускается напрямую в базе данных SQL Server, проблема заключается только в PHP.

Я запускал это через PHP без пользовательской функции и работает нормально, я получаю результаты.

Любыепомощь была бы отличной.

Спасибо

$pdo = new \PDO(
            sprintf(
                "dblib:host=%s;dbname=%s",
                $server,
                $database
            ),
            $user,
            $pass
        );


$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = "
    select 
        acCode AS 'Ac Code', 
        acCompany AS 'Company Name',
        myDBName.myFunctionName(2020, 0, acCode) AS 'Balance'
    from 
        myDBName.CUSTSUPP
    where 
        acCustSupp = 'C' 
    and
        myDBName.myFunctionName(2020, 0, acCode) > 0
    order by 
        acCode";

$statement = $pdo->prepare($query);

$statement->execute();

$results = $statement->fetchAll(PDO::FETCH_ASSOC);

1 Ответ

1 голос
/ 26 сентября 2019

UDF выполняются в операторе SELECT с указанием владельца, имени и параметров.В вашем случае, если myDBName не является именем владельца, вам нужно изменить его на dbo или фактического владельца.Кроме того, вам нужно включить обработку исключений, чтобы получить реальное сообщение об ошибке.

Вы можете попробовать следующий код, основанный на коде в вашем вопросе:

<?php

// PDO object
$server = "myserver";
$database = "myDBName";
$user = "myuser":
$pass = "mypassword";
try
    $pdo = new \PDO(
            sprintf(
                "dblib:host=%s;dbname=%s",
                $server,
                $database
            ),
            $user,
            $pass
        );
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die ("Error connecting. ".$e->getMessage());
}

// Statement
try
    $query = "
        select 
            acCode AS [Ac Code], 
            acCompany AS [Company Name],
            dbo.myFunctionName(2020, 0, acCode) AS [Balance]
        from 
            CUSTSUPP
        where 
            acCustSupp = 'C' 
        and
            dbo.myFunctionName(2020, 0, acCode) > 0
        order by 
            acCode";
    $statement = $pdo->prepare($query);
    $statement->execute();
    $results = $statement->fetchAll(PDO::FETCH_ASSOC);
    // ... Additional code here
} catch (PDOException $e) {
    die ("Error executing query. ".$e->getMessage());
}

// End
$statement = null;
$pdo = null;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...