Anfänger benötigt Hilfe bei SQL Warnung !

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

  • Anfänger benötigt Hilfe bei SQL Warnung !

    hallo, auf meiner 1. php erstellten seite habe ich ein für mich sehr grosses problem, eine sql warnung tritt auf, die den ganzen aufbau zerstört. Die Zeile auf die verwiesen wird steht unten, jeder Block der scheinbar einen Fehler verursacht hat diesen dann über sich stehen, evtl. könnt ihr ja mal schauen ! An der sql_layer.php soll es aber nicht liegen...
    danke

    http://www.alleranfangistschwer.de

    /*
    * sql_fetch_row($res,$row)
    * given a result identifier, returns an array with the resulting row
    * Needs also a row number for compatibility with PostgreSQL
    */

    function sql_fetch_row(&$res, $nr)
    {
    global $dbtype;
    switch ($dbtype) {

    case "MySQL":
    $row = mysql_fetch_row($res);
    return $row;
    break;;

    case "mSQL":
    $row = msql_fetch_row($res);
    return $row;
    break;;

    case "PostgreSQL":
    case "PostgreSQL_local":
    if( $res->get_total_rows() > $res->get_fetched_rows() ) {
    $row = pg_fetch_row($res->get_result(), $res->get_fetched_rows() );
    $res->increment_fetched_rows();
    return $row;
    } else {
    return false;
    }
    break;;

    case "ODBC":
    case "ODBC_Adabas":
    $row = array();
    $cols = odbc_fetch_into($res, $nr, &$row);
    return $row;
    break;;

    case "Interbase":
    $row = ibase_fetch_row($res);
    return $row;
    break;;

    case "Sybase":
    $row = sybase_fetch_row($res);
    return $row;
    break;;

    default:
    break;;
    }
    }

  • #2
    Welche Statements befinden sich in sql_layer.php ab Zeile 260 bis 271?
    Wird auf 271 Deine Funktion sql_fetch_row() aufgerufen? Sind dort die Funktionsparameter belegt?

    Kommentar


    • #3
      hier mal die zeilen, hoffe du kannst mir helfen ! habe ab zeile 258 mal kopiert..


      /*
      * sql_fetch_row($res,$row)
      * given a result identifier, returns an array with the resulting row
      * Needs also a row number for compatibility with PostgreSQL
      */

      function sql_fetch_row(&$res, $nr)
      {
      global $dbtype;
      switch ($dbtype) {

      case "MySQL":
      $row = mysql_fetch_row($res);
      return $row;
      break;;

      case "mSQL":
      $row = msql_fetch_row($res);
      return $row;
      break;;

      case "PostgreSQL":
      case "PostgreSQL_local":
      if( $res->get_total_rows() > $res->get_fetched_rows() ) {
      $row = pg_fetch_row($res->get_result(), $res->get_fetched_rows() );
      $res->increment_fetched_rows();
      return $row;
      } else {
      return false;
      }
      break;;

      case "ODBC":
      case "ODBC_Adabas":
      $row = array();
      $cols = odbc_fetch_into($res, $nr, &$row);
      return $row;
      break;;

      case "Interbase":
      $row = ibase_fetch_row($res);
      return $row;
      break;;

      case "Sybase":
      $row = sybase_fetch_row($res);
      return $row;
      break;;

      default:
      break;;
      }
      }

      Kommentar


      • #4
        Scherz oder? Das ist ja dasselbe wie oben.
        Wo ist Zeile 278 ?

        Was steht beim Aufruf dieser Funktion in der Variablen $res?

        Baue in die Funktion einen print ein:
        print "MSG01 res:$res<br>";

        Vor dem Aufruf wurde sicher irgendwo ein SQL-Statement angegeben. Wie lautet das? Gibt es in der DB die entsprechenden Tabellen und Datenbanken? Wurde überhaupt die DB connected?

        Kommentar


        • #5
          habe deinen print eingebaut, sieht es dann so aus wie unten ? jetzt kommen auf der seite noch mehr fehler...
          welche db´s müssen denn da sein ?? eingebunden habe ich alle von meinem lokalen rechner mit mysqldump und dann mit phpmyadmin eingespielt, habe die datei eingefügt (tabelle.sql) und ok geklickt, danach ging es soweit wie du es jetzt siehst, war das der richtige weg ?
          lokal funktioniert alles..

          /*
          * sql_fetch_row($res,$row)
          * given a result identifier, returns an array with the resulting row
          * Needs also a row number for compatibility with PostgreSQL
          */

          function sql_fetch_row(&$res, $nr)
          {
          print "MSG01 res:$res<br>";
          global $dbtype;
          switch ($dbtype) {

          Kommentar


          • #6
            Die Variable $res scheint leer zu sein, deshalb der Error
            Code:
            MSG01 res:
            Warning: Supplied argument is not a valid MySQL result resource in /homepages/18/d41363449/htdocs/phpinhalt/includes/sql_layer.php on line 273
            Den Print kannst rausnehmen oder mit // auskommentieren
            // print "MSG01 res:$res<br>";

            Früher habe ich Dich folgendes gefragt: "Vor dem Aufruf wurde sicher irgendwo ein SQL-Statement angegeben. Wie lautet das? Gibt es in der DB die entsprechenden Tabellen und Datenbanken? Wurde überhaupt die DB connected?"

            Irgendwo wird ein Connect zur Datenbank gemacht:
            $conn = MYSQL_CONNECT($server, $user, $passwort) or die ("Datenbankserver nicht erreichbar");

            Der Connect benötigt eine Serverkennung, MySQL-Benutzerkennung und ein Passwort.

            Du schreibst lokal funktioniert alles. Sind die Connect Parameter lokal dieselben wie remote, gleicher User, gleiches Passwort? Hast Du das berücksichtigt?

            Gibt es so einen Connect-String? Ja oder Nein
            Ist der Connect erfolgreich? Ja oder Nein

            Nach dem Connect wird die Datenbank ausgewählt:
            MYSQL_SELECT_DB($datenbank) or die ("Datenbank nicht vorhanden");

            Existiert so ein Select-DB-String? Ja oder Nein
            Ist der DBV-Select erfolgreich? Ja oder Nein

            Bevor dann Deine Funktion aufgerufen wird, muß logischerweise eine mysql_query erstellt werden.
            $res = mysql_query("select * from db",$conn);

            Wurde so ein Query vor dem Funktionsaufruf erstellt? Ja oder Nein

            Kommentar


            • #7
              Ersteinmal vielen Dank für deine mühe, ich scheine da ja eine sehr erfahrene Hilfe zu bekommen, das muntert mich ein wenig auf....
              ich habe unten mal den code der sql_layer.php gepostet, so fängt die datei an, muß ich oben in der funktion meine DB Daten eingeben, also die vom Provider ?
              Lokal läuft es ja aber ich habe 2 ordner, einen mit den lokalen daten und einen mit den daten die ich dann uploade, wegen den unterschiedlichen configs. natürlich habe ich in der config im upload ordner die provider db daten eingegeben, und auch dann hochgeladen. ein bissel was verstehe ich schon, wenn auch noch nicht so viel.

              also unten steht so ein connect string und es ist auch viel ausgeklammert, evtl. hilft dir (uns) das ja weiter...

              wenn du willst können wir uns auch über eMail austauschen und dann das ergebnis hier posten..

              lars.reedwisch@t-online.de



              <?php

              if (eregi("sql_layer.php",$PHP_SELF)) {
              Header("Location: ../index.php");
              die();
              }

              /* $dbtype = "MySQL"; */
              /* $dbtype = "mSQL"; */
              /* $dbtype = "PostgreSQL"; */
              /* $dbtype = "PostgreSQL_local";// When postmaster start without "-i" option. */
              /* $dbtype = "ODBC"; */
              /* $dbtype = "ODBC_Adabas"; */
              /* $dbtype = "Interbase"; */
              /* $dbtype = "Sybase"; */

              /*
              * sql_connect($host, $user, $password, $db)
              * returns the connection ID
              */


              class ResultSet {
              var $result;
              var $total_rows;
              var $fetched_rows;

              function set_result( $res ) {
              $this->result = $res;
              }

              function get_result() {
              return $this->result;
              }

              function set_total_rows( $rows ) {
              $this->total_rows = $rows;
              }

              function get_total_rows() {
              return $this->total_rows;
              }

              function set_fetched_rows( $rows ) {
              $this->fetched_rows = $rows;
              }

              function get_fetched_rows() {
              return $this->fetched_rows;
              }

              function increment_fetched_rows() {
              $this->fetched_rows = $this->fetched_rows + 1;
              }
              }



              function sql_connect($host, $user, $password, $db)
              {
              global $dbtype;
              switch ($dbtype) {

              case "MySQL":
              $dbi=@mysql_connect($host, $user, $password);
              mysql_select_db($db);
              return $dbi;
              break;;

              case "mSQL":
              $dbi=msql_connect($host);
              msql_select_db($db);
              return $dbi;
              break;;


              case "PostgreSQL":
              $dbi=@pg_connect("host=$host user=$user password=$password port=5432 dbname=$db");
              return $dbi;
              break;;

              case "PostgreSQL_local":
              $dbi=@pg_connect("user=$user password=$password dbname=$db");
              return $dbi;
              break;;

              case "ODBC":
              $dbi=@odbc_connect($db,$user,$password);
              return $dbi;
              break;;

              case "ODBC_Adabas":
              $dbi=@odbc_connect($host.":".$db,$user,$password);
              return $dbi;
              break;;

              case "Interbase":
              $dbi=@ibase_connect($host.":".$db,$user,$password);
              return $dbi;
              break;;

              case "Sybase":
              $dbi=@sybase_connect($host, $user, $password);
              sybase_select_db($db,$dbi);
              return $dbi;
              break;;

              default:
              break;;
              }

              }

              Kommentar


              • #8
                schau mal, das steht oben in meiner mainfile.php, könnte das der connect string sein ??? müssen da die db provider daten rein ?


                require_once("config.php");
                require_once("includes/sql_layer.php");
                $dbi = sql_connect($dbhost, $dbuname, $dbpass, $dbname);
                $mainfile = 1;


                eigentlich habe ich die in der config.php angegeben, und die anderen dateien ziehen sich die von da, oder ??
                in der config steht dann

                $dbhost = "XXXXXXXXXXXXX";
                $dbuname = "XXXXXXXX";
                $dbpass = "XXXXXXX";
                $dbname = "XXXXXXXXX";
                $prefix = "nuke";
                $user_prefix = "";
                $dbtype = "MySQL";


                wenn ich die daten manuell in der mainfile.php eingebe kommt der fehler das er nicht zur db connecten kann, also muss er doch vorher schonmal klappen, d.h. der connect stimmt schon, oder ?


                [Editiert von dakilla am 27-01-2002 um 20:21]

                Kommentar


                • #9
                  1. Irgendwo müssen die Variablen $host, $user, $password, $db und dergleichen belegt worden sein. Sonst funktioniert das ganze ja nicht.
                  Ich hoffe sie sind belegt.

                  2. Vermutlich müßten die /* und */ der Zeile "/* $dbtype = "MySQL"; */" entfernt werden um die Variable $dbtype den Datenbanktyp "MySQL" zuzuordnen, also:
                  $dbtype = "MySQL";

                  3. In der Funktion function sql_connect() steht wie folgt der MySQL-Connect:

                  $dbi=@mysql_connect($host, $user, $password);

                  entferne bitte das @ Zeichen (Dieses Zeichen unterdrückt die Fehlerausgabe) also:

                  $dbi=mysql_connect($host, $user, $password);

                  Vor dem Connect-Statement einen Print einbauen, um zu sehen, ob die Variablen $host, $user, $password und $db belegt sind
                  print "MSGCONN host:$host user:$user password:$password db:$db<br>";

                  Dann nochmal Skript aufrufen und schaun was passiert, ob Variablen richtig gesetzt sind und ob Connect erfolgreich war (Wenn Connect nicht erfolgreich war wird jetzt eine entsprechende Error-Message ausgegeben, da ja das @ entfernt wurde.)

                  Kommentar


                  • #10
                    Wart mal - wie ich meine Antwort geschrieben habe, hats Deine Zwischenantwort noch nicht gegeben, ich schaus mir jetzt an.

                    Kommentar


                    • #11
                      ich habe deine ausgabe befehl eingebaut, da hat er die absolut richtigen daten ausgegeben, habe es noch mal mit den provider daten verglichen, stimmt alles...

                      Kommentar


                      • #12
                        Pfoa - Das wird komplex. Tja ansich gibt es ja sowas wie eine "config.php", um dort alle applikationsweiten Variablen zu setzen.

                        $dbhost = "XXXXXXXXXXXXX";
                        $dbuname = "XXXXXXXX";
                        $dbpass = "XXXXXXX";
                        $dbname = "XXXXXXXXX";
                        $prefix = "nuke";
                        $user_prefix = "";
                        $dbtype = "MySQL";

                        Ich hoffe anstatt der XXXX stehen vernünftige Werte drin.

                        Greifst Du überhaupt auf eine MySQL-Datenbank zu? Ich nehme es an:

                        Machen wir folgendes:

                        In der Funktion function sql_connect() steht wie folgt der MySQL-Connect:

                        $dbi=@mysql_connect($host, $user, $password);

                        entferne bitte das @ Zeichen (Dieses Zeichen unterdrückt die Fehlerausgabe) also:

                        $dbi=mysql_connect($host, $user, $password);

                        Vor dem Connect-Statement einen Print einbauen, um zu sehen, ob die Variablen $host, $user, $password und $db belegt sind
                        print "MSGCONN host:$host user:$user password:$password db:$db<br>";

                        Dann nochmal Skript aufrufen und schaun was passiert, ob Variablen richtig gesetzt sind und ob Connect erfolgreich war (Wenn Connect nicht erfolgreich war wird jetzt eine entsprechende Error-Message ausgegeben, da ja das @ entfernt wurde.)

                        Punkt 2. aus meiner Antwort zuvor brauchst nicht machen, in der config.php wurde der DBTYP ja belegt.

                        Kommentar


                        • #13
                          OK
                          Das @ hast Du auch entfernt und keinen Connect Error erhalten?

                          Kommentar


                          • #14
                            ich habe deine ausgabe befehl eingebaut, da hat er die absolut richtigen daten ausgegeben,
                            habe es noch mal mit den provider daten verglichen, stimmt alles...

                            so wie sie in der config stehen, stehen sie dann auch gut lesbar für alle im IE

                            Kommentar


                            • #15
                              @ ist weg und kein fehler, habe zum test mal falsche daten in die config geschrieben, da kam dann connect fehler, aheb aber wieder alles bereinigt

                              Kommentar

                              Lädt...
                              X