MrSchmidtdtdtdtdtt: Datenbankverbindung über include übergeben

Hallo,

ich bekomme follgenden Fehler, wenn ich die Datenbankverbindung über require_once("db_connection.php") übergebe:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:...\htdocs\include\create_account.php on line 27

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in E:...\htdocs\include\create_account.php on line 27

Wenn die Datenbankverbindung allerdings von der Ausführenden php Datei aus (also der, die den Eintrag vornimmt bzw. den oberen Fehler produziert) erfolgt, funktioniert alles einwandfrei.

Mir ist klar, das hier die übergebene Verbindung nicht verwendet wird und stattdessen versucht wird mit dem standart Benutzer zu connecten.. was dann die entsprechende Fehlermeldung verursacht.
Aber weshalb?

Danke im Voraus.

  1. Hallo,

    mit requiere_once() übergibst du nichts. Du liest nur die PHP Datei ein. Es ist m.W. nach identisch mit einer Datei, in der statt require_once() eben der Text/Code steht, den du includest.

    echo "a";
    echo "b";

    ===

    echo "a";
    include("b");

    wenn in b steht
    echo "b";

    Gruß

    jobo

  2. Hi,

    ich bekomme follgenden Fehler, wenn ich die Datenbankverbindung über require_once("db_connection.php") übergebe:
    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:...\htdocs\include\create_account.php on line 27

    verschweigst du uns möglicherweise, dass du hier versuchst, über HTTP zu includen, anstatt über direkten Dateizugriff? Denn dann würde ja das includierte Script als neue, komplett unabhängige Scriptinstanz gestartet, was das beschriebene Verhalten zur Folge hätte.

    So long,
     Martin

    --
    Ein Theoretiker ist ein Mensch, der praktisch nur denkt.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hi,

      verschweigst du uns möglicherweise, dass du hier versuchst, über HTTP zu includen, anstatt über direkten Dateizugriff? Denn dann würde ja das includierte Script als neue, komplett unabhängige Scriptinstanz gestartet, was das beschriebene Verhalten zur Folge hätte.

      So long,
      Martin

      Hallo,

      zumindest nicht absichtlich. Kannst du mir das näher erleutern?
      Ich include folgenderweise:

      db_connection.php:

      1   <php  
      2     // database settings  
      3     $server = "xxx";  
      4     $user = "xxx";  
      5     $password = "xxx";  
      6     $database = "xxx";  
      7  
      8     mysql_connect($server, $user, $password) or die ("xxx");  
      9     mysql_select_db($database) or die ("xxx");  
      10  ?>
      

      create_account.php:

      1    <?php  
      2  
      3      // open database connection  
      4      include("db_connection.php");  
      5  
      6      // get variables from input form  
      7      $xxx =   $_POST['xxx'];  
      8      $xxx =   $_POST['xxx'];  
      9      $xxx =   $_POST['xxx'];  
      10     $xxx =   $_POST['xxx'];  
      11     $xxx =   $_POST['xxx'];  
      12     $xxx =   $_POST['xxx'];  
      13  
      14     // write into database  
      15     mysql_query("INSERT INTO accounts (xxx,  
      16                                        xxx,  
      17                                        xxx,  
      18                                        xxx,  
      19                                        xxx,  
      20                                        xxx)  
      21  
      22                              VALUES ('$xxx',  
      23                                      '$xxx',  
      24                                      '$xxx',  
      25                                      '$xxx',  
      26                                      '$xxx',  
      27                                      '$xxx')");  
      28     // close database connection  
      29     // mysql_close();  
      30   ?>
      
      1. Hallo,

        Ich include folgenderweise:

        eine Datei, die keinen PHP-Code enthält

        db_connection.php:

        1   <php

        2     // database settings
        3     $server = "xxx";
        4     $user = "xxx";
        5     $password = "xxx";
        6     $database = "xxx";
        7
        8     mysql_connect($server, $user, $password) or die ("xxx");
        9     mysql_select_db($database) or die ("xxx");
        10  ?>

          
        Bitte beachte <http://www.php.net/manual/de/language.basic-syntax.phpmode.php>  
          
          
        
        > create\_account.php:  
        > [code lang=php]1    <?php  
        > 2  
        > 3      // open database connection  
        > 4      include("db\_connection.php");  
        > 5  
        > 6      // get variables from input form  
          
        # Oft gesehen und dennoch überflüssig.  
          
          
        
        > 14     // write into database  
        > 15     mysql\_query("INSERT INTO accounts (xxx,  
        > 16                                        xxx,  
        > 17                                        xxx,  
        > 18                                        xxx,  
        > 19                                        xxx,  
        > 20                                        xxx)  
        > 21  
        > 22                              VALUES ('$xxx',  
        > 23                                      '$xxx',  
        > 24                                      '$xxx',  
        > 25                                      '$xxx',  
        > 26                                      '$xxx',  
        > 27                                      '$xxx')");  
          
        da keine DB-Verbindung bestehen kann, versucht sich PHP mit den Standardwerten zu verbinden, was fehlschlägt.  
          
        Gefährlicher Fehler: Es fehlt die Beachtung des [Kontextwechsels](http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel).  
          
          
          
        Freundliche Grüße  
          
        Vinzenz
        
  3. Hallo,

    Wer sagt Dir denn, dass diese Verbindung nicht genutzt wird?
    Der User 'ODBC' hat vermutlich nur keine passenden Zugriffsrechte auf die ausgewählte Tabelle.

    Nun, ich habe angenommen, das meine Verbindungsübergabe fehlschlägt und DESHALB versucht wird, mit dem ODBC Standard-Benutzer zu verbinden, was dann natürlich nicht funktioniert.
    Was genau passiert hier?

    Außerdem würde ich die Verbindung mittels einer Funktion herstellen, die den Linkidentifier (oder false) als Ergebnis hat, und nicht einfach so die beiden Zeilen

    8     mysql_connect($server, $user, $password) or die ("xxx");
       9     mysql_select_db($database) or die ("xxx");

    ins Script klatschen.

    Das werde ich sogleich umsetzen.. ist vermutlich sauberer. Danke!

    Liebe Grüße,
    Mr.Schmidtdt