dedlfix: [PHP] Hilfe bei Prepared Statements und Singleton

Beitrag lesen

echo $begrüßung;

Kann es sein dass singleton und PDO zusammen gar nicht funktioniert?

Doch, das geht schon, ist aber teilweise sinnlos. Der Konstruktor von PDO ist public, den kannst du trotz deiner Singleton-Versuche immer direkt aufrufen. Wenn du dich aber soweit disziplinierst, auf die direkte Instantiierung von PDO zu verzichten, reicht folgende Kurzform (Fehlerbehandlung mal weggelassen)

class Connection {  
  private static $instance = null;  
  
  public static function getInstance() {  
    if (self::$instance === null)  
      self::$instance = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');  
    return self::$instance;  
  }  
}

Da braucht kein Konstruktor versteckt zu werden, weil diese Klasse nichts weiter enthält als die statische Methode. Auch das Klonen zu verhindern ist witzlos, PDO ist ja weiterhin direkt erreichbar, und einen anderen Nutzen außer dem Singleton hast du der Klasse nicht gegeben, zumindest nicht in dem zitierten Code. Man braucht noch nicht mal eine Klasse dafür, eine einfache Funktion reicht aus:

function getInstance() {  
  static $instance = null;  
  if ($instance === null)  
    $instance = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');  
  return $instance;  
}

Connection::getInstance() bzw. getInstance() geben beide direkt ein PDO-Objekt zurück, dessen Eigenschaften und Methoden du ohne weitere Kopfstände son ansprechen kannst, als hättest du ein PDO-Objekt direkt instantiiert.

sollte ich lieber mysqli verwenden?

In Bezug auf das oben erwähnte Singleton-Problem nimmt sich mysqli nichts. Ansonsten kann ich dir diese Entscheidung nicht abnehmen. Du musst schon selbst mal mit beiden Systemen arbeiten, um zu entscheiden, welches von ihnen dir mehr zusagt.

echo "$verabschiedung $name";