Mehrere MySQL Befehle auf einmal per php an den Server senden

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 [at] a:= id from cust where ...
update income set curid = [at] 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 [at] 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
Stefan Kilp [ Mo, 24 April 2006 22:50 ] [ ID #1287474 ]

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

Stefan Kilp schrieb:

> select [at] a:= id from cust where ...
> update income set curid = [at] a ...

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

--
LG Sandro
Sandro Paetzold [ Di, 25 April 2006 02:09 ] [ ID #1289046 ]

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

..oO(Sandro Paetzold)

>Stefan Kilp schrieb:
>
>> select [at] a:= id from cust where ...
>> update income set curid = [at] a ...
>
>Hab weder Lösung noch Tipp, aber ich versteh nicht was
>das ' [at] 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
Michael Fesser [ Di, 25 April 2006 02:46 ] [ ID #1289047 ]

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

Michael Fesser schrieb:

> .oO(Sandro Paetzold)
>
> >Stefan Kilp schrieb:
> >
> >> select [at] a:= id from cust where ...
> >> update income set curid = [at] a ...
> >
> >Hab weder Lösung noch Tipp, aber ich versteh nicht was
> >das ' [at] 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
Sandro Paetzold [ Di, 25 April 2006 02:53 ] [ ID #1289048 ]

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

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 [at] a:= id from cust where ...
> update income set curid = [at] 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 [at] 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 [at] a:= id FROM cust WHERE x = 1");
|mysql_query("UPDATE income SET curid = [at] a");

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

--
LG Sandro
Sandro Paetzold [ Di, 25 April 2006 02:59 ] [ ID #1289049 ]

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

Stefan Kilp <stefan.kilp [at] gmx.net> wrote:
>
> ich möchte gerne mehrere Befehle auf einmal an den Server senden.
> Da die Befehle aufeinander Bezug nehmen:
>
> select [at] a:= id from cust where ...
> update income set curid = [at] 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 [at] a nicht mehr gesetzt.

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


XL
Axel Schwenke [ Di, 25 April 2006 00:53 ] [ ID #1289050 ]

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

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 [at] a:= id from cust where ...
> update income set curid = [at] 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 [at] 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.
Bodo Kaelberer [ Di, 25 April 2006 11:42 ] [ ID #1289053 ]

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

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 [at] a:= id from cust where ...
>> update income set curid = [at] 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 [at] 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?
>
>
Stephan Schulze [ Di, 25 April 2006 17:50 ] [ ID #1289057 ]

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

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 [at] a:= id from cust where ...
>>> update income set curid = [at] 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 [at] 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
Joerg Behrens [ Di, 25 April 2006 18:02 ] [ ID #1289058 ]

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

Joerg Behrens schrieb:

>>>> select [at] a:= id from cust where ...
>>>> update income set curid = [at] 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 [at] a:= id from cust where ...
update income set curid = [at] a ...

auf dasselbe raus wie

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

gruss, heli
Helmut Chang [ Di, 25 April 2006 22:29 ] [ ID #1289064 ]
PHP » de.comp.lang.php.datenbanken » Mehrere MySQL Befehle auf einmal per php an den Server senden

Vorheriges Thema: Recursive Funktion für unendliche Ebenen
Nächstes Thema: Frage nach einem Kalender in PHP