Auswertung Abfrage per PDO / Erstellung Array

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by baerlinerbaer; 04-01-2020, 14: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 ...
    Last edited by baerlinerbaer; 04-01-2020, 14:39.

    Comment


    • #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.

      Comment


      • #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
        ));

        Comment


        • #5
          Hallo chorn,

          es erscheint diese Fehlermeldung:

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

          Gruß
          baerlinerbaer

          Comment


          • #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

            Comment

            Working...
            X