Otto Wyss: ErrorInfo in PHP

Eigentlich möchte ich nur den Fehlertext ausgeben, aber ohne ihn erst in einer Array-Variable abzuspeichern. Irgendwie ist aber

$text = $stmt->errorInfo()[2];

nicht erlaubt. Wie schreibt man das ohne gleich

$arr = stmt->errorInfo();
  $text = $arr;

angeben zu müssen?

  1. Lieber Otto,

    $text = $stmt->errorInfo()[2];

    in JavaScript kann man solche verketteten Schreibweisen nutzen, in PHP dagegen nicht.

    $arr = stmt->errorInfo();
      $text = $arr;

    Du meintest sicherlich das hier?

    $arr = $stmt->errorInfo(); // ist "smtm" wirklich eine Konstante?  
    $text = $arr[2]; // Wert des dritten Array-Index
    

    Nun, du willst aus einem Array, das Dir eine Funktion zurückliefert, den Wert zu einem bestimmten Index haben, stimmt's? Dann sehe ich momentan keine andere Möglichkeit, als obige Schreibweise... es sei denn, Du kennst die Funktionsweise von errorInfo() und kannst direkt auf das Array zugreifen:

    $text = $stmt->errors[2]; // falls die Objekteigenschaft "errors" existiert

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hello,

      $text = $stmt->errorInfo()[2];

      in JavaScript kann man solche verketteten Schreibweisen nutzen, in PHP dagegen nicht.

      $arr = stmt->errorInfo();
        $text = $arr;

      Du meintest sicherlich das hier?

      $arr = $stmt->errorInfo(); // ist "smtm" wirklich eine Konstante?

      $text = $arr[2]; // Wert des dritten Array-Index

        
      Alternativ dazu könnte die Methode errorInfo() auch modifiziert werden. Durch Angabe eines Parameters wäre es dann z.B. möglich, nicht ein Array, sondern nue ein Element des Ergebnisarrays zurückzugeben.  
        
      Dazu müsstest Du natürlich in den Quellcode eingreifen, bzw. ihn entsprechend vererben.  
        
      Wenn Du keinen Eingriff willst, kannst Du auch in der Interpreter-Ebene bleiben und einfach einen Wrapper um die Methode schreiben. Das wäre noch eine ALternative zur Vererbung.  
        
        
        
        
        
        
        
        
        
      Liebe Grüße aus dem schönen Oberharz  
        
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
       ☻\_  
      /▌  
      / \ Nur selber lernen macht schlau  
      <http://bergpost.annerschbarrich.de>
      
      1. Hi!

        $arr = $stmt->errorInfo();

        $text = $arr[2]; // Wert des dritten Array-Index

        
        >   
        > Alternativ dazu könnte die Methode errorInfo() auch modifiziert werden. Durch Angabe eines Parameters wäre es dann z.B. möglich, nicht ein Array, sondern nue ein Element des Ergebnisarrays zurückzugeben.  
        >   
        > Dazu müsstest Du natürlich in den Quellcode eingreifen, bzw. ihn entsprechend vererben.  
          
        Das wird sich als ziemlich umständlich herausstellen. Wie in [seiner anderen Anfrage](https://forum.selfhtml.org/?t=195274&m=1306887) zu sehen ist, verwendet er PDO. Ein PDOStatement-Objekt wird von PDO::prepare() erzeugt. Man müsste nun also von der Klasse PDO erben und prepare() überschreiben, dass es ein Objekt einer von PDOStatement abgeleiteten Klasse zurückgibt. Da man nicht alle Funktionalität von prepare() neu erfinden will, ruft man zweckmäßigerweise das PDO::prepare() auf und hat nun weiterhin das Problem, ein PDOStatement-Objekt zu haben und kein davon abgeleitetes. Man kann einen Dekorator davorsetzen oder auf anderem Wege eine Umschreibung vornehmen. Auf alle Fälle muss man dafür sorgen, dass die Methoden und Eigenschaften von PDOStatement, die man verwenden will, weiterhin erreichbar sind. Das führt im Decorator-Fall mindestens zur magischen Methode [__call()](http://de.php.net/manual/en/language.oop5.overloading.php). Da sehe ich den Weg über eine Zwischenvariable doch als den schmerzfreiesten an, mit dem geringsten Fehlerpotential.  
          
          
        Lo!
        
  2. Moin!

    Eigentlich möchte ich nur den Fehlertext ausgeben, aber ohne ihn erst in einer Array-Variable abzuspeichern. Irgendwie ist aber

    $text = $stmt->errorInfo()[2];

    nicht erlaubt. Wie schreibt man das ohne gleich

    $arr = stmt->errorInfo();
      $text = $arr;

    angeben zu müssen?

    Eine Konstruktion mit list() wäre denkbar, oder die Erweiterung von $stmt auf das Interface ArrayAccess.

    - Sven Rautenberg