PHP PDO с хранимой процедурой SqlServer не возвращает все данные

Мне дали хранимую процедуру, которая вызывается так:

SP_REPORT_HOME 'param1','param2',1

Он выполняет кучу кода, о котором я не знаю, хотя и возвращает кучу данных, которые мне нужно использовать. Он содержит некоторые поля с нулевыми значениями, в то время как другие полностью заполнены (обратите внимание, что вся строка не является нулевой, а только некоторые поля). Что ж, я использую PDO и PHP на машине с Ubuntu 10.10, чтобы получить эту информацию, мой метод getReport:

public function getReport($empresa1, $empresa2, $num) {
    $ds = $this->connection->prepare('SP_REPORT_HOME ?,?,?');
    $ds->bindParam(1, $empresa1, PDO::PARAM_STR, 4);
    $ds->bindParam(2, $empresa2, PDO::PARAM_STR, 4);
    $ds->bindParam(3, $num, PDO::PARAM_INT, 4);
    $ds->execute(); 
    return $ds->fetchAll();
}

Соединение $this-> — это просто экземпляр PDO, созданный следующим образом:

$this->connection = new PDO(
        "dblib:host=IP:PORT;dbname=DBNAME", 
        "LOGIN", 
        "PASS"
    );

Метод возвращает массив, содержащий данные без строк, содержащих пустые поля, кто-нибудь знает, почему он не показывает эти строки? Они мне очень нужны. Я использую PHP5.3 и SQLServer 2008.


person filaruina    schedule 06.05.2011    source источник


Ответы (2)


Проверьте http://php.net/manual/en/pdo.setattribute.php для параметра ATTR_ORACLE_NULLS. Я предполагаю, что настройка этого параметра даст желаемый результат.

person Chris White    schedule 06.05.2011

Ну, в итоге произошла ошибка в процедуре, хотя это действительно странно.

Процедура на одном из своих шагов создает временную таблицу и вставляет нужные мне данные. В других системах, которые мы здесь используем (встроенных в java), процедура работает просто отлично, никаких ошибок и все данные есть. То же самое происходит для SQL Server Management Studio, ошибок запросов нет.

Хотя в php вставка завершается ошибкой, потому что она создает таблицу с ненулевыми полями (хотя об этом не говорится). Я нашел это, пытаясь подключиться и запросить с помощью mssql. В вызове $connection->query() он показал ошибку вставки, говоря, что я пытался вставить нуль в ненулевое поле. Однако сценарий не остановился. В результате получается результат без строк с нулевыми полями. Версия pdo, вероятно, имела ту же проблему, но подавляла сообщение об ошибке.

Что ж, мы изменили процедуру, чтобы при создании таблицы указывались пустые поля, но все же мы понятия не имеем, почему это работало во всех другие системы и в php использовали другое значение по умолчанию для этих полей...

person filaruina    schedule 07.05.2011