2012-04-29 3 views
-2

나는 내 클래스에 내 PDO 데이터베이스 연결을 포함시키는 가장 좋은 방법을 찾아 내려고 노력했습니다. 여기에 내가 지금까지 가지고 있고 작동하지 않을 코드가 있습니다.클래스에 PDO 데이터베이스 연결 포함

class Delete { 

private $connection; 
    function __construct() { 
     $this->open_connection(); 
    } 
    public function open_connection() { 
     $this->connection = mysql_connect(localhost, 1, 1); 
     if (!$this->connection) { 
      die("Database connection failed: " . mysql_error()); 
     } else { 
      $db_select = mysql_select_db(1, $this->connection); 
      if (!$db_select) { 
       die("Database selection failed: " . mysql_error()); 
      } 
     } 
    } 

public function delete_file($deletelink) { 

$dbh = $this->connection; 



$sth = $dbh->prepare("SELECT hash FROM files WHERE delete_link = :delete_link"); 
//PARAM_INT for int, PARAM_STR for string, PARAM_BOOL for bool 
$sth->bindParam(':delete_link', $deletedlink, PDO::PARAM_STR); 
$sth->execute(); 
$countrows = $sth->rowCount(); 
if ($countrows == 0) { 
return false; 
} else { 



$sth = $dbh->prepare("SELECT filename, hash, ext FROM files WHERE delete_link = :delete_link"); 
//PARAM_INT for int, PARAM_STR for string, PARAM_BOOL for bool 
$sth->bindParam(':delete_link', $deletedlink, PDO::PARAM_STR); 
$sth->execute(); 

} 

}

사람이 그 일을 더 나은 방법이있는 경우 = 공유하시기 바랍니다) 고마워!

+1

당신은 당신이 사용하고있는 모든 클래스에서 PDO 연결을 만들 건가요?! –

+1

고대의'mysql_ *'함수로 새로운 코드 작성을 중단하십시오. 그들은 더 이상 유지되지 않으며 커뮤니티는 [비추천 프로세스]를 시작했습니다 (http://news.php.net/php.internals/53799). 대신 준비된 구문을 배우고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/mysqli)를 사용해야합니다. 만약 당신이 배울 점이 있다면, 여기 [PDO 관련 튜토리얼] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). –

+0

이러한 쿼리는 PDO – HarryBeasant

답변

4

절차 적 mysql_ * 함수를 PDO와 혼합합니다. 왜 PDO 객체를 설정하고 setter-method/constructor를 통해 객체에 할당합니까?

$pdo = new PDO($dsn); 
$delete = new Delete($pdo); 
$delete->deleteFile($filename); 

// .. 
class Delete { 
    protected $_pdo; 
    public function __construct(PDO $pdo) { $this->_pdo = $pdo; } 
    public function deleteFile($filename) { $this->_pdo->query(".."); /* .. */ } 
} 

는, 클래스의 이름을 변경하는 것을 고려하십시오 그 정적 연결을 사용하여,

+0

다른 페이지에서 내 PDO 연결을 유지해야합니까? 내 함수에 $ dbh 객체를 가져 오는 방법은 무엇입니까? 또한 귀하의 예에서 연결 정보는 어디에 있습니까? 현재 PDO 쿼리를 사용하지 않을 수 있습니까? – HarryBeasant

0

내가 정확히를 무엇 매우 간단한 클래스를 사용 (어떻게 무엇을 삭제 하시겠습니까???)를 너무 일반적인 :

소스 : http://simple_pdo_implementation.onlinephpfunctions.com

<?php 
class sql 
{ 
public static $db = false; 
private $database_host = '127.0.0.1'; 
private $database_user = 'username'; 
private $database_pass = 'verySecretPassWord'; 
private $database_db = 'database'; 

function __construct() 
{ 
    if (self::$db === false) { 
     $this->connect(); 
    } 
    return self::$db; 
} 

private function connect() 
{ 
    $dsn = $this->database_type . ":dbname=" . $this->database_db . ";host=" . $this->database_host; 
    try { 
     self::$db = new PDO($dsn, $this->database_user, $this->database_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
     self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch (PDOException $e) { 
     //Comment this out on a production environment 
     //print_r($e->errorInfo); 
     //echo 'Connection failed: ' . $e->getMessage(); 
    } 
} 

}