kostenloser Webspace werbefrei: lima-city


PHP - Datenbankproblem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*************h

    Hallo lima-city-Community,

    ich habe folgendes Problem:

    ich habe eine Datenbankklasse welche unter PHP 5.3.8 wunderbar und fehlerfrei funktioniert. Wenn ich diese Klasse aber ohne zu verändern unter PHP 5.4.4 ausführe kann ich nicht mehr zur Datenbank verbinden. Es kommt folgender Fehler:

    Warning: mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES) in C:\xampp\htdocs\PicVid\includes\database.class.php on line 264
    
    Warning: mysql_error() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\PicVid\includes\database.class.php on line 316
    
    Warning: mysql_error() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\PicVid\includes\database.class.php on line 316
    Database server error on line 280: ()

    Es gibt keine Fehlermeldung!!!

    So und jetzt wird es super seltsam: Wenn ich die Werte nicht dem Konstruktor übergebe (welcher die Verbindung aufbaut) sondern in diesem direkt in die mysql_connect schreibe funktioniert es ohne Probleme. Man sollte noch dazu sagen dass die Übergabewerte aus einer anderen Klasse gelesen und dann an diese übergeben werden.

    Falls es noch Fragen zu Details gibt, fragt einfach. Ansonsten wäre ich über eine Idee sehr dankbar. Hat sich da vielleicht irgendwas in PHP geändert (Sicherheit) dass dieses Modell nicht mehr funktioniert. Ich habe die Übergabeparameter auch mal in der Datenbankklasse zwschengespeichert in Eigenschaften was allerdings auch nichts gebracht hat.

    Vielen Dank und Gruß
    S. Brosch
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. browsergame-entwickler

    Kostenloser Webspace von browsergame-entwickler, auf Homepage erstellen warten

    browsergame-entwickler hat kostenlosen Webspace.

    Dan poste doch mal den den code:

    database.class.php on line 316, 315 , 317
  4. Autor dieses Themas

    s*************h

    public function __construct($hostname, $username, $password, $database, $prefix = '', $port = '3306') {
    		
    		//Name des Treibers in der Klasse speichern.
    		$this->_driver = 'mysql';
    
    		//Pruefen ob die Extension geladen ist.
    		if(extension_loaded('mysql') === false) {
    
    			//Script beenden und Meldung ausgeben.
    			die('MYSQL is not available on this server. Please change the database driver in configuration.php.');
    		}
    
    		//Praefix der Tabellen in der Klasse speichern.
    		$this->_prefix = trim($prefix);
    
    		//Verbindung zum Server herstellen und ueberpruefen.
    		if($this->_resource = mysql_connect($hostname.':'.$port, $username, $password)) {      //Zeile 264
    	
    			//Zeichensatz der Verbindung festlegen.
    			mysql_set_charset('utf8', $this->_resource);
    
    			//Verbindung zur Datenbank herstellen und ueberpruefen.
    			if(mysql_select_db($this->_database, $this->_resource) === false) {
    
    				//Script beenden und Meldung ausgeben.
    				die('Database error on line '.__LINE__.': '.$this->getErrorMessage().' ('.$this->getErrorNumber().')');
    			}
    		} else {
    
    			//Script beenden und Meldung ausgeben.
    			die('Database server error on line '.__LINE__.': '.$this->getErrorMessage().' ('.$this->getErrorMessage().')');
    		}
    	}

    Die Daten bei der übergabe stimmen!!! Habe tausendmal geprüft. Das ganze funktioniert auch wenn man die Werte direkt in die mysql_connect einträgt.

    So habe noch was probiert:

    return new DB_MYSQL('localhost', 'root', '12345', 'picvid', 'pic_', 3306); //1
    //return new DB_MYSQL($this->getValue('db_hostname'), $this->getValue('db_username'), $this->getValue('db_password'), $this->getValue('db_name'), $this->getValue('db_prefix'), $this->getValue('db_port'));   //2

    Nummer 1 funktioniert ohne Probleme.
    Nummer 2 nicht!!!! Es sind aber immer die gleichen Werte nur das beim zweiten die Werte aus der eigenen Klasse (Core) der Datenbankklassse übergeben werden.

    Gruß S .Brosch
  5. browsergame-entwickler

    Kostenloser Webspace von browsergame-entwickler, auf Homepage erstellen warten

    browsergame-entwickler hat kostenlosen Webspace.

    ich finde da leider such nichts sorry
  6. g****e

    Access denied bedeutet eigentlich kein Zugriff. viellcith im Passwort vertan, dass du bei der neuinstallation bzw dem Upgrade von Xampp ein anderes Passwort eingetragen hast?

    Liebe Grüße
  7. Autor dieses Themas

    s*************h

    Nein! Ich schreibe es nocheinmal: die Werte stimmen auf jedenfall!!!! Ich habe den Verdacht das in PHP 5.4 irgendwas eingeführt wurde was Variablen aus Klassen nicht in andere Klassen übertragen lässt oder sonst irgendwas. Aber die Werte stimmen definitiv.

    Gruß S. Brosch
  8. n******t

    Wo hast du denn deine Daten in der Klasse gespeichert?

    Versuch doch mal einfach die Daten abzurufen und auszugeben (echo oder var_dumb oder print_r)

    Vllt. sind es ja keine Strings oder irgendwas komisches, aber es liegt eindeutig an falschen Daten, die wohl falsch von der Klasse übertragen werden.

    MfG
    Dominic
  9. g****e

    Du übergibst die Werte nicht von Klasse zu Klasse, korrekt gesehen werden sie vorher kopiert. Und da dies ein Standardverfahren ist, welches auch bei jeder Funktion angewand wird, wird da nichts geändert. Du kannst auch dahier durchgehen: http://php.net/manual/de/migration54.php vllt bringts ja was.
    Bist du schonmal alles mögliche mittels "var_dump" durchgegangen? Um zu schauen, was so im Speicher steht?

    Liebe Grüße
  10. Autor dieses Themas

    s*************h

    Ausgabe der Daten welche aus der Klasse kommen:

    $username = $PICVID['CLASS']['CORE']->getValue('db_username');
    				$password = $PICVID['CLASS']['CORE']->getValue('db_password');
    				$hostname = $PICVID['CLASS']['CORE']->getValue('db_hostname');
    				$database = $PICVID['CLASS']['CORE']->getValue('db_name');
    				$prefix = $PICVID['CLASS']['CORE']->getValue('db_prefix');
    				$port = $PICVID['CLASS']['CORE']->getValue('db_port');
    die($username."|".$password."|".$hostname."|".$database."|".$prefix."|".$port);


    Es wird folgendes Ausgegeben:
    root|12345|localhost|picvid|pic_|3306

    Diese Daten stimmen. Gibt man diese jetzt in die Datenbankklasse geht gar nicht. Siehe Fehler oben.
    Es geht aber auch nicht wenn man das direkt in einen MYSQL-Connect haut:

    $username = $PICVID['CLASS']['CORE']->getValue('db_username');
    				$password = $PICVID['CLASS']['CORE']->getValue('db_password');
    				$hostname = $PICVID['CLASS']['CORE']->getValue('db_hostname');
    				$database = $PICVID['CLASS']['CORE']->getValue('db_name');
    				$prefix = $PICVID['CLASS']['CORE']->getValue('db_prefix');
    				$port = $PICVID['CLASS']['CORE']->getValue('db_port');
    mysql_connect($hostname, $username, $password);



    Edit:

    Ergebnis des var_dump():
    var_dump($PICVID['CLASS']['CORE']->getValue('db_username'), $PICVID['CLASS']['CORE']->getValue('db_password'), $PICVID['CLASS']['CORE']->getValue('db_hostname'), $PICVID['CLASS']['CORE']->getValue('db_name'));


    string(32) "root" string(32) "12345" string(32) "localhost" string(32) "picvid"

    Stimmt alles.

    Edit:

    Problem zu 50% gelöst. Das umwandeln der Verschluesselten Werte funktioniert zwar aber die Länge des String in PHP intern funktioniert dabei irgendwie nicht. Sobald ich die verschluesslung entferne funktioniert es und die Länge des Strings intern stimmt auch. Siehe oben var_dump(): Haben alle eine Länge von 32 obwohl nur 5 Zeichen drinne sind. Seit PHP 5.4 ist da irgenwas nicht mehr erlaubt oder verbugt.

    Danke für die versuchte Unterstützung.

    Gruß S.Brosch

    Beitrag zuletzt geändert: 29.8.2012 11:39:02 von software-brosch
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!