Ankündigung

Einklappen
Keine Ankündigung bisher.

Stored Procedure liefert nur im Erfolgsfall out-parameter

Einklappen

Neue Werbung 2019

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

  • Stored Procedure liefert nur im Erfolgsfall out-parameter

    Ich habe eine stored procedure, die einen Eintragen der Datenbank anlegen soll. Und in jedem Fall die out-Parameter @message (string) und @success (int) setzen soll.

    Dies ist die stored procedure, die ein beim Eintragen eines neuen Teams aufgerufen wird:
    Code:
    BEGIN
    
    DECLARE teamExist BOOL;
    DECLARE anmeldung BOOL DEFAULT false;
    SELECT TRUE INTO teamExist FROM t_teams WHERE teamname=in_teamname;
    
    
    IF(teamExist) THEN
    SET out_message = "Teamname existiert bereits. Anmeldung wurde abgebrochen.";
    INSERT INTO t_fehlerprotokoll (fehler) VALUE ("Teamname existiert bereits. Anmeldung wurde abgebrochen.");
    SET out_success = false;
    ELSEIF (in_klassenstufe < 1 OR in_klassenstufe > 3) THEN
    SET out_message = "Die Klassenstufe ist nicht korrekt. Anmeldung wurde abgebrochen.";
    INSERT INTO t_fehlerprotokoll (fehler) VALUE ("Die Klassenstufe ist nicht korrekt. Anmeldung wurde abgebrochen.");
    SET out_success = false;
    ELSEIF(in_teilnehmerZahl < 3 OR in_teilnehmerZahl > 5) THEN
    SET out_message = "Teilnehmerzahl ist nicht korrekt. Anmeldung wurde abgebrochen.";
    INSERT INTO t_fehlerprotokoll (fehler) VALUE ("Teilnehmerzahl ist nicht korrekt. Anmeldung wurde abgebrochen.");
    SET out_success = false;
    
    
    ELSE
    CASE in_teilnehmerZahl
    WHEN 3 THEN INSERT INTO t_teams (teamname, email, klassenstufe, schule, teilnehmerZahl,
    teiln1_nn, teiln1_vn, teiln1_kl, teiln1_sex,
    teiln2_nn, teiln2_vn, teiln2_kl, teiln2_sex,
    teiln3_nn, teiln3_vn, teiln3_kl, teiln3_sex)
    VALUES (in_teamname, in_email, in_klassenstufe, in_schule, in_teilnehmerZahl,
    in_teiln1_nn, in_teiln1_vn, in_teiln1_kl, in_teiln1_sex,
    in_teiln2_nn, in_teiln2_vn, in_teiln2_kl, in_teiln2_sex,
    in_teiln3_nn, in_teiln3_vn, in_teiln3_kl, in_teiln3_sex);
    SET out_message = "Anmeldung war erfolgreich.";
    SET out_success = true;
    
    
    WHEN 4 THEN INSERT INTO t_teams (teamname, email, klassenstufe, schule, teilnehmerZahl,
    teiln1_nn, teiln1_vn, teiln1_kl, teiln1_sex,
    teiln2_nn, teiln2_vn, teiln2_kl, teiln2_sex,
    teiln3_nn, teiln3_vn, teiln3_kl, teiln3_sex,
    teiln4_nn, teiln4_vn, teiln4_kl, teiln4_sex)
    VALUES (in_teamname, in_email, in_klassenstufe, in_schule, in_teilnehmerZahl,
    in_teiln1_nn, in_teiln1_vn, in_teiln1_kl, in_teiln1_sex,
    in_teiln2_nn, in_teiln2_vn, in_teiln2_kl, in_teiln2_sex,
    in_teiln3_nn, in_teiln3_vn, in_teiln3_kl, in_teiln3_sex,
    in_teiln4_nn, in_teiln4_vn, in_teiln4_kl, in_teiln4_sex);
    SET out_message = "Anmeldung war erfolgreich.";
    SET out_success = true;
    
    ELSE INSERT INTO t_teams (teamname, email, klassenstufe, schule, teilnehmerZahl,
    teiln1_nn, teiln1_vn, teiln1_kl, teiln1_sex,
    teiln2_nn, teiln2_vn, teiln2_kl, teiln2_sex,
    teiln3_nn, teiln3_vn, teiln3_kl, teiln3_sex,
    teiln4_nn, teiln4_vn, teiln4_kl, teiln4_sex,
    teiln5_nn, teiln5_vn, teiln5_kl, teiln5_sex)
    VALUES (in_teamname, in_email, in_klassenstufe, in_schule, in_teilnehmerZahl,
    in_teiln1_nn, in_teiln1_vn, in_teiln1_kl, in_teiln1_sex,
    in_teiln2_nn, in_teiln2_vn, in_teiln2_kl, in_teiln2_sex,
    in_teiln3_nn, in_teiln3_vn, in_teiln3_kl, in_teiln3_sex,
    in_teiln4_nn, in_teiln4_vn, in_teiln4_kl, in_teiln4_sex,
    in_teiln5_nn, in_teiln5_vn, in_teiln5_kl, in_teiln5_sex);
    SET out_message = "Anmeldung war erfolgreich.";
    SET out_success = true;
    END CASE;
    END IF; END
    Ich nutze ein pdo prepared statement. Nach dem execute() möchte ich mir die out parameter holen. Im Erfolgsfall (Eintragung in die Dankenbank war erfolgreich), wird sowohl die Message (Anmeldung war erfolgreich) als auch success (1) gesetzt. Wenn es aus irgendeinem Grund nicht klappt bekomme als Resultat ein Array voller NULL-Werte.

    Beispiel-Daten, mit denen die Eintragung beim ersten Mal senden funktioniert und beim zweiten Mal nicht (das ist ja soweit erstmal das gewünschte Verhalten):

    Code:
    CALL schueler("Gruppe 1", "gruppe@email.de","2","BeispielSchule","3","NACHNAME","Vorname","1","m","Hofmann","Helen","2","w","Ayoub", "Razan","2","w",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, @message, @success)
    Woran kann es liegen, dass die out-params nur im Erfolgsfall zurückommen?
    Müssen out parameter etwa auch mit bindParam() gebunden werden?

    Liebe Grüße S

  • #2
    Die Ursache ist wohl in der Stored Procedure zu suchen.

    Bei Datenbankproblem bitte keinen PHP-Code, sondern ausschließlich SQL-Code posten. Auch solltest du alle Informationen (Tabellenstruktur, Stored Procedure, Testdaten) als SQL-Code mitliefern, damit das Problem nachgestellt werden kann.

    Kommentar


    • #3
      Habe es aktualisiert.

      Kommentar


      • #4
        Zitat von xpko Beitrag anzeigen
        Habe es aktualisiert.
        Jetzt fehlen noch Tabellenstruktur und Testdaten als SQL-Code.

        Kommentar

        Lädt...
        X