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> alors, dans ma fonction i Ayez actuellement: P> function addUser($usrData){
foreach($usrData as $col => $val){
$cols .= "," . $col;
$values .= ",'".$val."'";
}
}
8 Réponses :
Comment de celui-ci? Il devrait faire le travail pour vous. P> P>
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
FYI, votre code est grand ouvert à l'injection SQL actuellement. P>
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. P>
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 code> au lieu de
nom d'utilisateur code>), Mais je ne pense pas que tu voulais faire ça quand même. p>
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?
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;"; }
@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.
Voici le code que j'ai tendance à utiliser pour une requête d'insertion:
Pouvez-vous ne pas utiliser array_keys ($ array) code> directement sur
implore () code>? Pourquoi
foreach $ key => $ valeur code> Lorsque vous pouvez obtenir les clés et valeurs respectives à l'aide de
Array_Keys ($ tableau) code> et
array_values ($ tableau) code >? 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.
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)). "' )";
//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)"); }
My BigGygune (facile) de le faire.
Il a besoin d'un peu de refactoring,
Mais c'est calme compréhensible pour moi.
Solution élégante: