Construire la requête d'insertion à partir de la matrice de MySQL et PHP
Je suis en train d'écrire un petit service web en PHP et j'ai un peu de mal à obtenir ma tête autour de l'hypothèse suivante.
Mon plan est d'être en mesure d'envoyer un tableau de données à une fonction, qui serait alors de construire une requête MySQL pour fonctionner. Dans le tableau, j'plan pour que la clé soit le nom de la colonne, et la valeur à la valeur de pénétrer dans les colonnes.. c'est à dire
$myData = array('userName'=>'foo','passWord'=>'bar');
$myClass = new users();
$myClass->addUser($myData);
Puis, dans ma fonction j'ai actuellement:
function addUser($usrData){
foreach($usrData as $col => $val){
//This is where I'm stuck..
}
}
En gros, je me demande comment je peux séparer les clés et les valeurs de façon à ce que ma requête devient:
INSERT INTO `myTable` (`userName`,`passWord`) VALUES ('foo','bar');
Je sais que je pourrais probablement faire quelque chose comme:
function addUser($usrData){
foreach($usrData as $col => $val){
$cols .= "," . $col;
$values .= ",'".$val."'";
}
}
Mais je pensais qu'il pouvait être une solution plus élégante.
C'est probablement quelque chose de vraiment simple, mais je n'ai jamais rencontré cela avant, donc je serais reconnaissant pour toute l'aide et la direction..
Merci,
Dave
OriginalL'auteur Dave | 2011-08-13
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
mysql_*
fonctions.Par curiosité, Quel est le problème avec l'aide de la mysql_* fonctions?
Ils sont (officieusement) obsolète, Beaucoup de meilleures alternatives existent, tels que MySQLi (Bon) et AOP (Génial).
Quand vous dites "officieusement" obsolète, voulez-vous dire qu'ils sont à être obsolète dans un avenir proche, ou qu'il n'est pas vraiment la meilleure pratique, et qu'il y a beaucoup de meilleures alternatives? - Juste essayer de comprendre le raisonnement 🙂
Merci Matt. J'ai utilisé cela avec mes propres assainissement des fonctions et c'est génial de travailler. PDO n'était pas une option pour moi malheureusement.
OriginalL'auteur Matt Bradley
EDIT:
Oups ! oublié les guillemets autour des VALEURS de( ), le retrait de l'ancien code
OriginalL'auteur Sudhi
Pour info, votre code est grande ouverte à l'injection SQL actuellement.
Utilisation les requêtes préparées avec PDO. Vous pouvez définir vos noms de paramètre, et juste passer un tableau associatif à faire de l'insertion.
Vous ne serez pas en mesure de bâton de l'arbitraire d'un tableau dans, car vous en aurez besoin pour le nom de vos paramètres de façon appropriée (comme
:userName
au lieu deuserName
), mais je ne pense pas que vous voulez faire de toute façon.Ce n'est pas vraiment une réponse il est maintenant?
OriginalL'auteur Brad
Comment à ce sujet?
Il devrait faire le travail pour vous.
Il n'a jamais dit que l'entrée est venu à partir d'un utilisateur. Néanmoins, je vais le corriger.
Il n'a pas d'importance si non l'entrée provient d'un utilisateur. L'un des domaines de l'utilisation d'un caractère réservé. Vous devriez toujours s'échapper de données, indépendamment de la source.
Point de pris et après réparation. @Brad
OriginalL'auteur Madara Uchiha
Voici le code que j'ai tendance à utiliser pour une requête d'insertion:
array_keys($array)
directement surimplode()
? pourquoi neforeach $key => $value
quand vous pouvez obtenir les touches correspondantes et des valeurs à l'aidearray_keys($array)
etarray_values($array)
? S'il vous plaît corrigez-moi si je suis absent un point/faire quelque chose de malAh j'ai totalement oublié array_keys/array_values quand j'ai écrit mes mauvais. Je vais le mettre à jour dès que possible.
OriginalL'auteur MikeRogers0
OriginalL'auteur Mohit Kamboj
Mon Bigginer moyen (Facile) pour le faire.
Il a besoin de quelque refactoring,
mais c'est calme compréhensible pour moi.
OriginalL'auteur David Chincharashvili