Andreas Korthaus: /PHP: Problem mit dynamischer SQL-Abfrage

Beitrag lesen

Hallo!

Ich versuche einen eigenen Dump zu erzeugen, ich kann keinen Standard-nehmen da ich zm einen nicht alle Datensätze benötige, des weiteren nicht alle Felder. Da ich das für einige Tabellen machen muß habe ich das ganez in einige Funktionen gepackt. Dabei habe ich jetzt 2 Probleme:

1. Warum werden Umbüche in Textfeldern nicht als \n angezeigt sondern im Browser und auch im Quelltext "ausgeführt" - trotz addslashes()?!

2. Das etwas schwierigere Problem, welches ich nicht so ganz verstehe: Es fehlt immer der 1. und letzte Datensatz bei der $insert_query asl INSERT-Statement, dafür ist der letzte Datensatz danach in der $update_query als UPDATE-Statement, obwohl hier ebenfalls alle Datensätze als Update stehen müßten?!

Mal mal das Script mit den beiden wichtigen Funktionen, die anderen liefern korrekte Werte:

<?php

$link=@mysql_pconnect($host,$usr,$pw);
mysql_select_db($db,$link);

function query($sql){
    global $link;
    $result = mysql_query($sql,$link);
    return $result;
}

function get_table_data($table){
    global $from_col_name;
    $primary_key_col_name = get_primary_key_col_name($table);
    $timestamp_col_name = get_timestamp_col_name($table);

$insert_query = "INSERT INTO ".$table." (".get_cols($table).") VALUES";

$result = query("SELECT ".get_cols($table)." FROM ".$table);
    while($row=mysql_fetch_assoc($result)){
        $insert_query .= "\n(";
        foreach ($row as $value){
            $insert_query .= "'".addslashes($value)."',";
        }
        $insert_query = substr($insert_query,0,-1);
        $insert_query .= "),";
    }
    $insert_query = substr($insert_query,0,-1).";";

$result = query("SELECT ".$primary_key_col_name.",".get_cols($table)." FROM ".$table);
    while($row=mysql_fetch_assoc($result)){
        $update_query = "\nUPDATE ".$table." SET ";
        foreach ($row as $key => $value){
            if ($key != $primary_key_col_name){
                $update_query .= $key."='".addslashes($value)."',";
            }
        }
        $update_query = substr($update_query,0,-1);
        $update_query .= " WHERE ".$primary_key_col_name." = '".$row[$primary_key_col_name]."';";
    }
    return "\n".$insert_query."\n\n".$update_query."\n";
}

print_r(get_table_data("s_objekte"));

?>

Ich hab einiges weggelassen, aber es stehen schon alle Daten zur Verfügung. Aus irgendeinem Grund wird die Tabelle "s_objekte" nur einmal abgefragt, der erste Datensatz verschluckt, alle bis auf den letzten als insert in $insert_query geschrieben, und der letzte als Update-Statement in $update_query. Verwende ich denn die Funktionen irgendwie falsch? Irgendwas stimmt da nicht! Das ganze ist eigentlich viel komplizierter, aber ich habe es so weit wie möglich vereinfacht, bin dem Problem aber nicht näher gekommen. Hat jemand ne Idee?

Viele Grüße
Andreas

PS: Wenn ich den Update Teil weglasse, fehlt halt dieser in der Ausgabe, es bleibt dabei das beim Insert Teil der erste und letzte Datensatz fehlen