【问题标题】:PHP PDO with SqlServer Stored Procedure doesn't return all the data带有 SqlServer 存储过程的 PHP PDO 不返回所有数据
【发布时间】:2011-08-20 06:41:18
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      好吧,虽然这很奇怪,但程序最终还是出错了。

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 2012-12-22
        • 2017-09-17
        • 2013-12-10
        • 1970-01-01
        • 2012-12-17
        相关资源
        最近更新 更多