Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben
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

Geschrieben

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?

Geschrieben

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 :-)

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...