4

私はかなり長い間 php をコーディングしてきましたが、最近オブジェクト指向プログラミングを始めました。

以前は mysql_connect()、mysql_query() およびこれらすべての関数を使用していましたが、PDO の方がはるかに優れていると聞きました。

なぜだろうと思い、基本的な PDO ビデオを見ました。

try {
    global $db;
    $db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pw);
} catch (PDOException $e) {
    die("ERROR: " . $e->getMessage());
}

print(gettype($db)."<br>");

function test() {
print(gettype($db));
}

test();

ここでの問題は、テーブルに新しいアイテムを簡単に挿入できるように関数を作成したいということです。しかし、私はこの問題に遭遇しました。私の $db はグローバルではありません。そのため、関数を使用するときにデータベースに再接続する必要がありますが、それはできません。まったく良くありません。

では、この問題を回避するにはどうすればよいでしょうか。ああ、上記のコードは次のように出力します。

object
Notice: Undefined variable: db in /home/vhosts/ollie.ceify.net/www/ip-bless/connect.php on line 25 NULL
4

4 に答える 4

3

プライベート PDO オブジェクトを保持する on オブジェクトを作成し、テーブル名、列名、および値の引数を受け取り、繰り返し呼び出すことができるパブリック クエリ メソッドを定義します。

class DatabaseObject{
  private $db;

  public function __construct() {
    $this->createDB();
  }

  private function createDB() {
    $this->db = PDO("mysql:host=localhost;dbname=yourdatabase", 'username', 'password');
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }

  public function insert($table, $column, $value) {
    try {
      $this->db->query(sprintf("
        INSERT INTO %s (%s)
        VALUES (%s)",
        $table, $column, $value));
    }
    catch (PDOException $e) {
      return $e->getMessage();
    }
  }
}

$db = new DatabaseObject();
$db->insert('table_name', 'column_name', 'value');
于 2012-08-30T11:40:37.083 に答える
1

globalグローバル変数も取得するために使用する必要があります。

function test() {
  global $db;
  print(gettype($db));
}
于 2012-08-27T14:53:56.200 に答える
1

変数をパラメーターとして関数に渡します。

function test($dbObj) {
    print(gettype($dbObj));
}

また

関数をオブジェクト内に配置して$db、メンバー変数として持つことができます。

class myClass {
    public $db;

    public function __construct($dbObj) {
        $this->db = $db;
    }

    public function test() {
        print(gettype($this->db));
    }
}

$myVar = new myClass();
$myVar->test();
于 2012-08-27T14:54:12.423 に答える
0

私が通常行うことは、データベースに接続するための関数を定義するか、既に使用可能なハンドルを取得することです。

function dbHandle()
{
    global $dbh;
    if (is_resource($dbh)) return $dbh;
    return $dbh = new PDO(...); # All your DB credentials here.
}

...簡単な例として、より複雑な設定がある場合、たとえば、この情報をクラスの静的メンバーに格納できます。

于 2012-08-27T14:57:40.213 に答える