Ankündigung

Einklappen
Keine Ankündigung bisher.

csv-datei in mysql schreiben klappt nur teilweise, wieso ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Gast-Avatar
    Ein Gast erstellte das Thema csv-datei in mysql schreiben klappt nur teilweise, wieso ?.

    csv-datei in mysql schreiben klappt nur teilweise, wieso ?

    Hallöschen

    , ich wollte mal fragen, ob mir jemand sagen kann, warum die dieses script beim schreiben in die DB, nur den ersten datensatz einfügt, die restlichen aber nicht !?

    PHP-Code:
    <?php
    $dateiname
    ="admin/language_files/language_uk_1.csv";
    $datei=fopen($dateiname,"r");
    $daten=fread($datei,filesize($dateiname));
    fclose($datei);
    $datensaetze=explode("\n",$daten);


    for(
    $i=0;$i<sizeof($datensaetze);$i++)
      {
        
    $datenfeld[$i]=explode("-%-",$datensaetze[$i]); # trennt spaltenwerte
        
    mysql_query("INSERT INTO uk (id, text_id, name, info, active) VALUES('".$datenfeld[$i][0]."','".$datenfeld[$i][1]."','".$datenfeld[$i][2]."','".$datenfeld[$i][3]."','".$datenfeld[$i][4]."')");
      }

    mysql_close();

    ?>
    für hilfe wäre ich dankbar !

  • lazydog
    antwortet
    Ich kann dir nicht sagen, woran es liegt, wahrscheinlich am ersten explode() (ist '\n' tatsächlich der Zeilenbegrenzer?). Aber wenn du die entsprechenden PHP-Funktionen einsetztst, ist das nicht mehr von Belang. Hier ein anderer Ansatz, der auch die Bemerkung von axo berücksichtigt:
    PHP-Code:
    <?php
    $dateiname 
    "admin/language_files/language_uk_1.csv";
    $datensaetze file($dateiname);

    value_string = array();
    foreach(
    $datensaetze as datensatz)
    {
        
    $datenfeld explode("-%-"$datensatz);          # trennt spaltenwerte
        
    $value_sting[] = "('" implode("', '"$datenfeld) . "')";
    // oder noch einfacher:
    //    $value_sting[] = "('" . str_replace("-%-", "', '", $datensatz)) . "')";
    }
    $sql "INSERT INTO uk (id, text_id, name, info, active)
               VALUES " 
    implode(', '$value_string);
    mysql_query($sql) or die("Fehler: " mysql_eror() . "
    Query: 
    $sql
    "
    );        
    ?>
    Ansonsten schau auch mal http://de3.php.net/manual/de/function.fgetcsv.php an.

    Einen Kommentar schreiben:


  • greg
    antwortet
    Probiers mal bitte mit dieser Funktion:
    PHP-Code:
    <?php
        
    /**
        * Debugs a mysql query
        *
        * @param  string    mysql-query
        * @return string
        * @access public
        */
        
    function debug_query($query
        {
            
    $result mysql_query($query);
            
    $error $result == false mysql_error() : '';
            echo 
    '

    <pre>' 
    htmlspecialchars($query) . '</pre></p>

    $error '</p>';
            
            return 
    $result;
        }

    ?>
    Ach und folgendes:
    PHP-Code:
    <?php
    for($i=0;$i<sizeof($datensaetze);$i++)
      { 
    ?>
    Ist sehr unsch�n geschrieben.
    Machs doch lieber so:
    PHP-Code:
    <?php
    $size 
    sizeof($datensaetze);
    for(
    $i=0$i $size$i++)
      { 

    ?>
    Ansonsten wird die Funktion sizeof() bei jedem Durchlauf der Schleife erneut aufgerufen, was etwa. doppelt so lange dauert, als w�rdest du die Daten vorher in einer Variablen ablegen.

    Einen Kommentar schreiben:


  • axo
    antwortet
    http://www.php.net/fgetcsv

    und um mehrere zeilen performant in die db zu packen:

    Code:
    INSERT INTO foo(bar,baz)
    VALUES 
    (a,b),
    (c,d),
    (e,f),
    (g,h)
    ... und um debugging betreiben zu können, soltest du mindestens die ersten paar zeilen der csv-datei mitschicken.

    EDIT:
    ... und lass dir vorher mal den produzierten SQL-string und danach
    mysql_error() ausgeben, damit du sehen kannst, was fehlschlägt.

    Einen Kommentar schreiben:

Lädt...
X