Alex: Datenbankverbindung kann nicht hergestellt werden

Hallo,

ich habe mir den Datenbankaufruf etwas vereinfacht:

<?
  define("host","localhost");
  define("user","...");
  define("pass","...");
  define("db","...");

function db_connect(){
   $con=mysql_connect("$host","$user","$pass");
   mysql_select_db("$db",$con);
   return $con;
  }
?>

Die Datei mit diesem Inhalt binde ich mit include in andere Dateien ein. Aber irgendwie scheint die Konstante db (Name der Datenbank) keinen Wert zu haben. Erst wenn ich die Funktion mysql_select_db mit den Parametern ("datenbankname",$con) aufrufe, funktioniert das Ganze.

Weiß jemand, woran das liegen könnte?

Dank und Gruß

Alex

  1. Hallo Alex,

    define("host","localhost");
      define("user","...");
      define("pass","...");
      define("db","...");

    Hier definierst Du Konstanten...

    $con=mysql_connect("$host","$user","$pass");

    Und hier verwendest Du Variablen...

    Also: Entweder Du verwendest Konstanten und machst es so:

    define("host","localhost");
    define("user","...");
    define("pass","...");
    define("db","...");
    // [...]
    $con=mysql_connect(host, user, pass);
    mysql_select_db(db,$con);

    Oder Du verwendest nur Variablen:

    $host = 'localhost';
    $user = '...';
    $pass = '...';
    $db = '...';
    // [...]
    $con = mysql_connect ($host, $user, $pass);
    mysql_select_db ($db, $con);

    Was Du unbedingt vermeiden solltest, sind Konstrukte wie "$variable" - denn das hat das gleiche Ergebnis wie $variable, ist aber unübersichtlicher und verbraucht unnötig Rechenkapazität. (ein einziges Mal macht es nichts aus, aber das ganze summiert sich)

    Viele Grüße,
    Christian

    1. Also: Entweder Du verwendest Konstanten und machst es so:

      define("host","localhost");
      define("user","...");
      define("pass","...");
      define("db","...");
      // [...]
      $con=mysql_connect(host, user, pass);
      mysql_select_db(db,$con);

      Wusste ich garnicht, dass die ohne $-Zeichen geschrieben werden müssen. Aber komisch, dass er mit den anderen Konstanten ($host,$user,$pass) was anfangen kann.

      Oder Du verwendest nur Variablen:

      $host = 'localhost';
      $user = '...';
      $pass = '...';
      $db = '...';
      // [...]
      $con = mysql_connect ($host, $user, $pass);
      mysql_select_db ($db, $con);

      Aber auf Variablen kann ich doch innerhalb einer Funktion nicht einfach so zugreifen. Die muss ich dann doch als Parameter übergeben. Oder mache ich jetzt einen Denkfehler?

      Was Du unbedingt vermeiden solltest, sind Konstrukte wie "$variable" - denn das hat das gleiche Ergebnis wie $variable, ist aber unübersichtlicher und verbraucht unnötig Rechenkapazität. (ein einziges Mal macht es nichts aus, aber das ganze summiert sich)

      Du meinst also, dass mysql_select_db($db,$con) das gleiche bewirkt wie mysql_select_db("$db",$con)?

      1. Hallo Alex,

        Aber komisch, dass er mit den anderen Konstanten ($host,$user,$pass) was anfangen kann.

        Das dürfte allerdings nicht sein. Das einzige, was ich mir vorstellen kann, ist, dass er Defaultwerte verwendet und diese zufälligerweise auch funktionieren.

        Aber auf Variablen kann ich doch innerhalb einer Funktion nicht einfach so zugreifen. Die muss ich dann doch als Parameter übergeben.

        Nicht zwangsläufig. Du kannst sie auch per $global importieren:

        $variable = 'a';

        function pa () {
          global $variable;
          echo $variable;
        }

        pa();

        (als Beispiel)

        Du meinst also, dass mysql_select_db($db,$con) das gleiche bewirkt wie mysql_select_db("$db",$con)?

        Ja. Allerdings ist letzteres wie gesagt unübersichtlicher und braucht zudem mehr Rechenzeit.

        Viele Grüße,
        Christian