2012-01-06 113 views
0

試圖讓INNER JOIN工作讓我瘋狂,所以我非常希望有人能幫助我。INNER JOIN不能使用PHP PDO MySQL

我有一個數據庫中的兩個表:

BranchEmployees 
DepartmentEmployees 

兩個表有一欄叫EmpID,所以我可以跟蹤哪些員工被分配到哪個部門,哪個分支。我正在製作一份報告,查找哪些員工被分配到指定的部門和分支,排除其他所有員工,因此INNER JOIN查詢似乎是合乎邏輯的解決方案,但我們無法使其工作。我們不斷收到致命錯誤:

Fatal error: Call to a member function fetchAll() on a non-object in ... 

$query="SELECT DepartmentEmployees.EmpID FROM DepartmentEmployees INNER JOIN BranchEmployees ON DepartmentEmployees.EmpID=BranchEmployees.EmpID"; 

$connect=$cdb->query($query); 
$EmployeeList[$m]=$connect->fetchAll(PDO::FETCH_ASSOC); 

嘗試使用INNER JOIN表時它在共享服務器上是否有關係?我不認爲它應該來自我所能讀的,但你永遠不知道。

+1

哪裏'fetchAll'打電話? – 2012-01-06 00:57:14

回答

1
<?php 
try { 
    $db = new PDO("mysql:host=localhost;dbname=yourDBName", 'root', 'pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

    $sql = 'SELECT de.EmpID FROM DepartmentEmployees as de INNER JOIN BranchEmployees as be ON de.EmpID = be.EmpID'; 

    $sth = $db->query($sql); 
} 
catch(PDOException $e) { 
    # There was an error, die 
    die('There was an error.'); 
} 

$sth->setFetchMode(PDO::FETCH_ASSOC); 
$result = $sth->fetchAll(); 

var_dump($result); 
?> 

剛改變這條線爲db連接,查詢應該工作;

$db = new PDO("mysql:host=localhost;dbname=yourDBName", 'root', 'pass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

我希望這有助於。

+0

感謝您的嘗試,但它在$ db-> setAttribute行上產生致命錯誤: 致命錯誤:調用成員函數setAttribute()在/ hermes/bosweb26a/b1552中的非對象 – 2012-01-06 15:36:39

+0

它的聲音像你的PDO模塊沒有加載! – ManseUK 2012-01-06 15:43:20

+0

這意味着你沒有連接到數據庫。尋找PHP警告和錯誤;仔細檢查你的主機,數據庫,用戶和傳遞;確保你的mysql服務器甚至在外部端口上監聽;確保你之間沒有防火牆。 – 2012-01-06 15:44:47

0

我的預感:有一個gazillion員工,fetchAll()超過了一些內存閾值。你的SQL查詢將得到每一個department_employee < - > branch_employee映射,但只有empid字段,這似乎不是很有用。那是你要的嗎?

我喜歡診斷SQL問題時,做的第一件事就是格式化SQL是可讀的:

SELECT DepartmentEmployees.EmpID 
     FROM DepartmentEmployees 
INNER JOIN BranchEmployees 
     ON DepartmentEmployees.EmpID=BranchEmployees.EmpID 

現在,直接對數據庫啓動一個MySQL客戶端(也就是不通過PHP)和確認你會得到你期望的結果。

如果查詢在PHP PDO之外工作(它應該,如果表和字段名是正確的),那麼它必須是該包裝器的問題。你可以發佈堆棧跟蹤嗎?

此外,進行測試,試圖限制結果集,看看它是否修復它(不知道什麼限制PDO語法,但在MySQL這將是「LIMIT 30」)

+0

沒有限制的「PDO語法」,它只會附加到查詢字符串。 – 2012-01-06 01:20:32

+0

感謝您的試用,但每張表(20歲以下)只有少數記錄。 – 2012-01-06 15:37:44

0

聽起來好像你的PDO模塊安裝不正確我們你的PDO結構工作不正常。

使用phpinfo()檢查的第一個問題和第二如下:

try { 
    $dbh = new PDO($dsn, $user, $password); // init your connection here 
} catch (PDOException $e) { 
    die ('Connection failed: ' . $e->getMessage()); 
}