mehrere INSERTS

mehrere INSERTS

am 17.01.2005 12:17:25 von Mark Knochen

Hallo,

ich generiere per Schleife mehrere INSERTs in einen
String:

....

$sql .= "INSERT INTO ..... ;"

.....

Wenn ich nun diesen String mit den mehreren INSERTs verarbeiten
möchte,

$result = mysql_query($sql);

dann wird keiner davon ausgeführt.

Lasse ich mir aber den String per echo() ausgeben und kopiere den
String testweise nach phpMyAdmin, dann werden alle im String befindlichen
INSERTs ausgeführt ...

Weiss jemand, woran das liegt?

Danke

Mark

Re: mehrere INSERTS

am 17.01.2005 12:41:23 von Niels Braczek

Mark Knochen schrieb:

> Lasse ich mir aber den String per echo() ausgeben und kopiere den
> String testweise nach phpMyAdmin, dann werden alle im String
> befindlichen INSERTs ausgeführt ...
>
> Weiss jemand, woran das liegt?

Ja, die FAQ.
16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
ausführen?
http://www.php-faq.de/q/q-sql-statements.html

MfG
Niels

--
Microsoft is not the answer - Microsoft is the question.
The answer is NO! [Anonym]

Re: mehrere INSERTS

am 17.01.2005 13:01:12 von Mark Knochen

> Ja, die FAQ.
> 16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
> ausführen?
> http://www.php-faq.de/q/q-sql-statements.html
>


Respekt, ich hatte die Frage für so ziemlich absurd gehalten, dass ich
die FAQ nicht damit behelligen wollte ....

Mark

Re: mehrere INSERTS

am 17.01.2005 14:22:09 von Michael Fesser

.oO(Mark Knochen)

>> Ja, die FAQ.
>> 16.2. Wieso kann ich mehrere, durch Semikolon getrennte Statements nicht
>> ausführen?
>> http://www.php-faq.de/q/q-sql-statements.html
>>
>
>Respekt, ich hatte die Frage für so ziemlich absurd gehalten, dass ich
>die FAQ nicht damit behelligen wollte ....

Falls es sich um mehrere gleichartige INSERTs in dieselbe Tabelle
handeln sollte -- das läßt sich auch mit einem einzigen INSERT
erledigen.

Micha

Re: mehrere INSERTS

am 17.01.2005 15:47:38 von Christoph Hermann

Michael Fesser schrieb:

Moin,

> Falls es sich um mehrere gleichartige INSERTs in dieselbe Tabelle
> handeln sollte -- das läßt sich auch mit einem einzigen INSERT
> erledigen.

Nur wenn das DBMS das unterstützt. Ich nehme an du meinst diese seltsame
erweiterete Insert-Notation ;-)

Christoph

Re: mehrere INSERTS

am 17.01.2005 16:04:37 von Hartmut Holzgraefe

Christoph Hermann wrote:
> Nur wenn das DBMS das unterstützt. Ich nehme an du meinst diese selts=
ame
> erweiterete Insert-Notation ;-)

In diesem Fall ist des die gleiche die mehrere durch ';' in einem
einzelnen API-Aufruf nicht unterstützt (was als netten Nebeneffekt
die meisten Injection-Angriffsmöglichkeiten ausschließt auch wenn
ich nicht behaupten kann daß das das urspr. Designziel war ;),
sollte also OK sein.

Das Multi-Valuelist Insert hat dabei den Vorteil das das Statement
als ganzes optimiert werden kann, z.B. bei der Indexaktualisierung.

Falls aber Portabilität gefordert ist oder auch nur als zukünftige
Forderung absehbar ist scheidet die Verwendung natürlich aus.

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

Are you MySQL certified? www.mysql.com/certification

Re: mehrere INSERTS

am 17.01.2005 19:44:12 von Stephan Mann

On 2005-01-17 12:17:25, Mark Knochen wrote:
> ich generiere per Schleife mehrere INSERTs in einen
> String:
>
> $sql .= "INSERT INTO ..... ;"
> [..]
> $result = mysql_query($sql);
>
> dann wird keiner davon ausgeführt.

Warum das so ist wurde ja bereits geklaert. Ein Tipp: PEAR::DB kann
Prepared Statements. Ich habe es nicht gebenchmarkt[tm], aber es duerfte
schneller sein. IMHO ist es auf jeden Fall einfach und sehr lesbar.

Pseudo-Code aus dem Gedaechtnis:

$prepSQL = $db->prepare("INSERT INTO table VALUES(?, ?, ?)");

for (..) {
$prepSQL->execute("foo", "bar", 66);
}

Oder so aehnlich...

gruss, stephan
--
Der Terrorismus ist ein Krieg der Armen gegen die Reichen.
Der Krieg ist ein Terrorismus der Reichen gegen die Armen.
[Sir Peter Ustinov, 1921 - 2004]

Re: mehrere INSERTS

am 17.01.2005 21:30:32 von Thomas Hamacher

Stephan Mann schrieb:
> On 2005-01-17 12:17:25, Mark Knochen wrote:

>> $sql .= "INSERT INTO ..... ;"

> Warum das so ist wurde ja bereits geklaert. Ein Tipp: PEAR::DB kann
> Prepared Statements. Ich habe es nicht gebenchmarkt[tm], aber es
> duerfte schneller sein.

Solange das DBMS die prepared Statements nicht versteht ist das nicht
schneller, weil der Mechanismus AFAIS von PEAR::DB emuliert wird.

> IMHO ist es auf jeden Fall einfach und sehr lesbar.

ACK!

> $prepSQL = $db->prepare("INSERT INTO table VALUES(?, ?, ?)");

> for (..) {
> $prepSQL->execute("foo", "bar", 66);

$db->execute($prepSQL, array("foo", "bar", 66));

> }

Re: mehrere INSERTS

am 18.01.2005 06:59:45 von Stephan Mann

On 2005-01-17 21:30:32, Thomas Hamacher wrote:
> Stephan Mann schrieb:
>> PEAR::DB kann Prepared Statements. Ich habe es nicht gebenchmarkt[tm],
>> aber es duerfte schneller sein.
>
> Solange das DBMS die prepared Statements nicht versteht ist das nicht
> schneller, weil der Mechanismus AFAIS von PEAR::DB emuliert wird.

MySQL *kann* das [0]. Nur hast du leider recht - PEAR::DB scheint diese
Funktion nicht zu nutzen. Und auch in PEAR::MDB habe ich es nicht finden
koennen. Entweder es gibt ein generelles Problem bei der Umsetzung oder
4.1 ist einfach zu neu.

gruss, stephan


[0] http://dev.mysql.com/doc/mysql/en/SQLPS.html