MySQL Zugriffsfehler
-
Hi Leute,
nach längerem rumprobieren und suchen wende ich mich an euch:
Ich versuche derzeit einen Zugriff auf eine MySQL-datenbank zu bauen, was allerdings zur Zeit an einem verweigerten Zugriff scheitert - will ich meine Website in der Preview meiner IDE anschaun steht da nur:
"{connect} Database Error: 1045 : Access denied for user 'ODBC'@'localhost' (using password: NO)"Ich weiß, das Problem hatten viele (google) - die Lösungen der anderen klappten bei mir leider nicht. Ich habe schon alle möglichen benutzer eingerichtet (per phpmyadmin und in der dortigen config.inc ) und diesen auch Passwörter gegeben, zum beispiel auch einen User "ODBC" mit passwort - was in der Meldung komischerweise verneint wird. Ich hab das Gefühl, eine bestimmte Stellschraube nicht zu kennen - kann jemand tipps geben ?
Thanks,
Floyd
-
Wenn Du keinen DB-Verbindungsstring angibst oder zumindest den Benutzernamen ausläßt, ergänzt er diesen automatisch. Unter Win oder ODBC ist das eben Benutzer ODBC. Also musst Du den Verbindungsstring, der beim Aufbau der Verbindung verwendet wird überprüfen.
"(using password: NO)" ist ein häufiges Mißverständnis. Er sagt Dir nicht dass er ohne Passwortüberprüfung konfiguriert wurde soondern Du kein Passwort angegeben hast.
-
Ok, dann zeige ich mal ein bisschen PHP-QuellCode. das ganze ist eigentlich einem tutorial nachempfunden - vielleicht sieht jemand den Fehler sofort ?
Index.php
//relevanter, kleiner php-Teil <? include("test.php"); echo $row->id //id ist eine Spalte in meiner abgefragten Tabelle ?>
Test.php
<? include ("db_config.php"); // da stehen unsere Daten drinne include ("database_class.php"); // unsere Klasse $select = $Connection->query("SELECT * FROM db_da"); $row = mysql_fetch_object($select); ?>
db_config.php
<? $host = "localhost"; $database = "test"; $db_username = "root"; $db_pass = "****"; // Passwort - geschwärzt, stimmt mit dem von MySQL Admin angegebenen überein $db_port = "3306"; define(dbHost, $host); define(db, $database); define(dbUser, $db_username); define(dbPass, $db_pass); define(dbPort, $db_port); ?>
database_class.php
<?$Connection = new mysqlconnection(); class mysqlconnection{ var $host = dbHost; var $database = db; var $db_username = dbUser; var $db_pass = dbPass; var $db_port = dbPort; function connect(){ $this->connection = @mysql_pconnect($this->host.':'.$this->db_port, $this->db_user, $this->db_pass) or die("{connect} Database Error: ".mysql_errno()." : ".mysql_error()); $this->select_database = @ mysql_select_db($this->database, $this->connection) or die("{select_db} Database Error: ".mysql_errno()." : ".mysql_error()); # $this->select_database; } function mysqlclose(){ $this->connection = mysql_close(); } function query($querystring){ if ($this->connection == false) $this->connect(); if ($this->connection == false) return; $res = mysql_query($querystring, $this->connection) or die("{query} Database Error : ".mysql_errno()." : ".mysql_error()); return $res; }
-
Ist $this->connection als Klassenmember deklariert?
-
Mh... ist das eine Test-Frage ? Die klasse ist doch angegeben ?!
Mit $this kann man doch auf das jeweilige Objekt zugreifen und es verändern ?!
Ich lese gerade, dass das nur bei dynamischem Aufruf geht ... aber ist das hier überhaupt das Problem ?
-
Ich wollte wissen, ob das $this->connection in connect() dasselbe Verbindungsobjekt wie in query() ist, da Du es nicht mit var $connection deklariert hast. Weiss nicht ob man das in php so locker handhaben kann.
-
nur nebenher: versuchs mal ohne passwort.
$db_pass = ""; //auch KEIN leerzeichen!bye
-
Ich wollte wissen, ob das $this->connection in connect() dasselbe Verbindungsobjekt wie in query() ist, da Du es nicht mit var $connection deklariert hast. Weiss nicht ob man das in php so locker handhaben kann.
Ja, ist es und ich weiß nicht, was dagegen sprechen sollte - das habe ich aber in einem Tutorial so gesehen ...
nur nebenher: versuchs mal ohne passwort.
$db_pass = ""; //auch KEIN leerzeichen!Das habe ich auch schon versucht - geht nicht, leider ... komisches ding - ich vermute ja, dass da irgendwie einer von den vielen configs in XAMPP das mit den benutzern nicht geschluckt hat.. ich weiß auch nicht, ob man extra einen benutzer "ODBC" anlegen muss - das wäre irgendwie komisch, einen benutzer für eine Schnittstelle ... andererseits versucht er ja offensichtlich unter dieser Kennung auf die Datenbank zuzugreifen - aber das habe ich ja eigentlich auch schon versucht...
-
hier gibts einen thread dazu
http://forums.mysql.com/read.php?10,6834,6834
interessant, dass sich odbc beim installieren reinhängt, aber dann keine rechte über localhost hat.ein tip dort ist, mysql neu zu installieren, und das root und das passwort leerzulassen..
geh da mal ein wenig tiefer rein in den threadbaum
viel glück.
/me fährt kein windows...
-
ein tip dort ist, mysql neu zu installieren, und das root und das passwort leerzulassen..
Hab ich probiert - hat nichts gebracht ...gleiche Meldung, wie davor!
Ich hab eine ganze Menge an möglichkeiten mittlerweile gelesen, aber das einzige, was wirklich zu stimmen scheint ist, dass ich nicht alleine mit dem (nervigen)Problem dastehe.
Trotzdem danke für den link!
Mhh.. zum Thema OS: Ich arbeite eigentlich auch mit Linux, aber man kann sich leider nicht immer aussuchen, welches System man so verwenden darf/soll/muss ...
Ich probiere mal weiter, als nächstes aktualisiere ich meine ntwdblib.dll - soll angeblich manchmal helfen
-
Hi,
nachdem ich mittlerweile den ODBC-Treiber 8vers. 3.5.1) neuinstalliert habe und das gesamte XAMPP System neu aufgesetzt habe, bin ich endlich auf den richtigen Schritt gekommen.Nur der Vollständigkeit halber, für alle, die dieses Problem auch haben:
Ich benutze:
OS: Win XP SP2
XAMPP: 1.5.4 (installer version - man ist ja faul )
Zugriff erfolgte via PHP-Script und ODBC.
Genau für diese Schnittstelle musste ich einfach nur in der Kommandozeile von mysql mit:GRANT ALL ON [i]db_name[/i].* TO 'ODBC'@'localhost' ;
einen Benutzer mit allen rechten einrichten - das habe ich zwar schonmal gemacht, aber beim zweiten mal, nachdem ich den Treiber neuinstalliert habe usw. hat es dann geklappt.
Greets,
Floyd