带有SqlServer存储过程的PHP PDO不会返回所有数据

时间:2011-05-06 15:09:44

标签: php sql-server stored-procedures pdo ubuntu-10.10

我得到了一个像这样调用的存储过程:

SP_REPORT_HOME 'param1','param2',1

它执行了一堆我不知道的代码,虽然它返回了我需要使用的一堆数据。它包含一些具有空值的字段,而其他字段则完全填充(请注意,整行不为空,只有一些字段) 好吧,我在Ubuntu 10.10机器上使用PDO和PHP来获取该信息,我的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

2 个答案:

答案 0 :(得分:0)

查看http://php.net/manual/en/pdo.setattribute.php以获取ATTR_ORACLE_NULLS设置。我猜这个设置可以获得你想要的输出。

答案 1 :(得分:0)

嗯,结果是程序出错了,虽然这很奇怪。

该过程在其中一个步骤中创建一个临时表并插入我想要的数据。在我们在这里使用的其他系统(内置于java)中,该过程工作正常,完全没有错误,所有数据都存在。 SQL Server Management Studio也是如此,没有查询错误。

虽然在php中插入失败,因为它创建了非空字段的表(虽然它不会这样做)。我发现这使用mssql方式尝试连接和查询。在$ connection-> query()调用中,它显示了一个插入错误,说我试图在非空字段中插入null。虽然没有停止剧本。导致结果没有包含空字段的行。 pdo版本可能有同样的问题,但是正在抑制错误信息。

好吧,我们改变了程序,所以表创建指示空字段,但是,我们仍然不知道为什么它在所有其他系统中工作,并且在php中它使用了这些字段的另一个默认值...