MySQL Verbindungsprobleme über OOP

04/08/2011 20:37 LostHope.#1
Hallo allerseits,
ich habe Probleme mit meinem Projekt und zwar möchte ich in OOP etwas größeres und komplexeres Programmieren. Derzeit bin ich aber noch am Dazulernen, wenn ihr gute Seiten darüber habt könnt ihr sie gerne posten(bekommt 10 Thanks :) ).

Hier ist der Code, es wird nichts angezeigt(Problemzone While-Schleife).
Ohne While Schleife bekomme ich meine Ergebnisse.
PHP Code:
<?php

/**
*
* Database Connect
*
**/

$host         "localhost";
$user         "root";
$password     "";
$database     "database";
$table        "post";

class 
MySQL
{
    public  
$connection FALSE;
    private 
$host;
    private 
$user;
    private 
$password;
    private 
$database;
    
    function 
connectDB($host,$user,$password)
    {
        
$this->connect mysql_connect(
            
$host,
            
$user,
            
$password
            

                or die (
mysql_error());
    }
    
    function 
selectDB($database)
    {
        
mysql_select_db($database)
            or die (
mysql_error());
    }
    
    function 
fetchRow($table)
    {
        
$query mysql_query("SELECT * FROM $table"
            or die (
mysql_error());
        while(
$row mysql_fetch_assoc($query))
        {
            
$id $row['id'];
            
$content $row['content'];
        }
    }
}

$MySQL = new MySQL;
$MySQL->connectDB($host,$user,$password);
$MySQL->selectDB($database);
$MySQL->fetchRow(post);

echo 
$id;
echo 
$content;

?>
04/09/2011 12:43 banjo1#2
Beschäftige dich mal mit dem Gültigkeitsbereich von Variablen (local, global).

PHP Code:
    function fetchRow($table)
    {
        
$query mysql_query("SELECT * FROM $table"
            or die (
mysql_error());
        while(
$row mysql_fetch_assoc($query))
        {
            
$id $row['id']; //nur in deiner function gültig, $id wird bei jedem Durchlauf überschrieben
            
$content $row['content']; //nur in deiner function gültig, $id wird bei jedem Durchlauf überschrieben
        
}
    } 
Quick-and-dirty:
PHP Code:
    function fetchRow($table)
    {
        
$query mysql_query("SELECT * FROM $table"
            or die (
mysql_error());
        while(
$row mysql_fetch_assoc($query))
        {
            global 
$id$content;    
            
$id $row['id']; //global gültig, $id wird bei jedem Durchlauf überschrieben
            
$content $row['content']; //global gültig, $id wird bei jedem Durchlauf überschrieben
        
}
    } 
[Only registered and activated users can see links. Click Here To Register...]
04/10/2011 16:34 Bot_interesierter#3
Code:
        while($row = mysql_fetch_assoc($query))
ist auch noch falsch, = ist in php kein Vergleichsoperator sondern wird für Zuweisungen verwandt, richtig wäre hier == oder besser noch === zu verwenden.
04/10/2011 20:20 banjo1#4
Quote:
Originally Posted by Bot_interesierter View Post
Code:
        while($row = mysql_fetch_assoc($query))
ist auch noch falsch, = ist in php kein Vergleichsoperator sondern wird für Zuweisungen verwandt, richtig wäre hier == oder besser noch === zu verwenden.
Schonmal daran gedacht, dass es dort nichts verglichen wird?!
04/11/2011 15:22 Bot_interesierter#5
Quote:
Originally Posted by banjo1 View Post
Schonmal daran gedacht, dass es dort nichts verglichen wird?!
Ja da hast du recht.
04/11/2011 19:47 silon#6
-
04/12/2011 02:37 hen!#7
Was du machen könntest währe z. B. folgendes:

PHP Code:
    function fetchRow($table)
    {
        
$qryData = array();
        
$query mysql_query("SELECT * FROM $table"
            or die (
mysql_error());
        
$x=0;
        while(
$row mysql_fetch_assoc($query))
        {
            
$qryData['result'][] = $row;
            $++;
        }
        
$qryData['count'] = $x;
        return 
$qryData;
    } 
PHP Code:
var_dump($MySQL->fetchRow($post)); 
Damit würdest du die Daten inkl. Anzahl der Datensätze ausgeben. Ob dies nun einen tatsächlichen Nutzen bringt (doppeltes durchlaufen beim weiterverarbeiten der Daten) is fraglich. Neben dem Hauch objektorientierung kann man da nicht viel entdecken. Guck dir mal Mysqli an.

Hinzu kommt, dass du *-Selects machst und das ist nicht performant. Du solltest den kompletten Query übergeben.