Zend 2:SQLSRV:$ prepareParams未设置

时间:2017-03-17 13:52:51

标签: zend-framework zend-framework2 zend-db zend-db-table zend-db-select

有人可以解释一下

->setPrepareParams(array $prepareParams) 

Zend\Db\Adapter\Driver\Sqlsrv\Statement.php

中调用

具体来说,当我使用它时:

$this->tableGateway->select(array("Personalnummer = $personalnumber"));

有效。但是当我用这个时:

$this->tableGateway->select(array("Personalnummer" => $personalnumber));

它不起作用。

我尝试对此进行调试,发现params未使用我的第二种方法进行设置。

3 个答案:

答案 0 :(得分:0)

这是一种公共方法,因此由客户端程序员来使用它。

受保护资产setter仅为$prepareParams

为什么你期望在课堂上调用它?

答案 1 :(得分:0)

您在寻找此代码吗?

Adapter/Driver/Sqlsrv/Statement::prepare()

如果不深入研究它,它看起来就像你调用select语句一样,它期望索引是数字:0,1,2,3 ......等等。

所以当你打电话

array("Personalnummer = $personalnumber")

与调用

相同
array(0 => "Personalnummer = $personalnumber")

由于代码需要索引为0,因此您的代码可以正常工作。使用参数化语句时,代码将失败。因为它不期望参数化数组(你的第二种方式)。

了解如何设置初始参数。可能有一个配置选项将代码设置为期望参数化数组。

答案 2 :(得分:0)

在您的数据库配置中,您的连接驱动程序是什么? PHP仅通过PDO支持参数化查询,Zend Framework不能超越PHP的能力。因此,要使array("Personalnummer" => $personalnumber)正常工作,您需要将驱动程序键配置为 pdo_sqlsrv 。听起来好像有'driver' => 'Sqlsrv'