Linuchs: remote-Zugriff mit PHP 8 auf Datenbank MySQL 10

Moin,

mein alter Server (A) hat die Datenbank MySQL-Vers.=[10.1.37-MariaDB-0+deb9u1], [] PHP-Vers.=[5.6.40-0+deb8u1]

auf einem neuen Server (B) mache ich erste Gehversuche mit PHP 8, brauche aber die Daten von (A)

Nach Freigabe von allow_url_fopen auf (B) klappt das Öffnen der DB offenbar mit

error_reporting( E_ALL );
$mysqli = new mysqli( "remso.eu", "id", "pw", "db" );

if ( $mysqli->connect_errno ) {
  die ("Connect Error (" . $mysqli->connect_errno . ") " . $mysqli->connect_error );

} else {

  echo "Success... " . $mysqli->host_info . "<br>\n";
}

Meldung: „Success... remso.eu via TCP/IP“

Bei falschen Zugangsdaten kommt keine Meldung, hätte eine Fehlermeldung erwartet.

Nun also das erste query:

$q = "...";
echo "<pre>".$q."</pre>";

$res = $mysqli->query($q);
if ( !$res ) {
  printf("Fehlermeldung: %s\n", $mysqli->error);
} else {
  echo "[".$res->num_rows."] Treffer<br>";
}

Der mehrzeilige Inhalt von $q wird korrekt angezeigt, aber dann keine Meldung mehr.

Blindflug als Anfänger ist tödlich. Was ist falsch?

