[MySQL] INSERT n'insère pas tout...

Fermé
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - Modifié par Kopros le 21/08/2013 à 11:02
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 22 août 2013 à 09:21
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 :

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 :

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 :

include_once('Mysql_core.class.php');
$mysql=new MysqlCore();
echo $mysql->mysql_insert();

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 o_O

Que faire ?


5 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 août 2013 à 15:49
Si
$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);');

n'est pas une faute de frappe ou n'est pas dû au re-formattage du texte sur le forum, y a un problème avec le formatage de ta string & les simples quotes.

T'as bien le display_errors à On sur ton serveur de dev ?
0
Bonjour,

Fait un echo de ta query, cela te permet de la tester directement depuis la BDD
Sinon, pour la requête :
INSERT INTO ma_table (column1, column2) VALUES ("var_1", "var_2")

Bien cordialement
0
Anoen Messages postés 196 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 11 septembre 2013 25
21 août 2013 à 19:17
Salut,

On dirait que tes données utilisateurs n'arrivent pas jusqu'à la requête. Essaie de voir si t'es variables ne sont pas vides juste avant l'insert.
0
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
22 août 2013 à 09:17
J'avais fait un mysqli_error, qui n'a rien affiché.
Le problème de quotes est lié au re-formatage du forum, qui me transforme les quotes de la touche 7 en single quotes (de la touche 4).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
22 août 2013 à 09:21
Salut, et merci pour vos réponses.

Un var_dump m'a montré que toutes les variables sont correctement renseignées.


Ca cloche du côté de la class foo_mysqli.
Si je passe directement par mysqli tout va bien.

Du coup je me demande pourquoi ma p'tite class foo_mysqli, que j'ai repris depuis php.net, a décidé de merdouiller avec l'insert... Vous avez une idée ?
0