2011-11-09 4 views
0

voici le code:Comment insérer des données supplémentaires dans MySQL en utilisant imploser

if (($handle = fopen($source_file, "r")) !== FALSE) { 
    $columns = fgetcsv($handle, $max_line_length, ","); 
    foreach ($columns as &$column) { 
     $column = str_replace(".","",$column); 
    } 
    while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) { 
     while(count($data) < count($columns)) { 
      array_push($data, NULL); 
     } 
     $c = count($data); 
     for($i = 0; $i < $c; $i++) { 
      $data[$i] = "'{$data[$i]}'"; 
     } 

     $sql[] = '(' . implode(',',$data) . ','.$_POST[group].')'; 
    } 
      $sql = implode(',',$sql); 

    $query = "INSERT INTO mytable (".mysql_real_escape_string(implode(",",$columns)).",Custgroup,user_id) VALUES " 
         . $sql . "\n"; 
    mysql_query($query) or trigger_error(mysql_error()); 

    fclose($handle); 
     } 
    } 

Si mon fichier csv est:

nom, prénom, sexe

bob, ah, mâle

Alors maintenant la requête sera: INSERT INTO mytable (lastname,firstname,gender) VALUES ('bob','ah','male'). Mais comment faire si je veux insérer des données supplémentaires dans mysql avec les données dans le fichier csv? Tel que j'ai une valeur $ _POST [ 'groupe'] = 'famille' et $ _POST [ 'user_id'] = '10', alors j'ai essayé:

$sql[] = '(' . implode(',',$data) . ','.$_POST[group].','.$_POST[user_id].')'; 

$query = "INSERT INTO $target_table (".mysql_real_escape_string(implode(",",$columns)).",custgroup,user_id) VALUES " 
         . implode(',',$sql) . "\n"; 

Mais dans la requête, il deviendra: INSERT INTO mytable (lastname,firstname,gender,custgroup,user_id) VALUES ('bob','ah','male',family,10). Il n'a pas eu de guillemets simples, donc j'ai une erreur pour insérer l'enregistrement.Puis-je savoir comment résoudre ce problème?

+0

quel est le point de faire mysql_real_escape_string (implode (',', $ columns))? –

Répondre

1

essayez ceci:

$sql[] = '(' . implode(',', $data) . ", '" . $_POST['group'] . "'," . $_POST['user_id'] . ')'; 

$query = "INSERT INTO $target_table (" . mysql_real_escape_string(implode(',', $columns)) . ',custgroup,user_id) VALUES ' . implode(',', $sql); 
+0

Merci beaucoup.Maintenant la requête est: INSERT INTO UserAddedRecord (nom de famille, prénom, cellule, custgroup, user_id) VALEURS ('Last', 'First', '042819679', 'Family', 1) –

+1

quel est le point dans faire mysql_real_escape_string (implode (',', $ columns)) '? –

+0

@ Col.Shrapnel Désolé, c'est une erreur que j'ai oublié d'éditer ... –

0

pour un souci de lisibilité, vous pouvez considérer les points suivants:

$sql = sprintf("(%s,'%s',%d)", 
    implode(',', $data), 
    $_POST['group'], 
    $_POST['user_id'] 
); 

qui vous donne plus de flexibilité et de compréhension dans ce que votre code exécute réellement.

Questions connexes