Gruß, Linuchs

  1. Hallo Linuchs,

    Wenn du pdo verwenden würdest, hätte ich eine Erklärung: da hast sich mit php 8 der default error mode geändert, es wirft Exceptions.

    Aber vielleicht tut mysqli ähnliches, ich finde gerade nur die Szene in der Doku nicht.

    Lege mal ein try catch um den Zugriff und schau, ob da was fliegt.

    Allerdings sollte dein error_reporting Schalter eine exception sichtbar machen. Bist du sicher, dass du nicht anderweitig die erroranzeige unterdrückst?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf.,

      meine Antwort (Lösungsansatz) an dich kann ich nicht absenden

      1. aber wer weiß, was Variomedia fest gelegt hat

        Ha! Ich!

        https://www.fastix.org/phpinfo.php

        Genauer:

        https://www.fastix.org/phpinfo.php?show_ini_only=true

        Aber ich vermute, dass Rolf mit …

        Allerdings sollte dein error_reporting Schalter eine exception sichtbar machen. Bist du sicher, dass du nicht anderweitig die erroranzeige unterdrückst?

        … etwas anderes gemeint hat.

        Jetzt kommt etwas doofes: Variomnedia stellt error-logs neuerdings erst am nächsten Tag zur Verfügung.

        1. (Laudatio)

          Den SQL-Fehler löst wohl das hier.

          Die php.ini habe ich ergänzt:

          (1)

          allow_url_fopen=1
          

          Das sollte keinen Einfluss auf die Arbeit mit der Datenbank haben.

          (2)

          display_errors=1
          

          Jepp.

          Das kannst Du auch file-lokal machen. Odfer zentral und das Problem mit den Logfiles, die Variomedia erst am Folgetag liefert, zentral etwa so lösen:

          $_SERVER['DOCUMENT_ROOT']/debug.settings.php

          <?php
          ### file: $_SERVER['DOCUMENT_ROOT']/debug.settings.php
          
          ### enable oder disable the debugging
          
          ## set to truly or falsy values …
          define( 'DEBUG', true );
          
          ## set to falsy value or to a file, which the webserver can write …
          ## Beware! You shold truncate the file from time to time...
          
          define(
              'E_LOGFILE',
              $_SERVER['DOCUMENT_ROOT']
              . '/../'
              . $_SERVER['SERVER_NAME']
              . '_error.log'
          );
          ## or
          /*
          define( 'E_LOGFILE', false );
          #*/
          
          ### program - do not edit! ###
          
          if ( DEBUG ) {
              error_reporting( E_ALL );
              ini_set( 'display_errors', 1 );
              if ( E_LOGFILE ) {
                  ini_set( 'error_log', E_LOGFILE );
              }
          } else {
              error_reporting( E_ERROR );
              ini_set( 'display_errors', 0 );
          }
          
          

          In allen anderen originär aufrufbaren Skript-Dateien auf dem Server:

          <?php
          ## enable oder disable the debugging for the whole and incredidible project:
          require_once( $_SERVER['DOCUMENT_ROOT'] . '/debug.settings.php' );
          
          1. allow_url_fopen=1

            Das sollte keinen Einfluss auf die Arbeit mit der Datenbank haben.

            nur die Grundbedingung, um auf die DB des anderen Servers zuzugreifen, das ging vorher nicht.

      2. Hallo Linuchs,

        wir hatten Probleme mit einem User namens 2O (zwanzig) und hatten diesen Namen geblockt. Da hat wohl dazu geführt, dass Beiträge mit der Zeichenfolge 2 0 abgewiesen werden. Das nehmen wir wieder raus.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo @Rolf B!

          Mit Link zu einem Beitrag im Forum (absolute Adresse) kommt auch die Spamverweigerungsmeldung...

          Mit der relativen Adresse ./1814952#m1814952 ging es dann...

          1. Hallo Raketenwilli,

            Die 20 sollte jetzt wieder gehen

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Ach Mist. In der zu postenden URL stand

              https://forum.selfhtml.org/self/2024/...

              Sorry, das hab ich übersehen - sonst hätte ich gewusst, warum es „geknallt“ hat - und Dich nicht belästigt.

              (Hat der Spamfilter eigentlich ein Whitelisting?

              (z.B. für https:.*\.selfhtml\.org)

              Wenn ich schon mal hier poste:

              Mein aktuelles Machwerk: Ein Skript, mit dem nach dem Anschluss meines Laptops an den heimischen die Bildschirme (Hintergründe und Sound-Ausgang) nach meinem Gustus (küchenlateinisch für Geschmack) konfiguriere.

              https://code.fastix.org/Projekte/Linux-Monitor-Switch für Laptops/

              1. Hallo Raketenwilli,

                Eigentlich hatten wir den USER namens "20" blocken wollen. Und dann lernten wir, dass das auch die Erwähnung dieses Users im Postingtext blockiert.

                Egal ob dieser Text eine URL ist oder sonstwas...

                Rolf

                --
                sumpsi - posui - obstruxi
    2. Langer Bericht ist als Spam abgelehnt worden.

      Kurzform:

      Die php.ini habe ich ergänzt:

      allow_url_fopen=1
      display_errors=1
      

      Nun kommt ein Fehler, den ich nicht verstehe. Habe das Programm auf dem alten Server (A) laufen lassen, derselbe Fehler.

      Hatte die Namen der Tabellen in '' geschlossen 'adressen', die habe ich entfernt. Nun kommt auf (A) ein Fehler, den ich verstehe:

      Table 'remso.adressen' doesn't exist.

      Stimmt, den Namen hole ich seit Jahrzehnten (1,6 Jahrzehnte) aus einem Array, hatte ich nie im Klartext angegeben.

      $db["remso"]  = [
      ...
      ,"adressen"            => "bia_adressen"
      

      Dein Hinweis, dass Fehlermeldungen unterdrückt werden, war richtig.

      Danke für deine Hilfe.

      Gruß, Linuchs

      1. Table 'remso.adressen' doesn't exist.

        Eigenamen/Objektnamen werden in MySQL/MariaDB in Backticks notiert (soweit, falls und wenn man diese quoten möchte). Im Falle der Angabe von Schema (Datenbank) und Tabelle(oder view) sind dann beide jeweils in Backticks einzuschließen.

        Also wenn schon, dann so:

        SELECT `foo`, `bar`, `bar`, `baz` FROM `remso`.`adressen`;
        

        Und, wenn es das nicht ist, dann poste doch mal das resultierende SQL - oder, wenn Du mit Parameter-Binding arbeitest, den Weg dahin.