PHP Rocks
Prozedur ignoriert scheinbar Parameter? - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: Datenbanken (https://www.php-rocks.de/https://www.php-rocks.de/forum/6-datenbanken.html)
+--- Forum: MySQL (https://www.php-rocks.de/https://www.php-rocks.de/forum/7-mysql.html)
+--- Thema: Prozedur ignoriert scheinbar Parameter? (/https://www.php-rocks.de/thema/148-prozedur-ignoriert-scheinbar-parameter-.html)



Prozedur ignoriert scheinbar Parameter? - Arne Drews - 19.10.2017

Hallo,

Ich habe eine Prozedur, die ganz einfach nur Werte aus mehreren Tabellen entfernen soll:
Code:
CREATE PROCEDURE deleteBatch ( id INT )
BEGIN
   DELETE FROM `table1` where `id` = id;
   DELETE FROM `table2` where `id` = id;
   DELETE FROM `table3` where `id` = id;
   DELETE FROM `table4` where `id` = id;
END
Aufruf der Prozedur für id=5:
Code:
CALL deleteBatch( 5 )
Als Resultat dessen entfernt er mir aber grundsätzlich alle Datensätze in den Tabellen, ungeachtet der id, die ich explizit mitgebe.

Habe ich einen Denkfehler?
Danke


RE: Prozedur ignoriert scheinbar Parameter? - Arne Drews - 21.10.2017

Hallo, Problem gefunden.

Ich persönlich halte das zwar für einen Bug, aber wenn man es weiß, kann man damit umgehen.
Das grundsätzliche Problem war, dass ich auf die Tabellennamen verzichtet habe, die Procedure muss so aussehen:
Code:
CREATE PROCEDURE deleteBatch ( id INT )
BEGIN
   DELETE FROM `table1` where `table1`.`id` = id;
   DELETE FROM `table2` where `table2`.`id` = id;
   DELETE FROM `table3` where `table3`.`id` = id;
   DELETE FROM `table4` where `table4`.`id` = id;
END
Ob es evtl. auch damit zusammen hängen mag, dass der Spaltenname gleich dem Parameterbezeichner ist, habe ich jetzt nicht getestet.
Ich finde das Verhalten grundsätzlich nur falsch, so schlau sollte selbst MySQL sein, denn führe ich die DELETEs direkt aus, wird Zeile für Zeile korrekt abgearbeitet, auch ohne Tabellenangabe in der WHERE-Klausel.

Es hat also was mit den PROCEDUREs zu tun.

Jedenfalls läuft es jetzt.
Gruß Arne