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