1

有人可以解釋我在

->setPrepareParams(array $prepareParams) 

被稱爲Zend\Db\Adapter\Driver\Sqlsrv\Statement.php

具體而言,當我用這個:

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

它的工作。但當我用這個:

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

它沒有工作。

我試圖調試這個,發現params沒有與我的第二種方法設置。

回答

0

這是一個公開的方法,所以它是由客戶端程序員來使用它。

這只是setter受保護的財產$prepareParams

你爲什麼期望在班內被稱爲?

+0

這是我的問題: 即時通訊使用: $ this-> tableGateway-> select(array(「Personalnummer = $ personalnumber」)); < - 這是行得通的。 $ this-> tableGateway-> select(array(「Personalnummer」=> $ personalnumber)); < - 不起作用。 我試圖調試並發現,參數沒有設置第二種方法。 – stefen

0

你是否正在尋找代碼?

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

不看深入它,它看起來像您呼叫的select聲明的方式,它預期是數字索引:0,1,2,3,...等等。

所以,當你調用

array("Personalnummer = $personalnumber") 

它是與調用

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

而且,由於代碼索引0需要一個,你的代碼工作即可。當你使用參數化語句時,你的代碼失敗了。因爲它不期望參數化數組(你的第二種方式)。

看看你如何設置你的初始參數。可能有一個配置選項將代碼設置爲期望參數化數組。

+0

謝謝。我的問題是,我想使用數組(「Personalnummer」=> $ personalnumber)方法,因爲那麼參數被引用。它應該工作(Zend教程),但它沒有。我試圖找出設置參數的位置,但只找到設置列名的部分。你可以向我解釋設置參數值的位置嗎?他們總是空的:/配置應該沒問題,因爲這個方法正在工作:array(「Personalnummer = $ personalnumber」) – stefen

+0

你有鏈接到它應該工作的教程頁面嗎? – Dennis

+0

通過它看起來像Zend使用的SQL Server驅動程序,它沒有參數值數組的語法。如果你看看我已經鏈接的代碼,它應該傳遞一個實際值時傳遞''''(emtpy值)。換句話說,Zend擁有的SQL Server驅動程序不會做你想做的事情。你將不得不使用整數索引數組,沒有參數值 – Dennis

0

在您的數據庫配置中,什麼是連接驅動程序? PHP僅支持通過PDO進行參數化查詢,而Zend Framework不能超越PHP的功能。因此,要獲得array("Personalnummer" => $personalnumber)工作,您需要具有配置驅動程序密鑰爲pdo_sqlsrv。聽起來像你有'driver' => 'Sqlsrv'