Nutzung der PEAR DB

  • Nutzung der PEAR DB

    Hallo Gemeinde,

    Nutzt wer die DB-Klasse von PEAR? Oder kann mir jemand sagen ob die ok ist? Oder soll ich doch meine eigene Klasse verwenden. Ich habe eine Klasse gebaut, die eigentlich ganz gut funktioniert nur mit einem Haken :) wenn ich in einer Schleife eine Abfrage machen (q1) und dann das result in der 2. abfrage verwende (q2) streikt meine Klasse, aus welchen Grund auch immer (kommt kein Error, es geht einfach nicht *g). Desswegen wollte ich mal fragen was ihr von PEAR DB haltet.

    Falls jemand den Fehler in meiner klasse findet wäre das natürlich auch cool :)

    Quellcode

    1. <?php
    2. $Connection = new mysqlconnection();
    3. class mysqlconnection {
    4. var $dbhost = "localhost";
    5. var $dbuser = "test";
    6. var $dbpass = "test";
    7. var $dbname = "test";
    8. var $dbport = "3306";
    9. var $result;
    10. var $link;
    11. var $error = "Error";
    12. function connect() {
    13. $this -> link = mysql_connect($this -> dbhost, $this -> dbuser, $this -> dbpass) or $this -> error('conection');
    14. mysql_select_db($this -> dbname) or $this -> error('select DB');
    15. }
    16. function close() {
    17. mysql_close($this -> link);
    18. }
    19. function mysqlconnection() {
    20. $this -> connect();
    21. register_shutdown_function(array(&$this, 'close'));
    22. }
    23. function query($querystring) {
    24. $this -> result = mysql_query($querystring, $this -> link) or $this -> error('query');
    25. }
    26. function fetch_row() {
    27. return mysql_fetch_row($this -> result); //or $this -> error('fetch_row');
    28. }
    29. function fetch_array() {
    30. return mysql_fetch_array($this -> result); // or $this -> error('fetch_array');
    31. }
    32. function fetch_object() {
    33. return mysql_fetch_object($this -> result); // or $this -> error('fetch_object');
    34. }
    35. function error($type) {
    36. die('{'.$type.'} Database Error: '.mysql_error().' : '.mysql_errno());
    37. }
    38. }
    39. ?>
    Alles anzeigen
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Ich nutze die PEAR Klasse. Das tolle ist, dass man seine Programme nicht mehr für MySQL ODER Postgres ODER ... einschränken muss.

    Zu deiner Klasse:
    Wenn du mysqlconnection nur 1x instanziiert, dann überschreibst du $this->query natürlich jedesmal. Dadurch klappt ein Query in der Schleife nicht.

    Achso, und Klassennamen schreibt nach nach Konvention groß ;)
    Private/Public Modifier wären auch ganz praktisch.
  • Hallo Gemeinde!

    Habe ein kleines Problem mit der PEAR DB Klasse. Und zwar nutze ich die DB-Klasse innerhalb einer Klasse, Funktioniert auch manchmal, jedoch habe ich ein INSERT der nicht klappt und ich bekomme einfach eine Fehlermeldung (auch wenn SELECT falsch ist kommt keine).

    Quellcode

    1. <?php
    2. require_once 'DB.php';
    3. $dsn = array(
    4. 'phptype' => 'mysql',
    5. 'username' => 'test',
    6. 'password' => 'test',
    7. 'hostspec' => 'localhost',
    8. 'database' => 'test'
    9. );
    10. $options = array(
    11. 'debug' => 2,
    12. 'portability' => DB_PORTABILITY_ALL
    13. );
    14. $db =& DB::connect($dsn, $options);
    15. if (PEAR::isError($db)) {
    16. die($db->getMessage());
    17. }
    18. class foo {
    19. public function var() {
    20. global $db;
    21. $db->query("INSERT INTO table (eins, zwei) VALUES ('1', '2')");
    22. }
    23. }
    Alles anzeigen


    Das klappt alles nur solange die SQL-Befehle richtig sind. Wenn sie falsch sind passiert halt garnix ... weder Fehlermeldung noch sonstwas.. es einfach blöd den Fehler ohne eine Meldung zu suchen :(

    kann mir wer da helfen?

    so long

    FoX
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • egal wie ich das drehe oder baue... ich bekomme keine Fehlermeldung und der Insert funktioniert weiterhin nicht, hat jemand noch eine idee?

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • hm ich kann dir nur den tip geben, dein query entweder in der shell auszuproieren oder alternativ im phpmyadmin

    falls da auch keine fehler meldung kommt, zerleg dein query in kleine teile und teste die auf ausführung...

    http://dev.mysql.com/doc/refman/5.1/de/insert.html

    syntax wäre da näher beschrieben, vlt hilft das

    so long da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Versuchs mal damit:

    Quellcode

    1. $query =$db->query("INSERT ...");
    2. if (DB::isError($query)) {
    3. die($query->toString());
    4. }


    ansonsten poste mal die Ausgabe von var_dump($query);

    //EDIT
    Ansonsten hat mein Vorredner recht. Teste dein Query erstmal in der richtigen Umgebung. Dann kannst du den Fehler auf die Klasse oder eben auf den Ausdruck reduzieren.