2013-02-12 38 views
1

我是PHP PDO的新手,並將某些常規MySQL查詢轉換爲與PDO一起工作。php pdo從多個表中選擇多個條款

以下查詢在phpMyAdmin中測試時效果很好,當分配的值替換SQL語句中的當前佔位符時。但是,當我將它配置爲與PDO一起工作時,它不會產生任何結果或錯誤。有人可以告訴我或告訴我,我做錯了什麼?

有人告訴我,我不能在數組中傳遞參數作爲引用。

如果正確,創建解決方案的最佳方式是什麼,並且只使用傳遞給變量$uid的用戶ID。謝謝。

<p>// For testing</p> 
<pre>$uid = 1;</pre> 
<p>&nbsp;</p> 
<pre>$array = array(
    ':uId' => ''.$uid.'', 
    ':aId' => 'u.user_id', 
    ':gID' => 'a.group_id', 
    ':eID' => 'a.entry_id', 
    ':pID' => 'a.permit_id' 
    );</pre> 

 

//創建qd_user_usam表

$sql = "SELECT u.user_id, a.acl_id, g.group_name, e.entry_level, p.permit_level
FROM qd_users as u, qd_users_acl as a, qd_users_group as g, qd_users_entry as e, qd_users_permission as p
WHERE u.user_id = :uID 
      AND a.acl_id = :aID 
      AND g.group_id = :gID 
      AND e.entry_id = :eID 
      AND p.permit_id = :pID";

<p>try 
{</p> 
    <p>// Build the database PDOStatement</p> 
    <pre>$_stmt = $this->_dbConn->prepare($sql);</pre> 
    <pre>$_stmt->execute($array);</pre> 
<pre>} 
catch(PDOException $e) 
{</pre> 
    <pre>$this->_errorMessage .= 'Error processing user login access. <br /> Line #'.__LINE__ .' '.$e ;</pre> 
    <pre>die($this->_errorMessage); 
}</pre> 

<pre>$results = $_stmt->fetchAll(PDO::FETCH_ASSOC);</pre> 
<pre>return $results;</pre> 

<pre>$results = null;</pre> 
<pre>$this->_dbConn = null;</pre> 

回答

1

你把準備好的語句錯誤的SQL。
您必須使用不表示查詢中的任何值,但僅動態添加數據

雖然a.group_id是列名稱,必須按原樣編寫,沒有準備好的語句

// For testing 
$uid = 1; 

// create the sql for qd_user_usam table 
$sql = "SELECT u.user_id, a.acl_id, g.group_name, e.entry_level, p.permit_level 
     FROM qd_users as u, qd_users_acl as a, qd_users_group as 
      g, qd_users_entry as e, qd_users_permission as p 
     WHERE u.user_id = ? 
     AND a.acl_id = u.user_id 
     AND g.group_id = a.group_id 
     AND e.entry_id = a.entry_id 
     AND p.permit_id = a.permit_id"; 
$_stmt = $this->_dbConn->prepare($sql); 
$_stmt->execute(array($uid)); 
+0

這種方法也可以很好地工作,並且我已經看完了。謝謝... – 2013-02-12 19:27:57

1

的問題是,你試圖通過結合聯接的列作爲參數,這是行不通的寫你JOIN小號含蓄。參數不能引用另一列;他們在這種情況下被視爲字符串。如果你重寫這樣的查詢,它應該修復JOIN問題:

SELECT u.user_id, a.acl_id, g.group_name, e.entry_level, p.permit_level 
    FROM qd_users AS u 
     JOIN qd_users_acl AS a ON (u.user_id = a.acl_id) 
     JOIN qd_users_group AS g ON (g.group_id = a.group_id) 
     JOIN qd_users_entry AS e ON (e.entry_id = a.entry_id) 
     JOIN qd_users_permission AS p ON (p.permit_id = a.permit_id) 
    WHERE u.user_id = :uID 
+0

它現在工作得很好,謝謝你的明確細節和解釋;我可以清楚地看到我做錯了什麼。 – 2013-02-12 19:00:26