2013-04-08 67 views
3

我有以下的,我不能得到它的工作:PHP PDO(PostgreSQL的):無法獲取多個參數的工作

$pdo = new \PDO('pgsql:host=xxxx;port=xxx;dbname=xxx;user=xxx;password=xxx'); 

$foo = 123; 
$bar = 123; 

$query = ' 
SELECT *, 
(
    SELECT allow 
    FROM foo 
    WHERE foo_field = ? 
    AND lorem.lorem_id = foo.lorem_id 
) as foo_allowed, (
    SELECT allow 
    FROM bar 
    WHERE bar_id = ? 
    AND lorem.lorem_id = bar.lorem_id 
) as bar_allowed 
FROM lorem'; 

$stmt = $pdo->prepare($query); 
$stmt->bindValue(1, $foo); 
$stmt->bindValue(2, $bar); 
$stmt->execute(); 

var_dump($stmt->fetchAll()); 

上面的代碼給我下面的錯誤:

Message: An exception occurred while executing '(query)': SQLSTATE[08P01]: <>: 7 ERROR: bind message supplies 2 parameters, but prepared statement "" requires 1

我在MySQL中嘗試過,它工作正常。我也嘗試了命名參數,但這也不起作用。

任何人有任何想法?使用PHP版本5.4.6和PostgreSQL 9.1.7。

@Kovge 我有用戶,角色和資源。用戶可以讓資源和角色擁有資源。用戶有一個角色。在表user_resource中有一個字段,表示是否允許用戶訪問資源。角色也是一樣。 我想要一個包含所有資源的表(HTML表),並查看用戶是否被允許訪問資源(先通過user_resource,然後是role_resource)

+0

可能需要加入嗎?或者'foo_allowed'和'bar_allowed'將在行上具有相同的值。 – vikingmaster 2013-04-08 12:48:40

+0

@Jari也許一個連接確實是一個好主意,但對於foo_allowed和bar_allowed,我將這些值從不同的表中獲得,以便它們如何在行上變成相同的值? – 2013-04-08 13:02:32

+0

另外,我在mysql中嘗試了相同的查詢,它工作得很好.. – 2013-04-08 13:03:33

回答

1

您可以使用表連接嗎?所以你的查詢變得像這樣:

SELECT l.*, 
     f.allow, 
     b.allow 
    FROM foo_allowed f INNER JOIN 
     lorem l ON (l.lorem_id = f.lorem_id) INNER JOIN  
     bar_allowed b ON (l.lorem_id = b.lorem_id)  
WHERE f.foo_field = ? 
    AND b.bar_field = ? 

我還沒有測試過,所以語法可能是錯誤的。

1

您是否嘗試過直接調用execute而沒有綁定。

$stmt = $pdo->prepare($query); 
$stmt->execute(array(1 => $foo, 2 => $bar));