[CRON] INSERT ON DUPLICATE KEY UPDATE

Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
- - Dernière réponse : pierreSabatier
Messages postés
27
Date d'inscription
lundi 12 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
- 15 oct. 2011 à 15:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/53678-cron-insert-on-duplicate-key-update

Afficher la suite 
cod57
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
8 -
bonjour

/*Bonjour je crois qu'il y a problème de sécurité dans une fonction*/
/*http://www.phpsecure.info/v2/article/InjSql.php*/
/*le tableau $data doit etre ecrasé*/
/* mon test */
/*on suppose connecté*/
$link = mysql_connect('localhost','root','');
$Q new SegmenterRequete('INSERT INTO T (pop, top) VALUES ', ' ON DUPLICATE KEY UPDATE SET pop VALUES(pop);');
$Q->mode = Mode::DEBUG_ALL;
$Q->max = 2;

$Q->ajouter('lol\'', 'mom');
echo '
';
$Q->ajouter('lol', 'mom');
echo '
';
$Q->concatener("('lol','')");

/*mon test*/
$data=array("INSERT INTO membres (login,password,nom,email,userlevel) VALUES ('','','','','3')#','1");
print_r($Q->ajouter_tableau($data));
/*fin test*/

//array_map('mysql_real_escape_string', $data);
//mais $data = array_map('mysql_real_escape_string', $data);
//j'ai mis le return pour le test

//public function ajouter_tableau($data){
//
// $data=array_map('mysql_real_escape_string', $data)
// return $chaine = '(' . $this->guillemet . implode($this->guillemet . ', ' . $this->guillemet, $data) .
// $this->guillemet . ')';

?>
pierreSabatier
Messages postés
27
Date d'inscription
lundi 12 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
-
Merci COD57. Effectivement, je m'étais mal renseigné sur la fonction "array_map", j'avais pensé à un passage par référence :p

Maintenant le code est sûr.

Mais attention COD57. Je crois que tu n'as pas bien compris comment utiliser cette classe. La méthode SegmeterRequete::ajouter_tableau prend en paramètre un tableau de valeurs à ajouter, et seulement les valeurs, pas la structure de la requête. Celle-ci est définie par les attributs SegmenterRequete::$debut et SegmenterRequete::$fin.
cod57
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
8 -
Si j'ai compris ce que tu veux faire avec cette class, mon exemple n'étais que pour mettre en évidence le non filtrage ... bon ... pour ce qui est vraiment utile ton code est intéressant, il faudra que je teste ça sur un gros update. Il y a des astuces très ingénieuses.

++
pierreSabatier
Messages postés
27
Date d'inscription
lundi 12 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
-
Merci COD57 :-) En affectant l'attribut SegmenterRequete::$mode à Mode::DEBUG_ONE, la première requête est affichée. Ca peut être rassurant de voir le résultat avant le gros update ;-)
Commenter la réponse de cod57