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

  • 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 !

  • #2
    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.

    Kommentar


    • #3
      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.

      Kommentar


      • #4
        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.
        Gruss
        L

        Kommentar

        Lädt...
        X