Page 1 sur 1

Problème d'insertion de données de type expression régulière

Posté : 10 juil. 2012, 10:13
par BlueDream
Bonjour tout le monde,


Je suis nouveau dans ce forum et débutant en php. Je souhaite enregistrer les modifications de la base de données dans une table que j'appelle modifications donc j'ai mis un champ requête qui va contenir la requête à exécuter pour mettre à jour la base de données. Ceci dit, j'ai créé une fonction qui met à jour la table modifications à chaque fois qu'il y a un changement. Voici mon code :

Code : Tout sélectionner

$result = $db_sync->CreateTable($tables_home[$i], $field); $db_change->AddRecord("$result"); function CreateTable($name, $fields, $fp) { mysql_select_db($this->database, $this->dbp); $primary_keys = array(); $sql_f = array(); for ($i = 0; $i < count($fields); $i++) { if ($fields[$i]['key'] == 'PRI') { $primary_keys[] = $fields[$i]['name']; } $sql_f[] = "`{$fields[$i]['name']}` {$fields[$i]['type']} " . ($fields[$i]['null'] ? '' : 'NOT') . ' NULL' . (strlen($fields[$i]['default']) > 0 ? " default '{$fields[$i]['default']}'" : '') . ($fields[$i]['extra'] == 'auto_increment' ? ' auto_increment' : ''); } $sql = "CREATE TABLE `{$name}` (" . implode(', ', $sql_f) . (count($primary_keys) > 0 ? ", PRIMARY KEY (`" . implode('`, `', $primary_keys) . "`)" : '') . ')'; return $sql; } function AddRecord($change_set){ $sql = "INSERT INTO changes VALUES('','$change_set',CURRENT_TIMESTAMP)"; return mysql_query($sql, $this->dbp); }

Le problème c'est qu'il n'ajoute aucune donnée sauf quand je remplace $result par une simple chaine de caractère. Aidez-moi s'il vous plait à résoudre ce problème qui me torture depuis 5 jours déjà.

Bonne journée à tous et merci d'avance pour vos réponses.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 10:33
par xTG
Échappement des données cela te parle ? => mysql_real_escape_string() ^^
Et pas de quotes autour d'une variable s'il n'y a qu'elle.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 12:20
par BlueDream
Oui oui j'ai déjà essayé mais ça n'a pas vraiment avancé. Ce qui est bizarre c'est que par exemple pour 'DROP TABLE t2' ça marche et quand je tape la requête

Code : Tout sélectionner

INSERT INTO changes VALUES('','CREATE TABLE `t2` (`id` int(11) NULL)',CURRENT_TIMESTAMP)
à la main dans phpmyadmin ça passe aussi.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 14:19
par xTG
Bizarre. :roll:
Ah pourquoi ? Car tes exemples semblent indiquer justement ce que je raconte.
Ta requête DROP ne contient aucun quote contrairement à ton INSERT.
PhpMyAdmin échappe pour toi les données.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 14:31
par BlueDream
Je me suis peut être mal exprimé, je voulais dire que ça marche pour le DROP et aussi pour le INSERT directement sur phpmyadmin. Par contre, quand je passe la même requête en tant qu'argument ça ne passe plus :( ça m'échappe complètement pourquoi.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 14:46
par xTG
Montres nous comment tu utilises l'échappement de variable.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 14:52
par Mazarini
En fait il faut faire :
$change_set = mysql_real_escape_string($change_set);
$sql = "INSERT INTO changes VALUES('','$change_set',CURRENT_TIMESTAMP)";

phpmyadmin fait comme cela.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 14:59
par BlueDream
Voilà comment je fais moi :

Code : Tout sélectionner

$result = $db_sync->CreateTable($tables_home[$i], $fields); $t = mysql_real_escape_string($result); $db_change->AddRecord("$t");
Avec

Code : Tout sélectionner

function CreateTable($name, $fields) { mysql_select_db($this->database, $this->dbp); $primary_keys = array(); $sql_f = array(); for ($i = 0; $i < count($fields); $i++) { if ($fields[$i]['key'] == 'PRI') { $primary_keys[] = $fields[$i]['name']; } $sql_f[] = "`{$fields[$i]['name']}` {$fields[$i]['type']} " . ($fields[$i]['null'] ? '' : 'NOT') . ' NULL' . (strlen($fields[$i]['default']) > 0 ? " default '{$fields[$i]['default']}'" : '') . ($fields[$i]['extra'] == 'auto_increment' ? ' auto_increment' : ''); } $sql = "CREATE TABLE `{$name}` (" . implode(', ', $sql_f) . (count($primary_keys) > 0 ? ", PRIMARY KEY (`" . implode('`, `', $primary_keys) . "`)" : '') . ')'; return $sql; }
Et

Code : Tout sélectionner

function AddRecord($change_set){ $sql = "INSERT INTO changes VALUES('','$change_set',CURRENT_TIMESTAMP)"; return mysql_query($sql, $this->dbp); }

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 15:03
par BlueDream
Désolé c'est mal indenté.

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 15:52
par Mazarini
il te reste à afficher le message d'erreur mysql via mysql_error()

Re: Problème d'insertion de données de type expression régul

Posté : 10 juil. 2012, 17:03
par BlueDream
Merciiii Beaucoup en fait dans mon code j'ouvre plusieurs connexions avec des base de données et des fois il cherchait la table changes dans la mauvais base de données donc j'ai mis nomdelabase.changes dans la requête INSERT et pour l'instant ça a l'ai de fonctionner. Quelqu'un pourrait expliquer la source de ce problème ? Car je suis persuadé que je me connecte bien à la bonne base, la preuve c'est que quand je met une requête simple, il met à jour la table changes.