[gelöst] Verständnisfrage zu Stored Procedures

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

  • [gelöst] Verständnisfrage zu Stored Procedures

    Seit einiger Zeit werkle ich nun schon an folgender "Stored Procedure" herum, nur hängt sich phpMyAdmin regelmäßig auf, ohne eine SQL Fehlermeldung. Deshalb kann ich einfach nicht den Frund dafür herausfinden, warum dies nicht funktioniert:

    Code:
     DROP PROCEDURE IF EXISTS buyarticles;
    DELIMITER //
    CREATE PROCEDURE checkarticles (IN anzahl INT, IN zielid INT, OUT rest INT)
    SQL SECURITY INVOKER
    BEGIN
    IF ((SELECT quantity FROM book_index WHERE id = zielid) >= anzahl)
      THEN UPDATE book_index SET quantity = quantity - anzahl WHERE id = zielid;
      ELSE SELECT quantity FROM book_index WHERE id = zielid INTO rest;
    END IF;
    END //
    DELIMITER ;

    Da ich neu auf diesem Gebiet bin, wird es wahrscheinlich ein dummer Anfängerfehler sein, aber ich kann ihn beim besten Willen nicht finden.

    1. Ja, ich habe die entsprechenden Einträge im Manual gelesen. Google habe ich auch benutzt. Das mache ich immer zuerst, wenn ich eine Frage habe, denn ich habe zu Glück das selbstständige Denken gelernt, sonst würde ich nicht fragen
    2. Ja, ich besitze den erstzunehmenden Ehrgeiz, die Dinge, nach denen ich frage, auch zu begreifen und/oder begreifen zu lernen, sonst würde ich nicht fragen


  • #2
    Hallo,

    so auf Anhieb fällt mir nur auf, dass der Name der gedroppten nicht mir dem der definierten Prozedur übereinstimmt, aber daran dürfte sich niemand aufhängen, das ist ein billiger Fehler, der mit einer entsprechenden Meldung quittiert wird.

    In deinem Code sehe ich so auf Anhieb aber jetzt auch keinen Fehler.

    Was aber sein kann, ist, dass PHPMyAdmin damit nicht klar kommt. Es gibt scheinbar unlogische Verhaltensweisen, schon wenn man mit Variablen (z. B. set @test:=1) arbeitet.

    Probier das doch mal im Kommandozeilen-Tool aus oder (falls du lokal kein solches hast) per PHP-Skript aus.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Auf diese Weise funktioniert es:

      PHP-Code:
      <?php

      $sql
      [] = "DROP PROCEDURE IF EXISTS checkarticles";
      $sql[] = "
      CREATE PROCEDURE checkarticles (IN anzahl INT, IN zielid INT, OUT rest INT)
      SQL SECURITY INVOKER
      BEGIN
      IF ((SELECT quantity FROM book_index WHERE id = zielid) >= anzahl)
        THEN UPDATE book_index SET quantity = quantity - anzahl WHERE id = zielid;
             SELECT quantity FROM book_index WHERE id = zielid INTO rest;
        ELSE SELECT quantity FROM book_index WHERE id = zielid INTO rest;
      END IF;
      END"
      ;
      $sql[] = "CALL checkarticles(2, 10, @laber)";
      $sql[] = "SELECT @laber AS muh";

      $connection = new mysqli("localhost""root""""online_shop");
      $count count($sql);

      for(
      $i=0$i<$count$i++) {

          
      $result $connection->query($sql[$i]) OR die($connection->error);

      }

      $rows $result->fetch_object();

      echo 
      "<pre>\n";
      print_r($rows);
      echo 
      "</pre>\n";


      ?>
      Danke für Deine Hilfe, Amica.

      1. Ja, ich habe die entsprechenden Einträge im Manual gelesen. Google habe ich auch benutzt. Das mache ich immer zuerst, wenn ich eine Frage habe, denn ich habe zu Glück das selbstständige Denken gelernt, sonst würde ich nicht fragen
      2. Ja, ich besitze den erstzunehmenden Ehrgeiz, die Dinge, nach denen ich frage, auch zu begreifen und/oder begreifen zu lernen, sonst würde ich nicht fragen

      Kommentar

      Lädt...
      X