2013-08-12 2 views
2

그래,이 개 별도의 PHP 파일을 전달하지, 하나는 다른 클래스이며, 주요 스크립트입니다. PDO를 사용하여 SQL 데이터베이스에 연결하려고합니다. 주 스크립트에서 PDO 연결을 만든 다음 다른 스크립트의 클래스에 쿼리를 전달합니다.PDO 연결 개체는 클래스에

Fatal error: Call to a member function prepare() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/test/class.php on line 16 

나의 이해는 PHP 스크립트에서 객체에 대한 참조를 전달할 수 있다고했지만, 오류가 오브젝트가 존재하지 않습니다 말한다 : 그러나, 나는 다음과 같은 오류를 얻고있다.

다음은 주요 PHP 스크립트 인 PDO 객체를 생성하고 재생할 수있는 클래스에 전달합니다.

<?php 
session_start(); 
unset($_SESSION['reference']); 

require('class.php'); 

//connect to database, I know that username and password are not included 

$dsn = 'mysql:dbname=test;host=localhost'; 

try { 
    $dbh = new PDO($dsn); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    die ('Connection failed: ' . $e->getMessage()); 
} 

$objReference = new reference($dbh); 
$reference = $objReference->getReference(); 


$_SESSION['reference'] = $reference; 
session_write_close(); 

?> 

아래는 class.php 파일입니다. 객체를 수신하고 데이터를 가져옵니다.

내가 모르는 수업에 PDO 개체를 전달할 수있는 또 다른 방법이 있습니까? 모두에게 감사드립니다. $dbh 이후

+0

이 도움이된다면보기 : 그가 $ this- 설정되어 있기 때문에 공공 기능 __construct (PDO의 $의 DBH) { – Maximus2012

답변

2

당신이 그것을 참조 할 의사 $this를 사용한다하여 setReference 기능에, 인스턴스 변수입니다 :

$refid=$this->dbh->prepare(" SELECT MAX(id) FROM createX "); 

$this->dbh를 사용합니다.

+0

하지만> DBH = $ DBH; 생성자에서 $ this-> dbh-> prepare없이 prepare를 호출 할 수 없습니까? – Maximus2012

+1

@ Maximus2012, no. 이 경우'$ dbh '는 정의되지 않습니다. – vee

+0

알았습니다. 해명 해줘서 고마워. 나는 이것이 약간 혼란스러워한다고 생각한다. – Maximus2012

0

당신이 오류가있는 이유는 DB 연결이 실패한다는 것입니다. PDO 개체를 인스턴스화하려고 시도 할 때 암호 매개 변수를 전달하는 것을 잊어 버린 것 같습니다.

당신이 일시적으로 가능성이 사건으로 이것을 증명하는 더 자세한 오류 메시지가 표시됩니다 try/catch 블록을 주석 경우

. 당신이 당신의 DB 연결이 정리 될 때

, 나는 다음을 수행합니다 :

  1. 는 dbconnection 클래스를 확인합니다.
  2. 는 PDO 해당 클래스의 protected 멤버를 반대합니다.
  3. 모델 클래스에서 dbconnection 클래스를 확장하여 db 연결에 액세스 할 수있게하십시오.

매우 간단하고 더 안전하지만 먼저 DB 연결 문제를 해결하십시오.