[PHP] database klasse probleem

Pagina: 1
Acties:

Onderwerpen


  • Kanter
  • Registratie: April 2003
  • Laatst online: 14:40
Ik heb met behulp van tutorials een klasse gemaakt om een verbinding op te zetten naar een database om daar vervolgens tabellen e.d. mee uit te kunnen printen.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class dbConnection  {
    
        public $db = "fd";
        public $dbhost = "localhost";
        public $dbuser = "root";
        public $dbpass = "";
        
        public $link;
        public $result;
        public $query;
        
        public function __construct($db=""){
            $this->database = $db;
            $this->link = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass);
            
            if ($this->link)
            {
                if(mysql_select_db($db, $this->link))
                {
                    return true;
                }else {
                    mysql_error();
                    return false;
                }
            }else {
                mysql_error();
                return false;
            }
        
        }
        public function setQuery($query){
            if (!empty($query))
            {
                $this->query = $query;
                $this->result = mysql_query($query,$this->link) or die (mysql_error());
                return $this->result;
            }else{
                return false;
            }
        }
        public function fetch($result=""){
                if (empty($result)){ $result = $this->result; }
                return mysql_fetch_row($result);
        }   
        
        public function __destruct(){
                mysql_close($this->link);
        }
    }


Nu zit ik al een tijd vast op de volgende error "No database selected". Op een of ander manier wordt de database niet geselecteerd. Nu heb ik een if statement gebruikt om daar juist op te controleren. Volgens mij zit het probleem in dat de database niet goed wordt meegegeven. Ik zie het niet meer dus als iemand mij een duw in de juist richting kan geven :)

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Als jij in je constructor geen database meegeeft zet hij die op "", leeg dus.

Going for adventure, lots of sun and a convertible! | GMT-8


  • Thralas
  • Registratie: December 2002
  • Laatst online: 21:46
Kanter schreef op woensdag 24 september 2008 @ 14:12:
Volgens mij zit het probleem in dat de database niet goed wordt meegegeven.
Dat is natuurlijk vrij simpel te controleren als je zelf even een print statement invoegt 8)7
Snake zou best eens gelijk kunnen hebben.

Edit: Je else is vrij nutteloos. Bekijk nog eens goed in de documentatie wat mysql_error returned, en wanneer hij dat doet (geen database geselecteerd hebben levert geen error op). Ten tweede staan er returns in je constructor, dit kan natuurlijk niet, immers, een constructor levert een nieuw object op.

[ Voor 32% gewijzigd door Thralas op 24-09-2008 14:21 ]


  • Toolskyn
  • Registratie: Mei 2004
  • Laatst online: 22-06 11:01

Toolskyn

€ 500,-

Volgens mij moet je daarnaast ook nog eens heel even kijken naar hoe dat met klassen in elkaar zit. Ik heb t idee dat je hier overal maar public hebt toegevoegd omdat je dat ergens hebt gezien. Het kan natuurlijk een keuze zijn die je maakt, maar zeker van die tijdelijke variabelen als $result en $query zijn over het algemeen niet dingen die je publiek wil hebben.

Overigens is basisfunctionaliteit zoals in deze ook al te vinden in PDO, wat op de gemiddelde server wel geinstalleerd is tegenwoordig. Misschien interessant om daar ook eens naar te kijken (dat neemt niet weg dat zelf iets in elkaar knutselen altijd een goeie oefening kan zijn).

gewooniets.nl


Verwijderd

Toolskyn schreef op donderdag 25 september 2008 @ 01:19:
Volgens mij moet je daarnaast ook nog eens heel even kijken naar hoe dat met klassen in elkaar zit. Ik heb t idee dat je hier overal maar public hebt toegevoegd omdat je dat ergens hebt gezien. Het kan natuurlijk een keuze zijn die je maakt, maar zeker van die tijdelijke variabelen als $result en $query zijn over het algemeen niet dingen die je publiek wil hebben.
Je moet ze sowieso niet als members van een MySQL connection class willen hebben. Het zijn typisch variabelen die alleen in de locale functie-scope bestaan, zoals je al zegt.
Overigens is basisfunctionaliteit zoals in deze ook al te vinden in PDO, wat op de gemiddelde server wel geinstalleerd is tegenwoordig. Misschien interessant om daar ook eens naar te kijken (dat neemt niet weg dat zelf iets in elkaar knutselen altijd een goeie oefening kan zijn).
Alleen als je inziet hoe het dus niet moet ;)

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Laat gerust ook de aanroepende code zien, en gebruik dan meteen ook [php] [/php] tags (aub ook ipv de code tags in de startpost). ;)

Overigens, maar dat zal het probleem hier niet zijn, heb je een member variabele $db, maar doe je een assignment aan $this->database. ;) En je wilt altijd wel een db selecteren, dus die constuctor parameter hoeft imo niet optioneel.
Toolskyn schreef op donderdag 25 september 2008 @ 01:19:
Het kan natuurlijk een keuze zijn die je maakt, maar zeker van die tijdelijke variabelen als $result en $query zijn over het algemeen niet dingen die je publiek wil hebben.
Hoewel een goed punt, is het nog wel 10x gekker dat $dbuser en $dbpass public zijn. ;)

{signature}


  • Kanter
  • Registratie: April 2003
  • Laatst online: 14:40
Allen bedankt voor de reacties. Ik heb het een en ander aangepast maar heb het idee dat ik het wiel weer opnieuw aan het uitvinden ben. Ik kwam de mysqli extension ook tegen wat in principe al doet wat ik wil. Het gebruik van pointers en public/private is me nog niet geheel duidelijk. Daar zal ik me eerst is in moeten verdiepen.
Pagina: 1