Ankündigung

Einklappen
Keine Ankündigung bisher.

PostgreSql: Stored Procedure Aufruf funkt über PHP ohne bindParam aber nicht mit

Einklappen

Neue Werbung 2019

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

  • PostgreSql: Stored Procedure Aufruf funkt über PHP ohne bindParam aber nicht mit

    Hallo!

    Ich suche schon seit fast einem ganzen Arbeitstag nach dem Fehler und kann keinen entdecken.

    Problem:
    Ich rufe eine Stored Procedure auf. Wenn ich den Parameter hardcodiere ("caller2" im Code), dann funkt es. Dh der Parameter 16 wird in die DB geschrieben.
    Wenn ich allerdings bindParam verwende ("caller"), funktioniert es nicht. Im PostgreSQL-Log erhalte ich keine Fehlermeldung. Das Insert in die DB hat aber nicht stattgefunden für die Werte 17 und 19.
    Über caller und caller2 wird allerdings die selbe SP aufgerufen.
    Die Echos werden alle korrekt angezeigt, das Script hat also keinen gröberen Fehler und läuft ohne Exception durch.

    Ich orientierte mich dabei an Vorlagen aus der PHP-Doku und kann leider nach vielem hin- und herprobieren vulgo Fehlersuche/-eingrenzung immer noch keinen Fehler erkennen.

    Prinzipiell funktioniert die Verwendung von bindParam auf meinem Server allerdings, zB wenn ich ein Prepared Statement verwende (insert im konkreten Fall getestet), weshalb ich ein Konfigurationsproblem eher ausschließen würde.

    Vielleicht kann mir einer von euch helfen.

    Die SP übernimmt einen In-Parameter. Es gibt keinen Rückgabewert.

    PostgreSQL 11


    <?php

    echo date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
    echo "<br />";
    echo "<br />";

    $dsn='pgsql:host=localhost;dbname=DerDbName;user=p ostgres;password=DasPasswortMeinerWahlDasDuNichtKe nnenBrauchst';

    $conn = new PDO($dsn);
    $conn2 = new PDO($dsn);

    if(!$conn)
    {
    echo "Error xyz: Verbindung nicht herstellbar";
    }


    $p1=17;

    $stmt="call testproc2(?)";

    $caller = $conn->prepare($stmt);

    $caller->bindParam(1, $p1, PDO::PARAM_INT);

    $caller->execute();

    echo "nach execute <br />";

    $p1=19;
    $caller->execute();

    echo "nach execute <br />";

    echo "<br />";
    echo "es folgt ein Aufruf ohne Parameterbinding, mit hardcoded Parameter 16 <br />";

    $stmt2="call testproc2(16)";
    $caller2 = $conn2->prepare($stmt2);
    $caller2->execute();

    echo "nach execute <br />";

    ?>


    Danke für eure Unterstützung!

  • #2
    Du hast nicht mal das Error-Reporting bei PDO aktiviert, also Fehler werden still und heimlich ignoriert.

    PHP-Code:
    $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
        
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]); 

    Kommentar


    • #3
      Herzlichen Dank, werter Hellbringer.

      Kaum hat man die erforderlichen Logeinträge, lösen sich mache Probleme sehr schnell.
      Die Fehler war nicht im php zu suchen, sondern im Polymorphismus der Stored Procedure (gleicher Prozedurname, unterschiedliche Parameterliste), und es wurde die falsche Prozedur aufgerufen.

      Vielen Dank & beste Grüße

      Kommentar

      Lädt...
      X