Salut à tous !
Je tente de faire une class qui gère les requêtes SQL.
J'ai un léger problème avec INSERT : lorsque cette fonction est appelée, elle est sensée vérifier les données, se connecter à la base, faire l'insert, et elle retourne l'id de la nouvelle entrée.
Pour le debug, je zappe la vérification des données (et je mets des données fixes, y'a plus rien dans les paramètres).
Le problème c'est que quand je l'appelle, y'a rien qui n'est ajouté dans la table.
Pourtant, l'id est bien incrémenté !
Je suis sûr que je me connecte sur la bonne base et la requête se fait sur la bonne table.
Le problème ne vient pas de la requête elle-même car si je la fais directement en lignes de commandes par copier/coller tout va bien.
Voici la fonction telle qu'elle est en mode débug :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public function mysql_insert($values=array(),$primary_key='',$primary_keys_force=false, $table='', $base=''){ $base=($base=='')?$this->base:$base; $db = new foo_mysqli($this->mysqlusers['root']['host'], $this->mysqlusers['root']['user'], $this->mysqlusers['root']['pwd'], $base); $db->query('INSERT INTO `ACCOUNTS` (`username`,`mail`,`pwd`,`id_group`,`token`,`token_date`,`active`) VALUES ("krakapouet","test@test.com","e10adc3949ba59abbe56e057f20f883e",1,"","0000-00-00 00:00:00",0);'); $id=$db->insert_id; $db->close(); return $id; }
Les explications :
$this->base est une string définie dans __construct() et contient le nom de la base (c'est vérifié y'a pas d'erreur).
$this->mysqlusers est un array à 2 dimensions qui contient les différents utilisateurs de la base et leurs infos pour la connexion. La variable est renseignée directement lorsqu'elle est définie.
foo_mysqli est une petite class fille de mysqli (qui est dans le même fichier, y'a pas d'histoires d'include) que voici dans son ensemble :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class foo_mysqli extends mysqli { public function __construct($host, $user, $pass, $db) { parent::init(); if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) { die('Setting MYSQLI_INIT_COMMAND failed'); } if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) { die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed'); } if (!parent::real_connect($host, $user, $pass, $db)) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } } }
Voilà, j'ai fait un fichier rien que pour tester l'appel, pour savoir si dans le code y'aurais pas eu quelques lignes qui supprimeraient ce qui faut pas, mais même avec l'appel simpliste ça marche pas. Je vous le mets :
Et avec tout ça, ben l'id est bien affiché, il s'incrémente bien à chaque fois, mais y'a toujours rien dans ma base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 include_once('Mysql_core.class.php'); $mysql=new MysqlCore(); echo $mysql->mysql_insert();
Que faire ?
Partager