Auswertung Abfrage per PDO / Erstellung Array

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

  • Auswertung Abfrage per PDO / Erstellung Array

    Hallo,

    ich habe im letzten Jahr die Betreuung einer Homepage übernommen. Diese ist zum Teil noch mit mysql_query-Anweisungen programmiert, so dass der Server noch immer auf PHP 5.6 läuft (und somit unnötig Kosten für den Support anfallen). Um endlich den Server auf PHP 7.x umzustellen, bin ich derzeit dabei die Scripte auf PDO umzustellen. Das hat zum Teil auch schon problemlos funktioniert. Eines der Scripte macht mir aber nun Probleme und ich kann irgendwie auch nach langer Suche keinen Fehler finden. Daher hoffe ich, dass hier einmal jemand drüber schauen und mir möglicherweise den "Wald" zeigen kann, denn ich "vor lauter Bäumen" nicht sehe. Die MySQL-Abfrage ergibt auf jeden Fall ein Ergebnis, so dass das Problem in den PDO-Anweisungen liegen muss.

    Bislang sieht das Script wie folgt aus (die Ausgabe in dem Fall von mir vereinfacht):

    PHP-Code:
    $link mysql_connect($sHost$sUser$sPass);
    mysql_select_db($sDBName$link);
    $sql1 "SELECT * FROM `" $table "` WHERE `index` = " $_REQUEST['id'];
    $erg1 mysql_query($sql1$link) or die("Fehler: " .mysql_error());
    $result1[0] = mysql_fetch_array($erg1);
    echo 
    $result1[0]["kreis"]; 
    Ergebnis:
    Berlin

    Mit PDO sieht das Script nun bislang so aus:

    PHP-Code:
    $pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s'$sHost$DBName), $sUser$sPass);
    $utf8 $pdo2->prepare("SET NAMES UTF8");
    $result_check $utf8->execute();
    $sql1 "SELECT * FROM `" $table "` WHERE `index` = " $_REQUEST['id'];
    $statementbb     $pdo2->prepare($sql1);
    $erg1              $statementbb->execute();
    if(
    $statementbb->rowCount() > 0) {
                while(
    $result1 $statementbb->fetch()) {
                   
    print_r($result1);
                }
            } else {
              echo 
    'there are no result';
            } 
    Ergebnis ist hier:
    there are no result

    Das bedeutet, dass er im PDO $statementbb scheinbar keinerlei Datensatz ablegt. Die Frage, die ich mir nicht beantworten kann, ist nun, warum das so ist (denn die SQL-Abfrage gibt einen Datensatz zurück, wie man bei der alten Ausgabe sehen kann).

    Ich würde mich sehr freuen, wenn da mal jemand drüberschauen und mir ggf. auf die Sprünge helfen könnte.

    Gruß
    Baerlinerbaer
    Zuletzt geändert von baerlinerbaer; 04.01.2020, 15:40.

  • #2
    Ich habe das Script inzwischen nochmal überarbeitet, was jedoch leider nichts daran ändert, dass das Array scheinbar weiterhin nicht mit den abgefragten Werten befüllt wird.

    PHP-Code:
    if(isset($_GET['id'])) {
      
    $id $_GET['id'];
    } else {
      die(
    "Bitte eine ?id übergeben");
    }

    $pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s'$sHost$DBName), $sUser$sPass);
    $utf8 $pdo2->prepare("SET NAMES UTF8");
    $result_check $utf8->execute();

    $table "orte_bb";
    $sql1 "SELECT * FROM `" $table "` WHERE `index` = ?";

    $statementbb     $pdo2->prepare($sql1);
    $erg1              $statementbb->execute(array($id));
    while  (
    $result1        $statementbb->fetch(PDO::FETCH_ASSOC))
    {
      echo 
    $result1['kreis'];

    So langsam bin ich echt ratlos ...
    Zuletzt geändert von baerlinerbaer; 04.01.2020, 15:39.

    Kommentar


    • #3
      Das ergibt im Übrigen die Ausgabe von var_dump für die verwendeten Variablen:

      $id
      $string(2) "20"
      $ql1
      string(41) "SELECT * FROM 'orte_bb' WHERE index = ?"
      $statementbb
      object(PDOStatement)#9019 (1) { ["queryString"]=> string(41) "SELECT * FROM 'orte_bb' WHERE index = ?" }
      $erg1
      bool(false)
      Ich habe dann noch eine Fehlerabfrage eingebaut:

      PHP-Code:
      $erg2 $pdo2->errorInfo() 
      var_dump für diese weitere Variable ergibt:

      $erg2
      array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
      Vielleicht gibt das irgendwie die Antwort auf das Problem in dem Quelltext-Schnipsel.

      Kommentar


      • #4
        Was passiert denn, wenn du die Bedingung weglässt und nur mal mit LIMIT 100 abfragst? Kommt da überhaupt was raus? Versuch' auch mal die Backticks vorerst wegzulassen, und harte Fehlerausgabe zu aktivieren

        Code:
        $pdo = new PDO('mysql:host=localhost;dbname=someTable', 'username', 'password', array(
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ));

        Kommentar


        • #5
          Hallo chorn,

          es erscheint diese Fehlermeldung:

          PDOException thrown
          SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

          Gruß
          baerlinerbaer

          Kommentar


          • #6
            Jetzt habe ich den Fehler, der echt wieder mal im Detail steckte, in dem Fall in der Zeile:

            PHP-Code:
            $pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s'$sHost$DBName), $sUser$sPass); 
            Bei der Variable für den Datenbank-Namen fehlt ein Buchstabe, was echt schwerlich auffällt. Korrigiert zu

            PHP-Code:
            $pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s'$sHost$sDBName), $sUser$sPass); 
            funktioniert nun alles.

            Gruß
            baerlinerbaer

            Kommentar

            Lädt...
            X