2012-04-29 7 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オブジェクトを設定し、セッターメソッド/コンストラクタを使用してオブジェクトに割り当てるのはなぜですか?

$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(); 
    } 
} 

} 
関連する問題