[Gelöst] db_query INSERT in foreach-schleife
am 17.09.2010 - 10:17 Uhr in
Moin,
ich bin grade dabei mein erstes Modul für Drupal zu basteln.
ich möchte gerne mehrere inserts mittels foreach in die datenbank schreiben, im moment wir leider immer nur einmal (erstes sql statement) in die DB geschrieben.
so erstelle ich das sql statement:
<?php
$inserts = array()
for($i=0; $i < $count; $i++) {
$sql = "INSERT INTO ccturn_data ( system_id, trans ) VALUES ( '".$data['system_id'][$i]."', '".$data['trans_amount'][$i]."' )";
array_push($inserts, $sql);
}
?>und mittels foreach versuche ich dann für alle 6 vorhandenen datensätze in die db zu schreiben:
<?php
foreach ($inserts as $item){
db_query($item);
echo $item, '<br />';
}
?>wobei das echo in der foreach schleife alle 6 statements korrekt ausgibt, es wir aber immer nur der erste auch wirklich in die db geschrieben.
hab ich da irgenwo einen denkfehler? oder ist das so garnicht möglich was ich da versuche?
- Anmelden oder Registrieren um Kommentare zu schreiben

Warum nicht einfach
am 17.09.2010 - 10:30 Uhr
Warum nicht einfach folgendermaßen:
<?phpfor($i=0; $i < $count; $i++) {
$sql = "INSERT INTO ccturn_data (system_id, trans) VALUES ('%s', '%s')";
db_query($sql, $data['system_id'][$i], $data['trans_amount'][$i]);
}
?>
Das macht natürlich Sinn
am 17.09.2010 - 10:39 Uhr
Das macht natürlich Sinn :)
Aber leider bleibt das Ergebniss mit der vereinfachten Variante das selbe. Es wir nur ein Eintrag in die DB gemacht.
<?php$count = 5;for($i=0; $i
am 17.09.2010 - 10:44 Uhr
<?php$count = 5;
for($i=0; $i < $count; $i++) {
$sql = "INSERT INTO ccturn_data (system_id, trans) VALUES ('%s', '%s')";
db_query($sql, $data['system_id'][$i], $data['trans_amount'][$i]);
}
?>
Ist die Variable $count auch gefüllt?
<?php echo $count; ?> = 6 wie
am 17.09.2010 - 10:49 Uhr
<?php
echo $count;
?>
=
6wie gesagt hatte meine erste und umständliche variante ja schon alle 6 sql querys vernünftig ausgegeben, und auch mit der optimierten variante geht das:
<?php
echo $sql, '<br />';
?>
=
INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')
INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')
INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')
INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')
INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('%s', '%s')
der hund scheint woandersbegraben zu sein...
Wenn deine Tabellen mit dem
am 17.09.2010 - 10:55 Uhr
Wenn deine Tabellen mit dem DB-Prefix versehen sind, probier mal folgendes:
<?php$count = 5;
for($i=0; $i < $count; $i++) {
$sql = "INSERT INTO {ccturn_data} (system_id, trans) VALUES ('%s', '%s')";
db_query($sql, $data['system_id'][$i], $data['trans_amount'][$i]);
}
?>
Ansonsten würde ich mir mal die Daten innerhalb der Schleife ausgeben lassen.
Schau auch mal in die Log-Einträge von Drupal ob dort etwas gelistet wird, vielleicht gibt das ja Aufschluss.
mh, auch mit der variante das
am 17.09.2010 - 11:11 Uhr
mh, auch mit der variante das selbe ergebniss. nur ein eintrag in der db:
<?php
for($i=0; $i < $count; $i++) {
echo 'ID:' . $data['system_id'][$i] . '<br />';
echo 'AMOUNT:' . $data['trans_amount'][$i] . '<br />';
$sql = "INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')";
echo 'SQL_QUERY:' . $sql . '<br />';
db_query($sql, $data['system_id'][$i], $data['trans_amount'][$i]);
}
?>
ID:1AMOUNT:5
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ID:2
AMOUNT:3
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ID:3
AMOUNT:0
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ID:4
AMOUNT:2
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ID:5
AMOUNT:0
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ID:6
AMOUNT:0
SQL_QUERY:INSERT INTO {ccturn_data} (system_id, trans_amount) VALUES ('%s', '%s')
ich hab zwar mal kurz gegooglet, aber ich bin mir nicht sicher: welche logfile meinst du, und wo finde ich die? hat drupal sowas wie eine eigene log?
wenn du das normal error_log des servers meinst, die zeigt keine fehler auf.
ok, hab logs gefunden :)
am 17.09.2010 - 11:16 Uhr
ok, hab logs gefunden :) sorry, bin anfänger.
• User warning: Duplicate entry '2010-09-17 12:12:03' for key 2 query: INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('1', '3') in _db_query() (line 146 of /home/web14/public_html/includes/database.mysqli.inc).• User warning: Duplicate entry '2010-09-17 12:12:03' for key 2 query: INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('2', '0') in _db_query() (line 146 of /home/web14/public_html/includes/database.mysqli.inc).
• User warning: Duplicate entry '2010-09-17 12:12:03' for key 2 query: INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('3', '2') in _db_query() (line 146 of /home/web14/public_html/includes/database.mysqli.inc).
• User warning: Duplicate entry '2010-09-17 12:12:03' for key 2 query: INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('4', '0') in _db_query() (line 146 of /home/web14/public_html/includes/database.mysqli.inc).
• User warning: Duplicate entry '2010-09-17 12:12:03' for key 2 query: INSERT INTO ccturn_data (system_id, trans_amount) VALUES ('5', '0') in _db_query() (line 146 of /home/web14/public_html/includes/database.mysqli.inc).
ok, das ist jetzt ein
am 17.09.2010 - 11:20 Uhr
ok, das ist jetzt ein bisschen peinlich... ich hatte in der DB eine letzte spalte "date" mit DEFAULT->TIMESTAMP und hab die auf UNIQE gesetzt. logisch das da nix funktionieren kann!!
sorry für die zeitverschwendung und danke für deine hilfe sense!
mfg N20
Irgendwo musste ja der Hase
am 17.09.2010 - 13:44 Uhr
Irgendwo musste ja der Hase im Pfeffer liegen ... ;)