2014-02-21 28 views
0

我試圖用教義來調用PostgreSQL數據庫的一些自定義函數,但它不起作用。如何用教條調用PostgreSQL存儲函數

$query = $this->_em->getConnection() 
      ->prepare('SELECT security.check_login($1, $2, $3, $4, 1, $5, 1, $6, false)'); 
$query->bindValue(1, 'myname', \Doctrine\DBAL\Types\Type::STRING); 
$query->bindValue(2, 'mypass', \Doctrine\DBAL\Types\Type::STRING); 
$query->bindValue(3, '35we74', \Doctrine\DBAL\Types\Type::STRING); 
$query->bindValue(4, 'a', \Doctrine\DBAL\Types\Type::STRING); 
$query->bindValue(5, 'b', \Doctrine\DBAL\Types\Type::STRING); 
$query->bindValue(6, '5fuf6d32qbm0hivj739vi8r0t3', \Doctrine\DBAL\Types\Type::STRING); 
var_dump($query->execute()); // return false 
var_dump($query->fetchColumn()); // return false 

有誰知道如何做這樣的查詢?

+1

「它不起作用」。什麼,確切地說,不起作用?如果你用'psql'做同樣的事情會發生什麼?由於execute返回false,數據庫中的錯誤是什麼? –

+0

pgAdmin中的相同請求返回1,這意味着成功。選擇security.check_login('myname','mypass','35we74','a',1,'b',1,'5fuf6d32qbm0hivj739vi8r0t3',false); – Alexandre

回答

2

我終於找到了答案,以我的問題在此線程http://postgresql.1045698.n5.nabble.com/Stored-procedures-PDO-and-PHP-issue-td2211491.html

「你不能使用問號語法和演員。相反,你必須跟投用命名參數。」

$query = $this->_em->getConnection()->prepare(
     'SELECT security.check_login(:user::VARCHAR, :pass::VARCHAR, :tan::VARCHAR, :tan_h1::VARCHAR, 1, :tan_h2::VARCHAR, 1, :session::VARCHAR, false)'); 
$query->bindValue(':user', 'myname'); 
$query->bindValue(':pass', 'mypass'); 
$query->bindValue(':tan', '35we74'); 
$query->bindValue(':tan_h1', 'a'); 
$query->bindValue(':tan_h2', 'b'); 
$query->bindValue(':session', '5fuf6d32qbm0hivj739vi8r0t3'); 
+0

哇,真的嗎?並且PDO不會因錯誤而失敗,它只是默默地屠殺查詢?可愛。 –

+0

是的,它的工作原理:p – Alexandre