Dukanos Geschrieben 4. Juli 2007 Geschrieben 4. Juli 2007 Hallo zusammen, gleich mal vorne weg die Fehlermeldungen: Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in F:\xampp\htdocs\bg\class\db\userDBcontroller.php on line 12 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in F:\xampp\htdocs\bg\class\db\userDBcontroller.php on line 12 Access denied for user 'ODBC'@'localhost' (using password: NO) Meine Fragen: Woher kommt "ODBC" als Benutzer? Ist das irgendein Default? Hat jemand ne Idee woher der fehler rühren könnte? Zum Code: Ich habe eine controller-Kind-Klasse. In der Elternklasse wird Benutzer, DB, Kennwort etc. festgelegt und eine Verbindung aufgebaut. Die DBcontroller-Klasse wird von einem anderen Controller aufgerufen. Die Objekte wurden in der $_SESSION angelegt (bis auf "father" natürlich :-)) Eltern class father { PROTECTED $db_user; PROTECTED $db_password; PROTECTED $db_server; PROTECTED $db; PROTECTED $affected_rows; PROTECTED $num_rows; PROTECTED STATIC $con; PROTECTED STATIC $queries; PROTECTED STATIC $connections; /****** CONTRUCTOR ****/ public function __construct () { $this->db_server = "localhost"; $this->db_user = "root"; $this->db_password = ""; $this->db = "bg"; if(!is_resource(self::$con)) { self::$con = mysql_connect($this->db_server, $this->db_user, $this->db_password); ++self::$connections; } mysql_select_db($this->db, self::$con) OR die('Fehler beim Verbinden zur Datenbank'); }//end constructor public function prepare($x) { return trim(strip_tags(mysql_real_escape_string($x))); }//end function prepare }//end father [/PHP] [b]Kind[/b] [PHP] require_once ("father.php"); class userDBcontroller extends father { /***** CONSTRUCTOR ******/ public function __contruct () { parent::__construct(); } public function check($user, $pwd) { $result = mysql_query("SELECT username, md5pwd FROM users WHERE username = '".$user."'") or die(mysql_error()); $erg = mysql_fetch_array($result); return $erg; } }//end class Edit: Ich sollte vllt. noch dazu sagen, dass ich die Objekte in der index.php anlegen lasse, der userDBcontroller aber erst aus einer 2ten index2.php aufgerufen wird. Es funktioniert nämlich mit einer anderen Kind-Klasse, die aus index.php angesprochen wird einwandfrei. Zitieren
Amstelchen Geschrieben 4. Juli 2007 Geschrieben 4. Juli 2007 Woher kommt "ODBC" als Benutzer? Ist das irgendein Default? ja, wird AFAIR dann verwendet, wenn *kein* user angegeben ist. Hat jemand ne Idee woher der fehler rühren könnte? "using password: NO" lässt für mich schliessen, dass du *weder* username noch passwort, "A link to the server could not be established" dass du auch keinen hostnamen bei mysql_connect angegeben hast. deine klasse wird also IMO nicht korrekt instantiiert. s'Amstel Zitieren
Dukanos Geschrieben 4. Juli 2007 Autor Geschrieben 4. Juli 2007 hmm, nicht richtig instantiiert? Kann das Problem dann daher kommen, dass ich eine 2te Index verwende? Lege das Objekt in der Index.php an: include ("/classes/db/userDBcontroller.php"); session_start(); $_SESSION['userDBcontroller'] = new userDBcontroller(); [/PHP] verwende es aber nachdem ich über ein formular Feld (mit action = "index2.php?content=xyz") die index2.php aufgerufen habe da wieder. in der index2.php wird aber wieder session_start() aufgerufen. Soweit ich das verstanden habe müsste er doch da die Session wieder verwenden oder? Zitieren
Dukanos Geschrieben 4. Juli 2007 Autor Geschrieben 4. Juli 2007 Ok, ich hab das Objekt neu in index2.php anlegen lassen. Jetzt gehts... versteh zwar nicht warum?!?! Falls jemand dazu was sagen kann. Bitte lasst mich nicht dumm sterben :-) Zitieren
geloescht_JesterDay Geschrieben 5. Juli 2007 Geschrieben 5. Juli 2007 Ok, ich hab das Objekt neu in index2.php anlegen lassen. Jetzt gehts... versteh zwar nicht warum?!?! Falls jemand dazu was sagen kann. Bitte lasst mich nicht dumm sterben :-) Kurz und schmerzlos: Du kannst Objekte nicht serialisieren. Also dein DB-Objekt muss jedesmal neu erzeugt werden. Der MySQL Server ist aber schlau genug, nicht jedesmal eine komplett neue Anmeldung zu wollen. Also vom Code her schon, aber der Server merkt sich die Verbindungen die er hatte und kann sie so bei erneuter Verbindung schneller wieder herstellen. Nennt man Connection-Pooling, und macht nicht nur der MySQL-Server. EDIT: Das liegt daran, dass, im Gegensatz zu JAVA z.B., deine Verbindung zum Server (also vom Client aus) stateless ist (also statuslos). Der Browser frägt eine Seite beim Server an, bekommt die Daten geliefert und das war's. Die nächste Anfrage ist für den Server so, wie wenn der Client nie davor etwas vom Server gewollt hätte. Aus diesem Grund gibt es Cookies (und auch Sessions) um das etwas aufzuweichen. Aber würde eine Verbindung in einer Session gehalten, dann kannst du nie wissen, ob du die Verbindung noch brauchst, da ja keine Verbindung zum Client besteht. ein DoS wäre damit sehr einfach möglich und auch wahrscheinlich. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.