有人可以解释一下
->setPrepareParams(array $prepareParams)
在Zend\Db\Adapter\Driver\Sqlsrv\Statement.php?
中调用具体来说,当我使用它时:
$this->tableGateway->select(array("Personalnummer = $personalnumber"));
有效。但是当我用这个时:
$this->tableGateway->select(array("Personalnummer" => $personalnumber));
它不起作用。
我尝试对此进行调试,发现params
未使用我的第二种方法进行设置。
答案 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'
。