PDO Mysql

Maikomania

Mitglied
Hi Liebe Leute,

nun ist es soweit das ich mich auch mict pdo beschäftigen will möchte muss, da es ja eigentlich schon mehr oder weniger ein muss ist.

Meine Mysql Db auf standartbasis funktioniert einwandfrei nur muss ich das nun für pdo umschreiben kann mir da jemand helfen.

PHP:
class db{
  private $connection = NULL;
  private $result = NULL;
  private $counter=NULL;


  public function __construct($host=NULL, $database=NULL, $user=NULL, $pass=NULL){
	$this->connection = mysql_connect($host,$user,$pass,TRUE);
  	mysql_select_db($database, $this->connection);
  }

  public function disconnect() {
    if (is_resource($this->connection))
        mysql_close($this->connection);
  }

  public function query($query) {
  	$this->result=mysql_query($query,$this->connection);
  	$this->counter=NULL;
  }

  public function row() {
  	return mysql_fetch_assoc($this->result);
  }
  public function xarray() {
    return mysql_fetch_array($this->result);
  }
  public function numrows() {
    return mysql_num_rows($this->result);
  }
  public function count() {
  	if($this->counter==NULL && is_resource($this->result)) {
  		$this->counter=mysql_num_rows($this->result);
  	}

	return $this->counter;
  }
}
Das ist Sie die normale ohne pdo
 
Dazu hatte ich was in meinem Blog geschrieben...
PDO Tutorial
Ansonsten kannst du alles wohl mit den normalen Manuals lösen: PHP.net
Mit PDO ist das ganze genauso einfach wie mit mysql/I, es sind nur andere Befehle und man hat ein schnelles Loggen. :)
 
@darksider3 - zu deinem Tutorial:

Du setzt darin die Idee, die hinter PDO liegt, nur halbherzig um. Wie du richtig schreibst, lautet das Akronym ausgeschrieben PHP Data Objects. Du verwendest aber - vermutlich aus Gründen der Assoziation mit MySQLi oder dem alten Treiber - auf prozedurale Verarbeitung. Sowohl was Results angeht als auch Fehler-Behandlung, bietet PDO wesentlich elegantere Ansätze. Siehe z.B. die Möglichkeit, einen OR-Mapper auf Basis von PDO ganz einfach zu bauen oder den Einsatz von Exceptions.

Ein Tutorial sollte meiner Meinung nach genau diese Aspekte behandeln, den Rest kann man mit MySQLi oder dem alten Treiber genauso erreichen.

Vielleicht schreibst du ja irgendwann ein Tutorial, was diese Möglichkeiten einsetzt.

@Maikomania: Willst du eine Klasse bauen, die genau die gleiche Schnittstelle anbieten, wie derzeit deine DB-Klasse, die nichts anderes tut als die MySQL-Funktionen weg zu abstrahieren? Oder willst du weitere Schritte gehen? Hast du bedacht, das deine Klasse lediglich ein Query bzw. dessen Results verarbeiten kann?
 
Saftmeister ich hatte dort alles verwendet, was schon bekannt für den "Umsteiger" ist. Du hast recht, Eleganter geht es sicherlich, aber das hätte den Ramen gesprengt. Yep ein weiterführendes Tutorial ist in Arbeit :)
OR-Mapper? Sorry, ich kenne mich SQL im allgemeinen nicht mehr so gut aus... Ich bin da schon wieder am reinlesen - kennste ja, lange nichts spezielles Geschrieben, und schon verdrängt.
Er möchte es genauso umgesetzt haben - so gebe ich ihm dafür was an die Hand :)
 
Die neue Klass soll genau das können was meine kann insert update mache ich dan wen ich es brauch geht nur die aktuelle klasse in pdo umzuschreiben kenne mich aber nicht so aus mit execute param und pdo allgemein
 
Funktioniert nur irgendwie nicht

PHP:
<?
class db{
  private $connection = NULL;
  private $result = NULL;
  private $counter=NULL;


  public function __construct($host=NULL, $database=NULL, $user=NULL, $pass=NULL){
	$this->connection = new PDO("mysql:host=".$host.";dbname=".$database, $user, $pass);

}

  public function disconnect() {
    if (is_resource($this->connection))
        mysql_close($this->connection);
  }

  public function query($query) {
  	$this->result=$this->connection->query($query);
  	$this->counter=NULL;
  }

  public function row() {
  	return $this->result->fetch(PDO::FETCH_OB);
  }
  public function xarray() {
  	return $this->result->fetch(PDO::FETCH_ASSOC);
  }

  }
  public function numrows() {
    return $this->result->fetch(PDO::FETCH_NUM);
  }
  public function count() {
  	if($this->counter==NULL && is_resource($this->result)) {
  		$this->counter=$this->result->fetch(PDO::FETCH_NUM);
  	}

	return $this->counter;
  }
}

?>
 
Hab mal ein paar Kommentare an die Code-Zeilen angehängt:

PHP:
 <?
class db{
  private $connection = NULL;
  private $result = NULL;
  private $counter=NULL;


  public function __construct($host=NULL, $database=NULL, $user=NULL, $pass=NULL){
    $this->connection = new PDO("mysql:host=".$host.";dbname=".$database, $user, $pass);

}

  public function disconnect() {
    /*
    if (is_resource($this->connection))
        mysql_close($this->connection); // DAS FUNKTIONIERT NICHT!!
    */
    unset( $this->connection );
  }

  public function query($query) {
      $this->result=$this->connection->query($query);
      $this->counter=NULL;
  }

  public function row() {
      return $this->result->fetch(PDO::FETCH_OBJ); // Hier fehlte das J am Ende
  }
  public function xarray() {
      return $this->result->fetch(PDO::FETCH_ASSOC);
  }

  }
  public function numrows() {
    //return $this->result->fetch(PDO::FETCH_NUM); // Geht nicht!
    return $this->result->rowCount();
  }
  public function count() {
      if($this->counter==NULL && is_resource($this->result)) {
          //$this->counter=$this->result->fetch(PDO::FETCH_NUM); // Geht nicht!
          $this->count = $this->result->rowCount();
      }

    return $this->counter;
  }
}

?>

Außerdem wäre es hilfreich, wenn du posten würdest, was genau nicht funktioniert.
 
Zurück