PHP - Datenbankproblem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgeben
beenden
code
datenbank
datum
eigenschaft
herstellen
klasse
klasse speichern
meldung
nummer
parameter
port
problem
server
stimmen
string
url
verbindung
werte stimmen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
ich finde da leider such nichts sorry
-
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 -
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 -
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 -
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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage