Fehler in meinem PHP SQL Skript, was könnte die Ursache sein?
AskFabrice (Level 1) - Jetzt verbinden
16.09.2011, aktualisiert 18.10.2012, 3730 Aufrufe, 5 Kommentare
Ich möchte Daten aus einer XML Datei über PHP und SQL in eine MySQL Datenbank schreiben, Doch ich bekomme immer wieder einen Fehler.
Hallo Zusammen
Ich Habe eine Frage:
Was könnte der Fehler in diesem PHP/SQL Skript sein? Ich lese Daten aus einer XML Datei aus und möchte sie in eine MySQL Datenbank schreiben. Doch ich bekomme immer wieder folgenden Fehler:
Hier das Skript:
Wo könnte hier der Fehler liegen, Ich habe schon nach fehlenden, zusätzlichen values und Tabellenaufrufen gesucht bin mir aber nicht sicher ob ich alle gefunden habe.
Vielen Dank im Voraus
askFabrice
Ich Habe eine Frage:
Was könnte der Fehler in diesem PHP/SQL Skript sein? Ich lese Daten aus einer XML Datei aus und möchte sie in eine MySQL Datenbank schreiben. Doch ich bekomme immer wieder folgenden Fehler:
Column count doesn't match value count at row 1
include_once "_connect.php";
$connect=new connection();
$connect->connect("set names 'utf8'"); /*<<<<<<<<<<<<< WICHTIG*/
$filename = '..\M+A_XML_Files\messen_test.2.xml';
if(file_exists($filename)) {
$xml = simplexml_load_file($filename);
$c = 1;
if($xml) {
foreach($xml->messedatum as $datum) {
$statistik = $datum->statistik;
$connect->connect("INSERT INTO messedaten(muamesseid,messeid,kurzname,messetitel,messeort,bundesland,messeland,isoland,gelaende,gelaendeid,startdatum,enddatum,sortkey,anmeldeschluss,aufbau,abbau,debeteiligung,messetyp,gruendung,turnus,zulassung,geschlossen,sektoren,nettojahr,nettomonat,nettoinland,nettoausland,nettototal,nettosonder,nettoprueforg,nettotext,ausstellerjahr,ausstellermonat,ausstellerinland,ausstellerausland,ausstellertotal,ausstellerindirektinland,ausstellerindirektausland,ausstellerindirekttotal,ausstellerprueforg,ausstellertext,besucherjahr,besuchermonat,besucherinland,besucherausland,besuchertotal,fachbesucherinland,fachbesucherausland,fachbesuchertotal,besucherprueforg,besuchertext,ausstellerstruktur,besucherstruktur,messeverband,branchen,messeemail,messeurl,messeveranstalter)values(".mysql_real_escape_string($datum->muamesseid).",".mysql_real_escape_string($datum->messeid).",'".mysql_real_escape_string($datum->kurzname)."','".mysql_real_escape_string($datum->messetitel)."','".mysql_real_escape_string($datum->messeort)."','".mysql_real_escape_string($datum->bundesland)."','".mysql_real_escape_string($datum->messeland)."','".mysql_real_escape_string($datum->isoland)."','".mysql_real_escape_string($datum->gelaende)."','".mysql_real_escape_string($datum->gelaendeid)."','".mysql_real_escape_string($datum->startdatum)."','".mysql_real_escape_string($datum->endedatum)."','".mysql_real_escape_string($datum->sortkey)."','".mysql_real_escape_string($datum->anmeldeschluss)."','".mysql_real_escape_string($datum->aufbau)."','".mysql_real_escape_string($datum->abbau)."','".mysql_real_escape_string($datum->debeteiligung)."','".mysql_real_escape_string($datum->messetyp)."','".mysql_real_escape_string($datum->gruendung)."','".mysql_real_escape_string($datum->turnus)."','".mysql_real_escape_string($datum->zulassung)."','".mysql_real_escape_string($datum->geschlossen)."','".mysql_real_escape_string($datum->sektoren)."','".mysql_real_escape_string($statistik->nettojahr)."','".mysql_real_escape_string($statistik->nettomonat)."','".mysql_real_escape_string($statistik->nettoinland)."','".mysql_real_escape_string($statistik->nettoausland)."','".mysql_real_escape_string($statistik->nettototal)."','".mysql_real_escape_string($statistik->nettosonder)."','".mysql_real_escape_string($statistik->nettoprueforg)."','".mysql_real_escape_string($statistik->nettotext)."','".mysql_real_escape_string($statistik->ausstellerjahr)."','".mysql_real_escape_string($statistik->ausstellermonat)."','".mysql_real_escape_string($statistik->ausstellerinland)."','".mysql_real_escape_string($statistik->ausstellerausland)."','".mysql_real_escape_string($statistik->ausstellertotal)."','".mysql_real_escape_string($statistik->ausstellerindirektinland)."','".mysql_real_escape_string($statistik->ausstellerindirekttotal)."','".mysql_real_escape_string($statistik->ausstellerprueforg)."','".mysql_real_escape_string($statistik->ausstellertext)."','".mysql_real_escape_string($statistik->besucherjahr)."','".mysql_real_escape_string($statistik->besuchermonat)."','".mysql_real_escape_string($statistik->besucherinland)."','".mysql_real_escape_string($statistik->besucherausland)."','".mysql_real_escape_string($statistik->besuchertotal)."','".mysql_real_escape_string($statistik->fachbesucherinland)."','".mysql_real_escape_string($statistik->fachbesucherausland)."','".mysql_real_escape_string($statistik->fachbesuchertotal)."','".mysql_real_escape_string($statistik->besucherprueforg)."','".mysql_real_escape_string($statistik->besuchertext)."','".mysql_real_escape_string($statistik->ausstellerstruktur)."','".mysql_real_escape_string($statistik->besucherstruktur)."','".mysql_real_escape_string($datum->messeverband)."','".mysql_real_escape_string($datum->branchen)."','".mysql_real_escape_string($datum->messeemail)."','".mysql_real_escape_string($datum->messeurl)."','".mysql_real_escape_string($datum->mitveranstalter)."')");
}
} else {
echo 'Die Datei '. $filename .' konnte nicht geöffnet werden';
}
} else {
echo 'Die Datei '. $filename .' existiert nicht';
}
Vielen Dank im Voraus
askFabrice
5 Antworten
- LÖSUNG bytecounter schreibt am 16.09.2011 um 15:00:25 Uhr
- LÖSUNG mrtux schreibt am 16.09.2011 um 15:02:21 Uhr
- LÖSUNG Xaero1982 schreibt am 16.09.2011 um 15:09:09 Uhr
- LÖSUNG AskFabrice schreibt am 16.09.2011 um 15:28:56 Uhr
- LÖSUNG dog schreibt am 17.09.2011 um 00:40:28 Uhr
LÖSUNG 16.09.2011 um 15:00 Uhr
LÖSUNG 16.09.2011 um 15:02 Uhr
LÖSUNG 16.09.2011, aktualisiert 18.10.2012
Moin,
sorry, aber das hier:
ist doch wohl nen schlechter Witz oder?
Wer kam denn auf die Idee so eine kranke Tabelle anzulegen?
edit: Ich seh schon: Deine Idee! https://www.administrator.de/forum/falsche-ausgabe-von-umlauten-unter-my ...
Dann viel Spaß beim korrekten Anlegen von Tabellen etc. *schüttel*
Schon mal was von Normalisierung gehört?
@mrtux: Lieb gemeint, aber selbst MIT Code-Tags kann man hier nichts erkennen :D
Das:
geht auch eleganter ohne es vor jeden Wert zu knallen.
Ansonsten wurde ja schon alles in der Fehlermeldung und von Bytecounter gesagt:
Spaltenanzahl!=Übergabewerte
VG
sorry, aber das hier:
messedaten(muamesseid,messeid,kurzname,messetitel,messeort,bundesland,messeland,isoland,gelaende,gelaendeid,startdatum,enddatum,sortkey,anmeldeschluss,aufbau,abbau,debeteiligung,messetyp,gruendung,turnus,zulassung,geschlossen,sektoren,nettojahr,nettomonat,nettoinland,nettoausland,nettototal,nettosonder,nettoprueforg,nettotext,ausstellerjahr,ausstellermonat,ausstellerinland,ausstellerausland,ausstellertotal,ausstellerindirektinland,ausstellerindirektausland,ausstellerindirekttotal,ausstellerprueforg,ausstellertext,besucherjahr,besuchermonat,besucherinland,besucherausland,besuchertotal,fachbesucherinland,fachbesucherausland,fachbesuchertotal,besucherprueforg,besuchertext,ausstellerstruktur,besucherstruktur,messeverband,branchen,messeemail,messeurl,messeveranstalter)
Wer kam denn auf die Idee so eine kranke Tabelle anzulegen?
edit: Ich seh schon: Deine Idee! https://www.administrator.de/forum/falsche-ausgabe-von-umlauten-unter-my ...
Dann viel Spaß beim korrekten Anlegen von Tabellen etc. *schüttel*
Schon mal was von Normalisierung gehört?
@mrtux: Lieb gemeint, aber selbst MIT Code-Tags kann man hier nichts erkennen :D
Das:
mysql_real_escape_string
geht auch eleganter ohne es vor jeden Wert zu knallen.
Ansonsten wurde ja schon alles in der Fehlermeldung und von Bytecounter gesagt:
Spaltenanzahl!=Übergabewerte
VG
LÖSUNG 16.09.2011 um 15:28 Uhr
Hallo Zusammen
@bytecounter: Ok werde dann wohl noch ein paar mal über meinen Code gehen müssen.
@xaero: Wie geht das eleganter? bin nicht besonders gut mit PHP. Normalisierung kenne ich doch das ist leider nicht meine DB, sie wurde mir von der Firma welche die Daten liefert so vorgegeben -.-
Habe den Code nun in Code Tags reingetan.
Grüsse askFabrice
@bytecounter: Ok werde dann wohl noch ein paar mal über meinen Code gehen müssen.
@xaero: Wie geht das eleganter? bin nicht besonders gut mit PHP. Normalisierung kenne ich doch das ist leider nicht meine DB, sie wurde mir von der Firma welche die Daten liefert so vorgegeben -.-
Habe den Code nun in Code Tags reingetan.
Grüsse askFabrice
LÖSUNG 17.09.2011 um 00:40 Uhr
$connect->connect("set names 'utf8'"); /*<<<<<<<<<<<<< WICHTIG*/
Möp, falsch!
In der PHP-Dokumentation wird explizit darauf hingewiesen, dass man genau das nicht machen darf!
Zu dem Query muss man ja nichts mehr sagen.
Sowas kann man übrigens auch dynamisch bauen.
<?php
$keys = array('a','b','c');
$vals = array();
foreach($keys as $key) {
$vals[] = '"'.mysql_real_escape_string($keys->$key).'"';
}
$query = sprintf('INSERT INTO tbl(%s) VALUES(%s)',implode(', ',$keys),implode(', ',$vals));
?>