2012-01-06 5 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'입니까? –

답변

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 줄에 치명적인 오류가 발생합니다. 치명적 오류 :/hermes/bosweb26a/b1552의 개체가 아닌 setAttribute() 멤버 함수를 호출합니다. –

+0

소리가납니다. 귀하의 PDO 모듈이로드되지 않았습니다! – ManseUK

+0

이것은 데이터베이스에 연결하지 않음을 의미합니다. PHP 경고 및 오류를 찾으십시오. 호스트, 데이터베이스, 사용자 및 패스를 다시 확인하십시오. mysql 서버가 외부 포트에서 청취하고 있는지 확인하십시오. 귀하 사이에 방화벽이 없는지 확인하십시오. –

0

내 직감 : gazillion 직원이 있고 fetchAll()이 일부 메모리 임계 값을 초과합니다. 당신의 SQL 질의는 department_employee마다 하나의 < -> branch_employee 매핑을 얻습니다. 그러나 EmpID 필드는 매우 유용하지 않습니다. 너가 원하는게 그거야? 지금

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

을 데이터베이스에 대해 직접 MySQL의 클라이언트를 해고 (즉,하지 PHP를 통해) 확인합니다 :

내가 SQL 문제를 진단 할 때 할 좋아하는 첫 번째 일은 읽을 수 있도록 SQL을 포맷하는 것입니다 당신이 기대하는 결과를 얻을 수 있습니다.

쿼리가 PHP PDO 외부에서 작동하는 경우 (테이블 및 필드 이름이 올바른 경우) 해당 래퍼와 관련된 문제 여야합니다. 스택 추적을 게시 할 수 있습니까?

또한, 테스트 결과 집합을 제한하는 시도하고 그것을 해결되는지 확인 (확실하지 LIMIT에 대한 PDO 구문은 무엇입니까하지만 MySQL의에서는 'LIMIT 30'것) 그냥

+0

한계에 대한 'PDO 구문'이 없으며 단순히 쿼리 문자열에 첨부됩니다. –

+0

시도해 주셔서 감사 합니다만, 각 테이블 (20 세 미만)에는 소수의 기록 만 있습니다. –

0

PDO 모듈이 올바르게 설치되지 않았거나 PDO 구성이 올바르게 작동하지 않는 것 같습니다.

사용 phpinfo()는 첫 번째 문제를 확인하고, 두 번째는 다음을 :

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