Ankündigung

Einklappen
Keine Ankündigung bisher.

Access denied for user 'ODBC'@'localhost' (using password: NO)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Access denied for user 'ODBC'@'localhost' (using password: NO)

    Hallo zusammen,

    ich hab mich jetzt nun schon denn ganzen Nachmittag mit dem Problem rumgeschlagen und ebenfalls schon danach gegooglet. Jedoch habe ich noch keine Lösung gefunden.

    Also ich habe drei Klassen:

    Die übliche MySQL Datenbank Klasse, die es im Netz gibt:
    PHP-Code:
    <?php
    # Name: Database.class.php
    # File Description: MySQL Class to allow easy and clean access to common mysql commands
    # Author: ricocheting
    # Web: http://www.ricocheting.com/
    # Update: 2010-05-08
    # Version: 3.1.3
    # Copyright 2003 ricocheting.com


    /*
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
    */


    require("config.inc.php");
    $db Database::obtain(DB_SERVERDB_USERDB_PASSDB_DATABASE);

    //$db = Database::obtain();


    ###################################################################################################
    ###################################################################################################
    ###################################################################################################
    class Database{

        
    // debug flag for showing error messages
        
    public    $debug true;

        
    // Store the single instance of Database
        
    private static $instance;

        private    
    $server   ""//database server
        
    private    $user     ""//database login name
        
    private    $pass     ""//database login password
        
    private    $database ""//database name

        
    private    $error "";

        
    #######################
        //number of rows affected by SQL query
        
    public    $affected_rows 0;

        private    
    $link_id 0;
        private    
    $query_id 0;


    #-#############################################
    # desc: constructor
    public function __construct($server=null$user=null$pass=null$database=null){
        
    // error catching if not passed in
        
    if($server==null || $user==null || $pass==null || $database==null){
            
    $this->oops("Database information must be passed in when the object is first created.");
        }
        
    $this->server=$server;
        
    $this->user=$user;
        
    $this->pass=$pass;
        
    $this->database=$database;
        
    //echo "DB-Verbindung erstellt!";
        /*echo $this->server;
        echo $this->user;
        echo $this->pass;
        echo $this->database;
        */
    }#-#constructor()


    #-#############################################
    # desc: singleton declaration
    public static function obtain($server=null$user=null$pass=null$database=null){
        if (!
    self::$instance){ 
            
    self::$instance = new Database($server$user$pass$database); 
        } 
        return 
    self::$instance
    }
    #-#obtain()


    #-#############################################
    # desc: connect and select database using vars above
    # Param: $new_link can force connect() to open a new link, even if mysql_connect() was called before with the same parameters
    public function connect($new_link=false){
        
    $this->link_id=mysql_connect($this->server,$this->user,$this->pass,$new_link);
        if (!
    $this->link_id){//open failed
            
    $this->oops("Could not connect to server: <b>$this->server</b>.");
            }

        if(!@
    mysql_select_db($this->database$this->link_id)){//no database
            
    $this->oops("Could not open database: <b>$this->database</b>.");
            }

        
    // unset the data so it can't be dumped
        
    $this->server='';
        
    $this->user='';
        
    $this->pass='';
        
    $this->database='';
    }
    #-#connect()



    #-#############################################
    # desc: close the connection
    public function close(){
        if(!@
    mysql_close($this->link_id)){
            
    $this->oops("Connection close failed.");
        }
    }
    #-#close()


    #-#############################################
    # Desc: escapes characters to be mysql ready
    # Param: string
    # returns: string
    public function escape($string){
        if(
    get_magic_quotes_runtime()) $string stripslashes($string);
        return @
    mysql_real_escape_string($string,$this->link_id);
    }
    #-#escape()


    #-#############################################
    # Desc: executes SQL query to an open connection
    # Param: (MySQL query) to execute
    # returns: (query_id) for fetching results etc
    public function query($sql){
        
    // do query
        
    $this->query_id = @mysql_query($sql$this->link_id);

        if (!
    $this->query_id){
            
    $this->oops("<b>MySQL Query fail:</b> $sql");
            return 
    0;
        }
        
        
    $this->affected_rows = @mysql_affected_rows($this->link_id);

        return 
    $this->query_id;
    }
    #-#query()


    #-#############################################
    # desc: does a query, fetches the first row only, frees resultset
    # param: (MySQL query) the query to run on server
    # returns: array of fetched results
    public function query_first($query_string){
        
    $query_id $this->query($query_string);
        
    $out $this->fetch($query_id);
        
    $this->free_result($query_id);
        return 
    $out;
    }
    #-#query_first()


    #-#############################################
    # desc: fetches and returns results one line at a time
    # param: query_id for mysql run. if none specified, last used
    # return: (array) fetched record(s)
    public function fetch($query_id=-1){
        
    // retrieve row
        
    if ($query_id!=-1){
            
    $this->query_id=$query_id;
        }

        if (isset(
    $this->query_id)){
            
    $record = @mysql_fetch_assoc($this->query_id);
        }else{
            
    $this->oops("Invalid query_id: <b>$this->query_id</b>. Records could not be fetched.");
        }

        return 
    $record;
    }
    #-#fetch()


    #-#############################################
    # desc: returns all the results (not one row)
    # param: (MySQL query) the query to run on server
    # returns: assoc array of ALL fetched results
    public function fetch_array($sql){
        
    $query_id $this->query($sql);
        
    $out = array();

        while (
    $row $this->fetch($query_id)){
            
    $out[] = $row;
        }

        
    $this->free_result($query_id);
        return 
    $out;
    }
    #-#fetch_array()


    #-#############################################
    # desc: does an update query with an array
    # param: table, assoc array with data (not escaped), where condition (optional. if none given, all records updated)
    # returns: (query_id) for fetching results etc
    public function update($table$data$where='1'){
        
    $q="UPDATE `$table` SET ";

        foreach(
    $data as $key=>$val){
            if(
    strtolower($val)=='null'$q.= "`$key` = NULL, ";
            elseif(
    strtolower($val)=='now()'$q.= "`$key` = NOW(), ";
            elseif(
    preg_match("/^increment\((\-?\d+)\)$/i",$val,$m)) $q.= "`$key` = `$key` + $m[1], "
            else 
    $q.= "`$key`='".$this->escape($val)."', ";
        }

        
    $q rtrim($q', ') . ' WHERE '.$where.';';
        echo 
    $q;
        return 
    $this->query($q);
    }
    #-#update()


    #-#############################################
    # desc: does an insert query with an array
    # param: table, assoc array with data (not escaped)
    # returns: id of inserted record, false if error
    public function insert($table$data){
        
    //echo $table;
        //print_r($data);
        
    $q="INSERT INTO `$table` ";
        
    $v=''$n='';

        foreach(
    $data as $key=>$val){
            
    $n.="`$key`, ";
            if(
    strtolower($val)=='null'$v.="NULL, ";
            elseif(
    strtolower($val)=='now()'$v.="NOW(), ";
            else 
    $v.= "'".$this->escape($val)."', ";
        }

        
    $q .= "("rtrim($n', ') .") VALUES ("rtrim($v', ') .");";
        
        
    //echo $q;
            
        
    if($this->query($q)){
            return 
    mysql_insert_id($this->link_id);
        }
        else return 
    false;

    }
    #-#insert()


    #-#############################################
    # desc: frees the resultset
    # param: query_id for mysql run. if none specified, last used
    private function free_result($query_id=-1){
        if (
    $query_id!=-1){
            
    $this->query_id=$query_id;
        }
        if(
    $this->query_id!=&& !@mysql_free_result($this->query_id)){
            
    $this->oops("Result ID: <b>$this->query_id</b> could not be freed.");
        }
    }
    #-#free_result()


    #-#############################################
    # desc: throw an error message
    # param: [optional] any custom error to display
    private function oops($msg=''){
        if(!empty(
    $this->link_id)){
            
    $this->error mysql_error($this->link_id);
        }
        else{
            
    $this->error mysql_error();
            
    $msg="<b>WARNING:</b> No link_id found. Likely not be connected to database.<br />$msg";
        }

        
    // if no debug, done here
        
    if(!$this->debug) return;
        
    ?>
            <table align="center" border="1" cellspacing="0" style="background:white;color:black;width:80%;">
            <tr><th colspan=2>Database Error</th></tr>
            <tr><td align="right" valign="top">Message:</td><td><?php echo $msg?></td></tr>
            <?php if(!empty($this->error)) echo '<tr><td align="right" valign="top" nowrap>MySQL Error:</td><td>'.$this->error.'</td></tr>'?>
            <tr><td align="right">Date:</td><td><?php echo date("l, F j, Y \a\\t g:i:s A"); ?></td></tr>
            <?php if(!empty($_SERVER['REQUEST_URI'])) echo '<tr><td align="right">Script:</td><td><a href="'.$_SERVER['REQUEST_URI'].'">'.$_SERVER['REQUEST_URI'].'</a></td></tr>'?>
            <?php if(!empty($_SERVER['HTTP_REFERER'])) echo '<tr><td align="right">Referer:</td><td><a href="'.$_SERVER['HTTP_REFERER'].'">'.$_SERVER['HTTP_REFERER'].'</a></td></tr>'?>
            </table>
        <?php
    }#-#oops()


    }//CLASS Database
    ###################################################################################################

    ?>
    Eine config Klasse
    PHP-Code:
    <?php
    //database server
    define('DB_SERVER'"localhost");

    //database login name
    define('DB_USER'"root");
    //database login password
    define('DB_PASS'"test");

    //database name
    define('DB_DATABASE'"Forschungsportal");
    ?>
    Und eine Publikationsklasse:

    PHP-Code:
    <?php
        
    require_once("Database.class.php");
        
    class 
    publikation{
        protected 
    $wiss_id;
        protected 
    $typ;
        protected 
    $titel;
        protected 
    $erscheinungsjahr;
        protected 
    $erstellungsdatum;
        protected 
    $ersteller;
        protected 
    $letzte_aenderung;
        protected 
    $aenderer;
            
        public function 
    __construct($typ=NULL$titel=NULL$erscheinungsjahr=NULL$erstellungsdatum=NULL$ersteller=NULL){
            
    $this->typ $typ;
            
    $this->titel $titel;
            
    $this->erscheinungsjahr $erscheinungsjahr;
            
    $this->erstellungsdatum$erstellungsdatum;
            
    $this->ersteller $ersteller;
        }
        
        public function 
    publikationById($wiss_id){
            
    $db Database::obtain();
            
    $db->connect();
            
    $sql "SELECT * FROM publikation WHERE wiss_id = ".$wiss_id;
            
    $result $db->query_first($sql);
            
    $db->close();
            
    //print_r($result);
            
    $this->wiss_id $wiss_id;
            
    $this->typ $result[typ];
            
    $this->titel $result[titel];
            
    $this->erscheinungsjahr $result[erscheinungsjahr];
            
    $this->erstellungsdatum$result[erstellungsdatum];
            
    $this->ersteller $result[ersteller];
            
    $this->letzte_aenderung $result[letzter_aenderung];
            
    $this->aenderer$result[aenderer];    
        }

        
        public function 
    insertPub(){
            if(!isset(
    $this->wiss_id)){
                
    $db Database::obtain();    
                
    $data[typ]= $this->typ;
                
    $data[titel]= $this->titel;
                
    $data[erscheinungsjahr]= $this->erscheinungsjahr ;
                
    $data[erstellungsdatum]= $this->erstellungsdatum;
                
    $data[ersteller]= $this->ersteller;
                
    $data[letzte_aenderung]= $this->letzte_aenderung;
                
    $data[aenderer]= $this->aenderer;    
                
    $db->connect();
                
    $id $db->insert('publikation'$data);
                
    $db->close();
                if(
    $id){
                    return 
    false;
                }
                
    $this->wiss_id $id;
                return 
    true;
            }
            return 
    false;                
        }
        
        
        public function 
    updatePub(){
            if(isset(
    $this->wiss_id)){
                
    $db Database::obtain();    
                
    $data[typ]= $this->typ;
                
    $data[titel]= $this->titel;
                
    $data[erscheinungsjahr]= $this->erscheinungsjahr ;
                
    $data[erstellungsdatum]= $this->erstellungsdatum;
                
    $data[ersteller]= $this->ersteller;
                
    $data[letzte_aenderung]= $this->letzte_aenderung;
                
    $data[aenderer]= $this->aenderer;    
                
    $db->connect(true);
                
    $db->update('publikation'$data"wiss_id = ".$wiss_id);
                
    $db->close();
                return 
    true;                    
            }
            else{return 
    false;}
        }
            
    ?>
    Also ein Objekt der Klasse Publikation kann ich ohne Probleme erzeugen und dieses bzw. deren Werte in der DB speichern. Wenn ich nun aber einen Datensatz einer bestehenden Publikation updaten möchte verwende ich folgenden Code:
    PHP-Code:
    require_once("class/publikation.class.php");
    $pub = new publikation();
    $pub->publikationById(7);
    $pub->setErscheinungsjahr(2010);
    $pub->update();
    ?> 
    Jedoch kommt dabei bei dem $db->connect() immer folgender Fehler: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO)

    Und:
    WARNING: No link_id found. Likely not be connected to database.
    Could not connect to server.

    Das komisch ist ja nun, dass ich eigentlich den gleichen Code in der updatePub() Funktion wie in der insertPub() Funktion verwenden, nur dass es in der insertPub klappt und in der updatePub nicht.

    Kann mir vielleicht einer bei meinem Problem weiterhelfen??
    Wäre euch sehr dankbar.

    Viele Grüße,
    Tobias


  • #2
    Anscheinend hast du vergessen ein PW anzugeben !?
    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

    Kommentar


    • #3
      Also ein Objekt der Klasse Publikation kann ich ohne Probleme erzeugen und dieses bzw. deren Werte in der DB speichern.
      Letzteres wage ich zu bezweifeln.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Zitat von nikosch Beitrag anzeigen
        Letzteres wage ich zu bezweifeln.
        @nikosch

        Also mit

        PHP-Code:
        require_once("class/publikation.class.php");
        $pub = new publikation('paper''Titel''2040''2010-12-12'34);
        $pub -> insertPub(); 
        könnte ich die Daten in die DB schreiben.

        @Destruction

        Aber wo soll ich das PW vergessen haben?? Ich gebe doch meine Daten in der config Datei an und binde sie dann ein.

        Den Benutzer 'ODBC' gibt es ja gar nicht in der DB. Und des komische ist ja, dass es einmal funktioniert und das andere mal nicht.

        Mach ich denn generell was falsch, oder musste mein Code eigentlich so passen??

        Viele Grüße,
        Tobias

        Kommentar


        • #5
          Könntest Du oder kannst Du? Faktisch passiert dort der selbe DB-Verbindungsaufbau.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von nikosch Beitrag anzeigen
            Könntest Du oder kannst Du? Faktisch passiert dort der selbe DB-Verbindungsaufbau.
            Ich kann. Also bei mir funktioniert es so, mit den obigen Code! Hab mich da leider nur verschrieben mit dem 'könnte'.

            Kommentar


            • #7
              @nikosch
              Wie kommst du eigentlich drauf, dass das ganze von vornherein nicht gehen soll/kann. Ist das ganze nicht richtig/sauber implementiert?
              Wie würdest du denn das ganze umsetzen??
              Bin leider noch ein Anfänger in php und oop!

              Kommentar

              Lädt...
              X