-2

クラスに 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();

}

}

誰かがそれを行うためのより良い方法を持っている場合は、共有してください =) みんなありがとう!

4

2 に答える 2

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(".."); /* .. */ }
}

クラスの名前を変更することを検討してください。あまりにも一般的です (何を、どこで、どのように削除しますか?)

于 2012-04-29T19:16:27.167 に答える
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();
    }
}

} 
于 2012-08-11T00:13:08.053 に答える