Andy: mysql_connect

Hallo,

bin ich richtig im PHP Forum?

  
 //Verbindung zu MySQL herstellen  
 $verbindung =mysql_connect("localhost", "root","pw");  
//Verbindung zu Datenbank herstellen  
 mysql_select_db('db12',$verbindung);  

nun habe ich einmal vergessen das pw einzugeben (weil local habe ich keins) und die Datei nur mit folgenden Code
$verbindung =mysql_connect("localhost", "root","");
auf den Server kopiert.

Ich war erstaunt, das ich zwar folgende Warung bekam

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in ....  
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in .....

, aber smtliche Abfragen trotzdem funktionierten.
Ich dachte das ist nicht möglich?
Warum ist das doch möglich?

Ich habe jetzt noch folgende Zeile hinzugefügt:
if (!$verbindung) { echo "Keine Verbindung zur Datenbank"; exit;}

Danke für die Auskunft
Andy

  1. Ich war erstaunt, das ich zwar folgende Warung bekam

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in ....

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in .....

    
    > , aber smtliche Abfragen trotzdem funktionierten.  
    
    in anbetracht der oberen fehlenmeldungen glaube ich das nicht  
      
    
    > Ich dachte das ist nicht möglich?  
    
    kein password zu benutzen ist möglich  
      
    
    > Warum ist das doch möglich?  
    
    access denied sieht für mich nicht nach "möglich" aus  
      
    
    > Ich habe jetzt noch folgende Zeile hinzugefügt:  
    > `if (!$verbindung) { echo "Keine Verbindung zur Datenbank"; exit;}`{:.language-php}  
      
    das ist zwar keine wirklich vernünftige fehlerbehandlung, aber in jedem fall besser als die standardfehlermeldungen
    
    1. Guten Tag Suit,

      das ist zwar keine wirklich vernünftige fehlerbehandlung, aber in jedem fall besser als die standardfehlermeldungen

      Was ist eine wirklich vernünftige Fehlerbehandlung?

      Danke
      Andy

      1. Was ist eine wirklich vernünftige Fehlerbehandlung?

        den fehler abfangen, unterdrücken und darauf reagieren UND den zuständigen "admin" informieren

        angenommen du hast eine newsseite, jeder aufruf erzeugt eine cache-variante der aus der datenbank zu holenden daten (wenn die daten im cache bereits zu alt sind, meinetwegen alle 10 stunden)

        wenn nun die datenbankverbindung fehlschlägt, wird der fehler abgefangen und in einer fehlernummer gespeichert, die fehlerausgabe wird unterdrückt

        der fehler wird mit einer fehlernummer (oder einem fehlerbezeichner) in einer fehlerbehandlungsdatei (zb xml) rausgesucht und für den kunden angezeigt

        anstatt der inhalte aus der datenbank wird die letzte cache version angezeigt

        die fehlerbeschreibung könnte sein "aufgrund eines verbindungsfehlers sehen sie folgend inhalte aus dem cache (stand: xxx, alte: 2 stunden, 7 minuten) - an der behebung des fehlers wird bereits gearbeitet"

        das ist insbesondere dann sinnvoll, wenn der datenbankserver auf einem anderen rechner liegt und es öfter mal verbindungsprobleme gibt

        eine alternative ist, wenn ein datenbankserver nicht erreichbar ist, zu einem replizierten system zu greifen

        sprich die fehlerbehandlungsroutine prüft zuerst, ob der alternative datenbankserver erreichbar ist (mit meinentwegen nur leserechten, neue einträge können dann nicht gemacht werden) usw

        aber einfach nur mit exit oder die das script abbrechen macht keinen guten eindruck

  2. echo $begrüßung;

    //Verbindung zu MySQL herstellen

    $verbindung =mysql_connect("localhost", "root","pw");
    //Verbindung zu Datenbank herstellen
    mysql_select_db('db12',$verbindung);

      
    Hier gibst du mysql\_select\_db() die Verbindungskennung mit auf den Weg.  
      
    
    > nun habe ich einmal vergessen das pw einzugeben (weil local habe ich keins) und die Datei nur mit folgenden Code  
    > `$verbindung =mysql_connect("localhost", "root","");`{:.language-php}  
    > auf den Server kopiert.  
    >   
    > Ich war erstaunt, das ich zwar folgende Warung bekam  
    > ~~~php
    
    Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in ....  
    
    > Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in .....
    
    

    , aber smtliche Abfragen trotzdem funktionierten.

    Bei den anderen Funktionen machst du das vermutlich nicht. In dem Fall wird die zuletzt geöffnete Verbindung verwendet. Ist keine geöffnet, und das ist ja nach deinem Fehler der Fall, wird eine Verbindung mit Defaultwerten (siehe phpinfo()-Ausgabe) geöffnet. Der MySQL-Server hatte anzunehmenderweise nichts dagegen, mit diesen Defaultwerten eine Verbindung anzunehmen.

    Ich habe jetzt noch folgende Zeile hinzugefügt:
    if (!$verbindung) { echo "Keine Verbindung zur Datenbank"; exit;}

    Es ist immer eine gute Idee, die Rückgabewerte der verwendeten Funktionen auszuwerten. Sie geben nicht nur das Gewünschte zurück sondern signalisieren über den Rückgabewert mitunter auch Fehlerzustände. Diese zu ignorieren ziehen meist Folgefehler nach sich.

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      danke für die Erklärung.

      Andy