8
votes

Construire une requête d'insertion à partir du tableau MySQL et PHP

J'écris un petit service Web en PHP et je vais avoir un peu de difficulté à obtenir ma tête autour du scénario suivant.

Mon plan consiste à être capable d'envoyer une gamme de données à une fonction, qui serait alors créer une requête pour que MySQL fonctionne. Dans la matrice, je planifie la clé d'être le nom de la colonne et la valeur d'être la valeur dans les colonnes .. Ie p> xxx pré>

alors, dans ma fonction i Ayez actuellement: P>

function addUser($usrData){
   foreach($usrData as $col => $val){
      $cols .= "," . $col;
      $values .= ",'".$val."'";
   }
}


0 commentaires

8 Réponses :


0
votes

Comment de celui-ci? XXX

Il devrait faire le travail pour vous.


3 commentaires

Il n'a jamais dit que l'entrée est venue d'un utilisateur. Néanmoins je vais le corriger.


Peu importe que l'entrée ne provienne pas d'un utilisateur. L'un des champs pourrait utiliser un caractère réservé. Vous devez toujours échapper aux données, quelle que soit la source.


Point pris et post réparé. @Brad



1
votes

FYI, votre code est grand ouvert à l'injection SQL actuellement.

Utilisez Requêtes préparées avec PDO . Vous pouvez définir vos noms de paramètres et passer simplement un tableau associatif pour faire l'insertion.

Vous ne pourrez pas coller un tableau arbitraire là-bas, car vous devrez nommer vos paramètres de manière appropriée (telle que : nom d'utilisateur au lieu de nom d'utilisateur ), Mais je ne pense pas que tu voulais faire ça quand même.


2 commentaires

Je viens d'écrire cela directement dans l'éditeur, cela ne reflète pas exactement le code que j'ai sur ma machine de développement à la maison. J'ai tout douiné;)


Ce n'est pas vraiment une réponse maintenant est-ce?



8
votes

Essayez ceci:

function addUser($usrData) {
   $count = 0;
   $fields = '';

   foreach($usrData as $col => $val) {
      if ($count++ != 0) $fields .= ', ';
      $col = mysql_real_escape_string($col);
      $val = mysql_real_escape_string($val);
      $fields .= "`$col` = $val";
   }

   $query = "INSERT INTO `myTable` SET $fields;";
}


4 commentaires

@Rikudo - hors de curiosité, qu'est-ce qui ne va pas avec l'utilisation des fonctions mysql_ *?


Ils sont (officieusement) obsolètes, des alternatives bien meilleures existent telles que MySQLI (Good) et PDO (génial).


Lorsque vous dites «non officiellement» obsolètes, voulez-vous dire qu'ils doivent être obsolètes dans un proche avenir, ou que ce n'est pas vraiment la meilleure pratique et qu'il existe de bien meilleures alternatives? - J'essaie juste de comprendre le raisonnement :)


Merci Matt. J'ai utilisé cela avec mes propres fonctions d'assainissement et cela fonctionne bien. PDO n'était pas une option pour moi malheureusement.



0
votes

Voici le code que j'ai tendance à utiliser pour une requête d'insertion: xxx


2 commentaires

Pouvez-vous ne pas utiliser array_keys ($ array) directement sur implore () ? Pourquoi foreach $ key => $ valeur Lorsque vous pouvez obtenir les clés et valeurs respectives à l'aide de Array_Keys ($ tableau) et array_values ​​($ tableau) ? S'il vous plaît corrigez-moi si je manque un point / faire quelque chose de mal


Ah j'ai totalement oublié à propos de Array_Keys / Array_Values ​​quand j'écris ceci - mon mauvais. Je vais le mettre à jour dès que possible.



4
votes

EDIT:
Oups ! Devis oublié autour des valeurs (), suppression de l'ancien code

$query = "INSERT INTO `mytable` ( ".
          mysql_real_escape_string(implode(' , ',array_keys( $userData))).
          ") VALUES ( '".
          mysql_real_escape_string(implode("' , '", $userData)).
          "' )";


0 commentaires

0
votes
//This Will Help You To Insert Data Into Database by Array

$myData = array('user'=>'foo','name'=>'bar','player'=>'Sachin');
$get->adddd('tabelname',$myData);


function insert($tabel,$usrData) {
$count = 0;
$fields = '';
foreach($usrData as $col => $val) {
  if ($count++ != 0) $fields .= ', ';
  if($count==1){
    $field .= $col;
    $value .= "'".$val."'";
  }
  else{
     $field .= ','.$col;
     $value .= ",'".$val."'";  
      }
  $fields .= "`$col` = $val";
 }
mysql_query($query = "INSERT INTO $tabel ($field) VALUES ($value)");
}

0 commentaires

1
votes

My BigGygune (facile) de le faire. Il a besoin d'un peu de refactoring, Mais c'est calme compréhensible pour moi. XXX


0 commentaires

4
votes

Solution élégante: xxx


0 commentaires