我得到了一个这样调用的存储过程:
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
查看http://php.net/manual/en/pdo.setattribute.php获取ATTR_ORACLE_NULLS设置。我猜调整此设置将获得您想要的输出。
结果是程序出错了,虽然很奇怪
在其中一个步骤中,该过程创建了一个临时表并插入了我想要的数据。在我们这里使用的其他系统(用java构建)中,这个过程工作得很好,没有任何错误,所有的数据都在那里。SQL Server Management Studio也一样,没有查询错误
虽然在php中插入失败,因为它创建的表没有空字段(虽然它没有说这样做)。我发现这个尝试连接和查询使用mssql的方式。在$connection->query()调用中,它显示了一个插入错误,说我试图在非空字段中插入null。但我没停剧本。导致没有带空字段的行的结果。pdo版本可能也有同样的问题,但是抑制了错误消息。
我们修改了过程,让表创建显示空字段,但我们仍然不知道为什么它在其他系统中都有效php中这些字段使用了另一个默认值。