Ankündigung

Einklappen
Keine Ankündigung bisher.

Parameter Übergabe von PHP nach MySQL Procedure

Einklappen

Neue Werbung 2019

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

  • Parameter Übergabe von PHP nach MySQL Procedure

    Ich hatte ein Problem mit dem Aufruf von MySQL Prozeduren aus PHP heraus. Ich versuchte dies über die MySQLI Schnittstelle. Dies funktionierte nicht. Auf Anraten von "protestix" bin ich auf PDO umgestiegen. Die angestoßenen Prozeduren laufen jetzt ohne Abbruch und Fehlermeldung durch. Leider gibt es dennoch ein Problem. Sie laufen ohne den Datumsparameter den ich übergeben möchte. Es geht darum, aus der Datenbank bestimmte Situationen, die zu einem bestimmten Datum vorhanden waren nachzustellen. Daher muss ich beliebige Datumswerte der Prozedur mitteilen können. Beim Googlen habe ich Beispiele gefunden, die bei mir leider nicht funktionierten. HIer nun die Codeschnipsel.

    Auszug aus dem PHP Skript:

    PHP-Code:
    .....
           try
                {
                    
    set_time_limit(0);
                    
    ignore_user_abort(1);
                    
    $sdatum=$_POST['sdatum'];
                    echo 
    "Datum=",$sdatum,"<br>";
    #
    #  Datenbankverbindung vorbereiten
    #
                    
    $host='localhost';
                    
    $dbname='finanzdepot';
                    
    $username='www-data';
                    
    $password='XXXXXXXXXX';
                    
    $dsn "mysql:host=".$host.";dbname=".$dbname;
    #
    # Datenbankverbindung aufbauen
    #
                    
    $link = new PDO($dsn$username$password,array(PDO::ATTR_PERSISTENT => true));
    #
    # SQL Befehl vorbereiten und absetzen
    #
                    
    $statement=$link->prepare('CALL p_ansicht_erstellen(:qDatum);');
                    
    $statement->bindParam(':qDatum' ,$sdatumPDO::PARAM_STR10);
                    if(!
    $statement -> execute())
                    {
                        echo 
    "SQL Error <br />";
                        echo 
    $statement->queryString."<br />";
                        echo 
    $statement->errorInfo()[2];
                    }
    # Datenbankverbindung schließen
                    
    $link null;
                }
                catch (
    PDOException $e)
                {
                    print 
    "Error!: " $e->getMessage() . "<br/>";
                    die();
                }
    ...... 
    MySQL Prozedure die aufgerufen wird.

    Code:
    drop procedure if exists p_ansicht_erstellen;
    delimiter //
    create procedure p_ansicht_erstellen(qDatum date)
    /* Erstellen der temporaeren Tabellen für das Formular "ausgabe-saldo" */
    BEGIN
    #
    DROP TABLE IF EXISTS `logging_p_ansicht_erstellen`;
    CREATE TABLE `logging_p_ansicht_erstellen` (log text);
    #
    #SET @qaDatum=@qDatum;
    set @qaDatum=@qDatum;
    SELECT @qaDatum;
    INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@qaDatum); # Logging
    SET @Flag1="p_aktuelle_kurse_kopieren";
    INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@Flag1); # Logging
    CALL p_aktuelle_kurse_kopieren(@qaDatum);
    SET @Flag2="p_ausgabe_saldo";
    INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@Flag2); # Logging
    CALL p_ausgabe_saldo(@qaDatum);
    CALL p_ausgabe_bestand;
    CALL p_ausgabe_verkaeufe;
    CALL p_ausgabe_minimalkurs_verkauf;
    CALL p_ausgabe_maximalkurs_kauf;
    END
    //
    Im Logging (Table: logging_p_ansicht_erstellen) bleibt das Datumsfeld leer. Sonst läuft die Prozedur durch und ruft auch die Unterprozeduren erfolgreich auf. Bereits in der obersten Schicht (Prozedur die von PHP aufgerufen wird) geht allerdings der Datumsparameter verlohren. In den error.log Dateien von apache2 und mysql stehen keine Einträge. Was läuft falsch?

  • #2
    https://stackoverflow.com/questions/...edure-from-php
    mal als Ansatz.

    Kommentar


    • #3
      Eine wirkliche Lösung für die Aufgabenstellung ließ sich nicht finden. Etliche Varianten der Parameterübergabe habe ich probiert und viele im Internet angegebene Pseudolösungen getestet. Sie haben allesamt nicht funktioniert. Wirklich schwach!. Dennoch ist das Problem gelöst. Ich habe mir ein eigenes Workaround einfallen lassen. Ich setzte via SQL Befehl ein Shellvariable und verwende sie dann in der prozeduralen Parameterübergabe in derselben MySQL Shell. Die Parameterübergabe von PHP via bindParam in einen simplen SQL Befehl wo keine Prozedur aufgerufen wird funktioniert.

      Kommentar


      • #4
        Also bei uns funktioniert das ohne Probleme mit bindValue statt mit bindParam
        sorry, shift-taste kaputt

        Kommentar

        Lädt...
        X