[OOP] Klassenaufruf in Unterfunktion nicht möglich?

Da_Chris

Erfahrenes Mitglied
Hallo ich hab folgende Klassen:
PHP:
class mysql
{

    public $host = cMysqlHost;
    public $database = cMysqlDatabase;
    private $user = cMysqlUser;
    private $pass = cMysqlPass;
    private $persistency = false;
    private $serverid = "";

    function mysql()
    {
        $serverid = $this->serverid;

        $this->persistency = (defined(cMysqlPersistency)?cMysqlPersistency:false);
        if ($this->persistency)
        {
            $this->serverid = mysql_pconnect($this->host, $this->user, $this->pass);
        }
        else
        {
            $this->serverid = mysql_connect($this->host, $this->user, $this->pass);
        }
        if (!($this->serverid))
        {
            return false;
        }
        else
        {
            if ($this->database == "")
            {
                return false;
            }
            else
            {
                $list = @mysql_list_dbs($this->serverid);
                $db_exists = false;
                while ($db = mysql_fetch_object($list))
                {
                    if ($db->Database == $this->database)
                    {
                        $db_exists = true;
                    }
                }
                if (!(mysql_select_db($this->database, $this->serverid)))
                {
                    return false;
                }
            }
        }
    }

    function fetch_array($query,$result_type=MYSQL_ASSOC)
    {
        $array = array();
        $result = mysql_query($query);
        if (!$result)
        {
                return false;
        }
        while ($row = mysql_fetch_array($result,$result_type))
        {
            array_push($array,$row);
        }
        @mysql_free_result($result);
        return $array;
    }
    function query($query)
    {
        $result = mysql_query($query);
        if (!$result)
        {
                return false;
        }
        return $result;
    }

    function close()
    {
        if (!($this->serverid))
        {
            return false;
        }
        else
        {
            @mysql_close($this->serverid);
            return true;
        }
    }

    function __destruct()
    {
        if (!($this->persistency))
        {
            $this->close();
        }
    }
}
PHP:
class user
{
    public $id = 0;
    public $name = "Guest";
    public $email = "";
    protected $rights = array();
    private $mysql = "";

    function find($id="",$name="",$email="")
    {
        $mysql = new mysql();
        $where = "";
        if ($id!="")
        {
            $where .= ((strlen($where)>0)?" OR ":"")."`Id` = '".addslashes($id)."'";
        }
        if ($name!="")
        {
            $where .= ((strlen($where)>0)?" OR ":"")."`username` = '".addslashes($name)."'";;
        }
        if ($email!="")
        {
            $where .= ((strlen($where)>0)?" OR ":"")."`email` = '".addslashes($email)."'";;
        }
        return $mysql->fetch_array("SELECT * FROM `".cMysqlPrefix."_users` WHERE ".$where);
    }

    function add($name,$email,$arrRights)
    {
        $mysql = new mysql();
        $arrUser = $this->find(5,"test","test2");
        if (count($arrUser)>0)
        {
            // User already exists
            return false;
        }
        $rights = serialize($arrRights);
        $mysql->query("INSERT INTO `".cMysqlPrefix."_users` SET `username` = '".addslashes($name)."', `email` = '".addslashes($email)."', `rights` = '".addslashes($rights)."';");
        return true;
    }

}
PHP:
$arrRights = array("test1"=>true,"test2"=>false);
$user = new user();
$user->add("testuser","mail",$arrRights);
wenn ich in der funktion add() in der user Klasse die find() funktion aufrufe bekomme ich folgenden Fehler:
Code:
mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO)
Wenn ich sie weglasse kommt der fehler nicht hab aber an anderer stelle die mysql klasse bereits benutzt.
Der Fehler tritt nur auf wenn ich in der add() Funktion die find() Funktion aufrufe die ein neues mysql Objekt erstellt.

sorry leider etwas viel code weis aber nicht wo der fehler liegen könnte daher hab ich mal alles gepostet!

vielen dank schon im vorraus für die Hilfe!
 
Warum machst du es nicht einfach so:

PHP:
<?php
class user
{
    public $id = 0;
    public $name = "Guest";
    public $email = "";
    protected $rights = array();
    private $mysql = "";

	public function __construct () {
		$this->mysql = new mysql();
	}

    function find($id="",$name="",$email="")
    {
        ..
        ..
        ..
        return $this->mysql->fetch_array("SELECT * FROM `".cMysqlPrefix."_users` WHERE ".$where);
    }

    function add($name,$email,$arrRights)
    {
        ..
        ...
        $this->mysql->query("INSERT INTO `".cMysqlPrefix."_users` SET `username` = '".addslashes($name)."', `email` = '".addslashes($email)."', `rights` = '".addslashes($rights)."';");
        return true;
    }

} 

?>
 
hatte ich mir auch schon überlegt aber das geht auch net.
Habs jetzt mit mysqli gelöst statt meiner mysql klasse und komplett umgeschrieben.
 
Zurück