PostgresArray mit zusätzlichem versteckten Zeichen

Hallo,

ich habe folgendes Problem:

Ich will ein XML in die Datenbank konvertieren.
Später will ich bei einem weiteren Einlesen testen, ob die vorhandenen Daten gleich sind, oder ob die Tabelle aktualisiert werden muss.
Dafür hole ich mir die Werte aus der Tabelle und speicher sie in einem Array.
Das Array wandel in nun in einen String um.
Nun zum Problem: Ich habe 2 scheinbar gleiche Strings, da die Daten sich nciht verändert haben. Jedoch erkennt meine Abfrage einen Unterschied, da mir meine Funktion beim Auslesen aus der Datenbank ein “Leerzeichen” einfügt. Das Leerzeichen ist jedoch kein Leerzeichen, wie man bei meiner funktion str_replace dann feststellen kann.
Was könnte es also sein?? Für Hinweise zur Lösung bin ich mehr als dankbar!!

Hier mein Quellcode :
[php]
//Sucht nach Attributen
$result = $xs->xpath($string);


//Formatierte Ausgabe des Ergebnis-Arrays
//echo “

”;
//print_r ($result);
//echo “
”;

//Array wird in kommaseparierten String umgewandelt
$result_string = join(’,’, $result);
echo "Result: “.($result_string).”
";


//Speichert Datenbankeinträge in einem Array
$rows = pg_copy_to($conn, $table_name);
echo “

”;
print_r ($rows);
echo “
”;

//Array wird in kommaseparierten String umgewandelt
$rows_string = join(’,’, $rows);
echo "Rows: “.($rows_string).”
";
$rows_string = str_replace(’ ‘,’*’,$rows_string);
echo "Rows2: “.($rows_string).”
";
//$rows_string=“188743731,188743734,188743737”;
//$comp=strcmp($result_string, $rows_string);
//echo ($comp);

$loeschen= “DELETE FROM $table_name”;

//Überprüft, ob Datenbank mit Importdatei identisch ist
IF ($result_string == $rows_string){
ECHO "Identische Einträge schon vorhanden.
";
}
ELSE { //Wenn Daten nicht identisch sind
//Die Einträge der Datenbank werden gelöscht
$vals = pg_query($loeschen);
IF ($vals) {
ECHO "POST-Daten wurden gelöscht!
";
}
ELSE {
ECHO "Aufruf erfolgte mit falschen Angaben
";
}
//Datenbank wird aktualisiert
$vals = pg_copy_from($conn, $table_name, $result);
ECHO "Die Einträge der Tabelle “.$table_name.” wurden aktualisiert!
";
}
[/php]und meine Ausgaben:

Result: 188743731,188743734,188743737
Array
(
    [0] => 188743731

    [1] => 188743734

    [2] => 188743737

)
Rows: 188743731 ,188743734 ,188743737 
Rows2: 188743731 ,188743734 ,188743737 
POST-Daten wurden gelöscht!
Die Einträge der Tabelle [B][I]extendedattribute[/I][/B] wurden aktualisiert!

Im Voraus schon mal vielen Dank!

Btw, um ein Array in einen String zu wandeln, braucht man kein PHP.

array_to_string() wurde bereits erfunden.

Andreas

Evtl. hilft ein trim() weiter.

Lass Dir doch den/die Strings im HEX-Format ausgeben. Anhand des Codes kann man dann feststellen, welche unterschiedliche Zeichen da vorhanden sind!





mfg

fristo

du speicherst in einem genau 32 byte breitem character feld einen MD5-hash der daten - die du spaeter auf gleichheit pruefen willst …

du kannst diesen MD5-hash entweder von der DB erzeugen lassen - wenn du die daten selbst in einer anderen spalte sowieso speicherst (via trigger) oder einfach selbst ausserhalb der DB berechnen und da ablegen


spaeter beim “wiederholten” einlesen erzeugst du von den aktuellen daten auch diesen MD5-hash und vgl. ihn mit dem in der DB …

sind beide gleich, dann sind (in der praxis - bloss keine theoretiker fragen) die vorherigen daten mit den “aktuellen” daten identisch - voilá

wenn du dem MD5 allein nicht vertrauen willst, kannst du ja auch noch die groesse der daten oder stichproben aus den daten vergleichen - was aber i.d.R. überflüssig ist

dein leerzeichen-ist-kein-leerzeichen problem wird das aber nicht loesen …

ich wuerde da aber nichts machen -> shit in shit out … eine frickel-loesung waere mit regexp die strings normalisieren … alles was z.B. keine wort-zeichen oder zahlen und erlaubte andere zeichen sind einfach entfernen … und den hash ueber den rest erzeugen …

aber davon moecht ich abraten - da halst man sich verantwortung auf die dir niemand dankt - schau lieber wer des zeichen produziert

Hallo,

vielen Dank für die vielen Tipps.
Die einfachste Möglichkeit war meines Erachtens die Lösung über die array_to_string - Abfrage, da kamen nämlich dann keine “komischen” Leerzeichen mit rein. Mit php pg_fetch_arry kann man dann den String aus dem Array herausholen.
Anschließend lassen sich dann beide Strings einfach miteinander vergleichen!

Grüße