IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

INSERT & Mysqli


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Par défaut INSERT & Mysqli
    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 :

    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();
    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

    Que faire ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu aurais des erreurs de syntaxe PHP avec cette requête donc à mon avis tu ne nous dis pas tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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);");
    Pense à activer les erreurs PDO que tu debugs aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 55
    Par défaut
    Arf, erreur de copier / coller, les quotes de la touche 7 ( ` ) se sont transformées en simples quotes standards ! Je vais rectifier ça.

    Sinon je ne connaissais pas pour activer les erreurs PDO. Quand je mets le code que tu m'as donné j'ai une erreur 500 ^^
    Je vais me renseigner de se côté

    Voilà sinon je viens de tester sans passer par la class foo_mysqli, directement avec mysqli, et là ça marche !
    Donc ma nouvelle question est : pourquoi l'autre merdouille ? (je l'ai récupérée sur php.net, elle a pas fait de soucis pour les SELECT et UPDATE)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quand je mets le code que tu m'as donné j'ai une erreur 500 ^^
    J'avais cru que tu utilisais PDO au lieu de Mysqli.

    pourquoi l'autre merdouille ? (je l'ai récupérée sur php.net
    Il s'agit d'un exemple sur comment manipuler la classe. Cela n'a aucun interêt dans ton code réel.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  2. Bulk insert et caractère accentué
    Par slc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2003, 12h52
  3. probleme d'insertion d'un Float
    Par neness dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2003, 12h32
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo