Mehrere MySQL Befehle auf einmal per php an den Server senden

Mehrere MySQL Befehle auf einmal per php an den Server senden

am 24.04.2006 22:50:50 von Stefan Kilp

Hi,

(ich habe es gerade in d.c.l.p.misc versucht, vielleicht bin ich hier
besser aufgehoben)

ich möchte gerne mehrere Befehle auf einmal an den Server senden.
Da die Befehle aufeinander Bezug nehmen:

select @a:= id from cust where ...
update income set curid = @a ...

kann ich sie nicht einzeln senden. Ein Versuch sie mit ; getrennt zu
schicken klappt auch nicht. Wenn ich die Befehle getrennt sende ist in
der zweiten Anweisung @a nicht mehr gesetzt.

Der Befehl delimiter hat mir auch nicht richtig geholfen.


ich kann jetzt zwar das ganze versuchen umzuschreiben, indem ich die
Daten jeweils auslese und dann ein Update zu generieren. Aber irgendwie
muß es doch auch direkt gehen.

Hat jemand einen Tipp für mich?

thanks
stefan

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 00:53:20 von Axel Schwenke

Stefan Kilp wrote:
>
> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
> Da die Befehle aufeinander Bezug nehmen:
>
> select @a:= id from cust where ...
> update income set curid = @a ...
>
> kann ich sie nicht einzeln senden.

Das *kannst* du schon. Du darfst nur die MySQL-Verbindung zwischen den
Statements nicht schließen bzw. mußt überhaupt jeweils die gleiche
Verbindung benutzen.

> Ein Versuch sie mit ; getrennt zu schicken klappt auch nicht.

Das *könnte* ab MySQL 4.1.x funktionieren, wenn das Feature denn
aktiviert ist. Das Prinzip ist hier erklärt:

http://dev.mysql.com/doc/refman/5.0/en/c-api-multiple-querie s.html

Allerdings ist dieses Feature gerade im Bereich PHP/Webapplikationen
eher nicht empfehlenswert, weil es die Möglichkeiten eines Angreifers
Schaden durch SQL-Injection anzurichten, drastisch verbessert.

> Wenn ich die Befehle getrennt sende ist in
> der zweiten Anweisung @a nicht mehr gesetzt.

Dann machst du was falsch. Streich deinen Code auf ein Minimalbeispiel
zusammen und poste das hier.


XL

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 02:09:12 von Sandro Paetzold

Stefan Kilp schrieb:

> select @a:= id from cust where ...
> update income set curid = @a ...

Hab weder Lösung noch Tipp, aber ich versteh nicht was
das '@a:=' bedeuten soll, Google spuckt dazu auch nichts aus...
Und man möchte ja mitlernen ;)

--
LG Sandro

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 02:46:58 von Michael Fesser

..oO(Sandro Paetzold)

>Stefan Kilp schrieb:
>
>> select @a:= id from cust where ...
>> update income set curid = @a ...
>
>Hab weder Lösung noch Tipp, aber ich versteh nicht was
>das '@a:=' bedeuten soll, Google spuckt dazu auch nichts aus...

Das MySQL-Handbuch aber schon - es ist eine Variable.

9.3. User-Defined Variables
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

Allerdings kann ich das Problem des OP nicht nachvollziehen. Variablen
bleiben auch über mehrere Befehle hinweg erhalten, was ja Sinn der Sache
ist.

Micha

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 02:53:40 von Sandro Paetzold

Michael Fesser schrieb:

> .oO(Sandro Paetzold)
>
> >Stefan Kilp schrieb:
> >
> >> select @a:= id from cust where ...
> >> update income set curid = @a ...
> >
> >Hab weder Lösung noch Tipp, aber ich versteh nicht was
> >das '@a:=' bedeuten soll, Google spuckt dazu auch nichts aus...
>
> Das MySQL-Handbuch aber schon - es ist eine Variable.
>
> 9.3. User-Defined Variables
> http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
>
> Allerdings kann ich das Problem des OP nicht nachvollziehen.
> Variablen bleiben auch über mehrere Befehle hinweg erhalten, was ja
> Sinn der Sache ist.

Vielen Dank!
--
LG Sandro

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 02:59:41 von Sandro Paetzold

Stefan Kilp schrieb:

> Hi,
>
> (ich habe es gerade in d.c.l.p.misc versucht, vielleicht bin ich hier
> besser aufgehoben)
>
> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
Geht nicht!

> select @a:= id from cust where ...
> update income set curid = @a ...
>
> kann ich sie nicht einzeln senden. Ein Versuch sie mit ; getrennt zu
> schicken klappt auch nicht. Wenn ich die Befehle getrennt sende ist
> in der zweiten Anweisung @a nicht mehr gesetzt.

Was funktioniert denn nicht?
Gibt das Script ne Fehlermeldung oder etwas anderes aus?

Ich hab das ganze mal bei mir nachgestellt:

