[PHP/MySQL] Database class

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gyarnoc
  • Registratie: December 2003
  • Laatst online: 19-09 09:54
Gegroet,

Ik heb op tweakers gezocht naar dit probleem, maar niks gevonden.. Het leek me nogal simpel, maar snap niet wat ik fout doe...

Ik heb de volgende class:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class dbcon {
    var $db;
    var $result;
    var $row;
    function connect()
    {
        $this->$db = mysql_connect($sql_host, $sql_dbuser, $sql_dbpass);
        mysql_select_db($sql_dbname,$this->$db);
    }
    function query($query)
    {
        $this->$result = mysql_query($query,$this->$db) OR die("MySQL Error!");
        $this->$row = mysql_fetch_array($this->$result);
        
        return $this->$row;
    }
}


Gemaakt om (wat ik dacht..) makkelijker queries uit te voeren.. maar als ik nu dit doe:

PHP:
1
2
3
$dbcon = new dbcon;

$row = $dbcon->query("SELECT * FROM config");


Krijg ik, wat ik ook doe, de volgende error: Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in d:\webserver\www\develop\mainfile.php on line 23
MySQL Error!

Dat is dit stukje: $this->$result = mysql_query($query,$this->$db) OR die("MySQL Error!");

Om toe te geven.. 1e keer dat ik met classes werk in PHP, maar doe ik nu iets principeels fout of kan dit gewoon niet in een class of iets?

Gegroet!!

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb altijd een de fetch_array en de query gesplit in 2 stukken, zeker omdat ik wel meer dan alleen query's uit wil voeren, waar ik ook andere acties op wil uitvoeren dan een fetch_array.

Deze komt uit een project waar ik nou mee bezig ben, nog niet echt optimaal, maar werkt wel redelijk. Ik gebruik KORTE namen, zodat ik niet veel hoef te scripten.
Ik heb liever $db->qu(query) dan $database->query_execute_commando_dingetje(query) ;)
PHP:
1
2
3
4
5
6
7
8
9
10
    //query's and fetches
    function qu($query) {
        //turn ($this->dbconnected==true AND $ret = mysql_query($query))?$ret:false;
        $ret = mysql_query($query) or die(mysql_error());
        return $ret;
    }
    function fa($data) {
        return ($this->dbconnected==true AND $ret=mysql_fetch_array($data))?$ret:false;
    }
    //end query's and fetches

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ze je error_level eens op E_ALL en je ziet wat je fout doet :)

$this->$db kan niet, (kan wel maar nu even niet, en het is ranzig) dit moet zijn $this->db, zo ook met al die andere :)

Acties:
  • 0 Henk 'm!

  • gyarnoc
  • Registratie: December 2003
  • Laatst online: 19-09 09:54
Had ik eerst ook al gedaan.. maar toen werkte het ook niet, het is dus nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class dbcon {
    var $db;
    var $result;
    var $row;
    function connect()
    {
    global $sql_host, $sql_dbuser, $sql_dbpass, $sql_dbname;

        $this->db = mysql_connect($sql_host, $sql_dbuser, $sql_dbpass);
        mysql_select_db($sql_dbname,$this->db);
    }
    function query($query)
    {
        $this->result = mysql_query($query,$this->db) OR die("MySQL Error!");
        $this->row = mysql_fetch_array($this->result);
        
        return $this->row;
    }
}


Maar krijg precies dezelfde error.. en de 1e reply lost niet echt mijn probleem op :(

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

vergeet je niet de connect eerst aan te roepen?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • gyarnoc
  • Registratie: December 2003
  • Laatst online: 19-09 09:54
Ik dacht dat de 1e functie de constructor was? Of is dat niet zo.. :'(

EDIT: Ah.. opgelost, Ik dacht dat ik ergens had gelezen dat de 1e functie de constructor was.. mjawh.. verkeerd gelezen he.. :X

_/-\o_

[ Voor 55% gewijzigd door gyarnoc op 10-10-2005 16:05 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

http://nl2.php.net/manual/nl/language.oop5.decon.php
For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.
Dus als je de functie connect hernoemt naar dbcon of __construct dan word hij wel aan geroepen als constructor

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Zou je niet eerst $dbcon->connect() aanroepen voordat je met queries aan de slag gaat?


[edit]
never mind :z

[ Voor 17% gewijzigd door masq op 10-10-2005 16:08 ]


Acties:
  • 0 Henk 'm!

  • mcB
  • Registratie: Mei 2002
  • Laatst online: 15-09 08:39

mcB

1> Doe wat Erkens hierboven al zei, je vars goed aanroepen.
2> Connectparameters instantieren
3> Connect aanroepen
4> Dan pas query doen

Strix (Skullflame)


Acties:
  • 0 Henk 'm!

Verwijderd

Voeg de volgende functie toe om via de constructor connect aan te roepen
PHP:
1
2
3
function dbcon() {
  this->connect();
}

En dan in je code
PHP:
1
$dbcon = new dbcon();

[ Voor 3% gewijzigd door Verwijderd op 11-10-2005 15:00 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Is het sowieso niet wat onzinnig een database class te maken die maar 1 row terug kan geven :?

[ Voor 74% gewijzigd door Bosmonster op 11-10-2005 15:12 ]


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Ik zou er zo iets van maken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class dbcon {
    var $db;
    var $resultset;
    var $result;

    function dbcon($host, $user, $pass, $db_name){
        $this->db = mysql_connect($host, $user, $pass);
        mysql_select_db($db_name,$this->db);
    }

    function query($query){
        $this->resultset = mysql_query($query,$this->$db) OR die("MySQL Error!");
        $this->result = mysql_fetch_array($this->resultset);
        
        return $this->result;
    }
}


Ik heb je constructor aangepast zodat hij de connectie opbouwt en je kunt nu dus ook een instantie aanmaken met connectieparameters. Dit doe je vervolgens zo (ook wat aangepast uit je originele post ;)):

PHP:
1
2
3
$dbcon = new dbcon("localhost", "username", "password", "databasenaam");

$row = $dbcon->query("SELECT * FROM config");


Ik heb het niet getest, dus er kan een typootje in zitten .. Maar ik denk dat je het idee wel ziet?
Pagina: 1