2010-05-08 4 views
2

Je passais par cet article aujourd'hui.UPDATE et INSERT différences dans la syntaxe est un inconvénient

http://vinothbabu.com/2010/05/08/update-and-insert-differences-in-syntax-is-an-inconvenience/

je ne pouvais comprendre cette partie du code écrit par l'auteur.

list($sets,$cols,$values)=escape_arr($sets); 

    $insert_sql=”INSERT INTO `avatars` “.implode(’,',$cols).” 
    VALUES(”.implode(’,',$values).”)”; 

    $update_sql=”UPDATE `avatars` SET “.implode(’,',$sets).” 
    WHERE userid=$userid LIMIT 1″; 

et enfin la conclusion de l'article.

+2

Veuillez corriger les citations intelligentes. – kennytm

+0

J'ai édité les lignes – Kevin

Répondre

2

Le PHP implode transforme le tableau de noms de colonnes en une chaîne séparée par des virgules. Il fait la même chose pour les valeurs dans l'instruction INSERT.

$ sets commence comme un tableau associatif de paires nom/valeur de colonne. Cette déclaration:

list($sets, $cols, $values) = escape_arr($sets); 

réaffecte $ fixe variable à un réseau régulier contenant des chaînes comme « nom_colonne = « value » ». Il le fait avec la fonction d'aide escape_arr dans l'article, qui renvoie 3 tableaux. Consultez la documentation pour list si vous ne savez pas ce qu'il fait.

Ensuite, il utilise à nouveau la fonction implode pour créer une grande chaîne séparée par des virgules du tableau $sets. Donc, de manière efficace, il construit à la fois les instructions INSERT et UPDATE étant donné un tableau associatif contenant des noms de colonnes en tant que clés, et leurs valeurs aussi ... valeurs.

Était-ce la question? Vous pouvez insérer quelques instructions var_dump dans le code pour suivre ce qu'il fait à chaque étape.

Edit: désolé pour l'explication en désordre, mais je dois courir pour l'instant :)

+0

liste ($ ensembles, $ cols, $ valeurs) = escape_arr ($ sets); - Cette partie peut être déroutante car le tableau $ sets sur la droite est remplacé par un tableau de la fonction escape_arr. –

+0

Je n'étais pas non plus en mesure d'interpréter la conclusion sur ce que l'auteur essaie d'expliquer – Kevin

+0

@theband: Sa conclusion est qu'en utilisant ce modèle, il est plus facile de maintenir votre code. Ou quelque chose :) – Thorarin

1

Cela ne fait aucun sens. Il suggère de coder en dur vos requêtes car de cette façon vous pouvez éviter de les considérer comme des objets (WTF?) Puis continuer à dire que le hardcoding est mauvais, apparemment ne réalisant pas que c'est exactement ce qu'il fait. Aussi. WHERE userid=$userid LIMIT 1 est mauvaise pratique de codage, omettre des citations peut entraîner une injection SQL. Et pourquoi la LIMITE 1? Il utilise un ID utilisateur non unique?

Il y a beaucoup de solutions plus saines pour la séparation de la couche de base de données, tels que les objets d'accès aux données, mapping objet-relationnel, les dossiers actifs ...

2

Sur une note de côté, en INSERTs MySQL peut utiliser la syntaxe UPDATE :

INSERT [INTO] tbl 
    SET col1 = 'value', col2 = 'value', col3 = 'value', ... 

Référez-vous au MySQL INSERT syntax pour la documentation complète.

Questions connexes