|mysql_query("SELECT @a:= id FROM cust WHERE x = 1");
|mysql_query("UPDATE income SET curid = @a");

So in etwa müsste es bei Dir auch aussehen?!
Ich hab kein Problem gefunden! Funktioniert!

--
LG Sandro

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 11:42:50 von Bodo Kaelberer

Hi Stefan

Stefan Kilp am Mon, 24 Apr 2006 22:50:50 +0200:

> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
> Da die Befehle aufeinander Bezug nehmen:
>
> select @a:= id from cust where ...
> update income set curid = @a ...
>
> kann ich sie nicht einzeln senden. Ein Versuch sie mit ; getrennt zu
> schicken klappt auch nicht. Wenn ich die Befehle getrennt sende ist in
> der zweiten Anweisung @a nicht mehr gesetzt.
>
> Der Befehl delimiter hat mir auch nicht richtig geholfen.

Ich weiss nicht, ob es technisch möglich ist. Es erscheint mir auf
jeden Fall nicht unbedingt sinnvoll, da die Fehlerbehandlung/Meldung
ja auch auf Statements-Ebene stattfindet.

Mögliche Alternative: Kann man in einem Update ein Subselect
verwenden?


--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem Verständnis ist meist gut getan, wenn man richtig lesen
4 kann.

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 17:50:25 von Stephan Schulze

Das hängt meines Wissens von der mySQL Version ab. Ab Version 4 sollte
das aber gehen...

Gruß Stephan

Bodo Kaelberer schrieb:
> Hi Stefan
>
> Stefan Kilp am Mon, 24 Apr 2006 22:50:50 +0200:
>
>> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
>> Da die Befehle aufeinander Bezug nehmen:
>>
>> select @a:= id from cust where ...
>> update income set curid = @a ...
>>
>> kann ich sie nicht einzeln senden. Ein Versuch sie mit ; getrennt zu
>> schicken klappt auch nicht. Wenn ich die Befehle getrennt sende ist in
>> der zweiten Anweisung @a nicht mehr gesetzt.
>>
>> Der Befehl delimiter hat mir auch nicht richtig geholfen.
>
> Ich weiss nicht, ob es technisch möglich ist. Es erscheint mir auf
> jeden Fall nicht unbedingt sinnvoll, da die Fehlerbehandlung/Meldung
> ja auch auf Statements-Ebene stattfindet.
>
> Mögliche Alternative: Kann man in einem Update ein Subselect
> verwenden?
>
>

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 18:02:55 von Joerg Behrens

Stephan Schulze schrieb:
> Das hängt meines Wissens von der mySQL Version ab. Ab Version 4 sollte
> das aber gehen...
>
> Gruß Stephan
>
> Bodo Kaelberer schrieb:
>> Hi Stefan
>>
>> Stefan Kilp am Mon, 24 Apr 2006 22:50:50 +0200:
>>
>>> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
>>> Da die Befehle aufeinander Bezug nehmen:
>>>
>>> select @a:= id from cust where ...
>>> update income set curid = @a ...
>>>
>>> kann ich sie nicht einzeln senden. Ein Versuch sie mit ; getrennt zu
>>> schicken klappt auch nicht. Wenn ich die Befehle getrennt sende ist
>>> in der zweiten Anweisung @a nicht mehr gesetzt.
>>>
>>> Der Befehl delimiter hat mir auch nicht richtig geholfen.
>>
>> Ich weiss nicht, ob es technisch möglich ist. Es erscheint mir auf
>> jeden Fall nicht unbedingt sinnvoll, da die Fehlerbehandlung/Meldung
>> ja auch auf Statements-Ebene stattfindet.
>>
>> Mögliche Alternative: Kann man in einem Update ein Subselect
>> verwenden?
>>
>>

Die ext/mysql in PHP unterstuetzt generell keine Multi-Statements aus
Sicherheitsgruenden. Das mag anders sein fuer die ext/mysql(i)
Erweiterung. Weil ich erinnere mich noch an die Diskussionen ob das
damit moeglich sein soll oder nicht. Raus gekommen ist dann spaeter
mysqli_multi_query().

Aber der OP hatte doch eigentlich nach was anderem gefragt oder nicht?

Gruss
Joerg


--
TakeNet GmbH Mobil: 0171/60 57 963
D-97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025

Re: Mehrere MySQL Befehle auf einmal per php an den Server senden

am 25.04.2006 22:29:09 von Helmut Chang

Joerg Behrens schrieb:

>>>> select @a:= id from cust where ...
>>>> update income set curid = @a ...
....
>>> Mögliche Alternative: Kann man in einem Update ein Subselect
>>> verwenden?
....
> Aber der OP hatte doch eigentlich nach was anderem gefragt oder nicht?

Inwiefern? IMO kommt

select @a:= id from cust where ...
update income set curid = @a ...

auf dasselbe raus wie

UPDATE income SET curid=(SELECT id FROM cust WHERE...)...

gruss, heli