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 :

paramétrage par défaut de connexion à mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut paramétrage par défaut de connexion à mysql
    Bonjour à tous,

    J'ai une config de développement (WAMPserver Apache 2.2.11 - Mysql 5.1.36 - PHP 5.3.0)
    et une config de prod (LAMP Apache/2.2.14 (Ubuntu) - Mysql 5.1.41 - PHP 5.3.2)

    Pour mes connexion à la base mysql (mysqli) je souhaite obtenir un paramétrage (fichiers de configuration) par défaut de manière à ce que :
    character_set_name() => me retourne utf8
    get_charset() => me retourne 'charset'=utf8 et 'collation'='utf8'

    Sur wamp ça marche sans pb, mais pas sur lamp (même après redémarrage d'apache et de mysql).


    Sur WAMP j'ai la config suivante (C:\wamp\bin\mysql\mysql5.1.36\my.ini) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    sur la config prod ça marche pas, pourtant j'ai la config suivante (/etc/mysql/my.cnf) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Set the default character set.
    default-character-set=utf8
     
    # Set the default collation.
    default-collation=utf8_general_ci
    character-set-client=utf8
    character-set-server=utf8
    skip-character-set-client-handshake
    Et cette config semble bonne, car si dans PHPMyAdmin (de LAMP) je lance la requete SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW VARIABLES LIKE '%character%'
    Ca me retourne bien de l'UTF-8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    character_set_client 	utf8
    character_set_connection 	utf8
    character_set_database 	utf8
    character_set_filesystem 	binary
    character_set_results 	utf8
    character_set_server 	utf8
    character_set_system 	utf8
    character_sets_dir 	/usr/share/mysql/charsets/
    J'en conclue que le problème ne vient pas de la config Base de donnée.

    Et en cherchant au niveau du PHP.INI de wamp ou de lamp, je ne vois pas de paramètre qui pourrait être en relation avec le pb :

    WAMP :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    [MySQL]
    ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
    ; http://php.net/mysql.allow_local_infile
    mysql.allow_local_infile = On
     
    ; Allow or prevent persistent links.
    ; http://php.net/mysql.allow-persistent
    mysql.allow_persistent = On
     
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysql.cache_size
    mysql.cache_size = 2000
     
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysql.max-persistent
    mysql.max_persistent = -1
     
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ; http://php.net/mysql.max-links
    mysql.max_links = -1
     
    ; Default port number for mysql_connect().  If unset, mysql_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysql.default-port
    mysql.default_port =
     
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysql.default-socket
    mysql.default_socket =
     
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-host
    mysql.default_host =
     
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-user
    mysql.default_user =
     
    ; Default password for mysql_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysql.default-password
    mysql.default_password =
     
    ; Maximum time (in seconds) for connect timeout. -1 means no limit
    ; http://php.net/mysql.connect-timeout
    mysql.connect_timeout = 60
     
    ; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
    ; SQL-Errors will be displayed.
    ; http://php.net/mysql.trace-mode
    mysql.trace_mode = Off
     
    [MySQLi]
     
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysqli.max-persistent
    mysqli.max_persistent = -1
     
    ; Maximum number of links.  -1 means no limit.
    ; http://php.net/mysqli.max-links
    mysqli.max_links = -1
     
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysqli.cache_size
    mysqli.cache_size = 2000
     
    ; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysqli.default-port
    mysqli.default_port = 3306
     
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysqli.default-socket
    mysqli.default_socket =
     
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-host
    mysqli.default_host =
     
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-user
    mysqli.default_user =
     
    ; Default password for mysqli_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysqli.default-pw
    mysqli.default_pw =
     
    ; Allow or prevent reconnect
    mysqli.reconnect = Off
    Pas plus au niveau du php.ini LAMP :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    [MySQL]
    ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
    ; http://php.net/mysql.allow_local_infile
    mysql.allow_local_infile = On
     
    ; Allow or prevent persistent links.
    ; http://php.net/mysql.allow-persistent
    mysql.allow_persistent = On
     
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysql.cache_size
    mysql.cache_size = 2000
     
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysql.max-persistent
    mysql.max_persistent = -1
     
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ; http://php.net/mysql.max-links
    mysql.max_links = -1
     
    ; Default port number for mysql_connect().  If unset, mysql_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysql.default-port
    mysql.default_port =
     
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysql.default-socket
    mysql.default_socket =
     
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-host
    mysql.default_host =
     
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-user
    mysql.default_user =
     
    ; Default password for mysql_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysql.default-password
    mysql.default_password =
     
    ; Maximum time (in seconds) for connect timeout. -1 means no limit
    ; http://php.net/mysql.connect-timeout
    mysql.connect_timeout = 60
     
    ; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
    ; SQL-Errors will be displayed.
    ; http://php.net/mysql.trace-mode
    mysql.trace_mode = Off
     
    [MySQLi]
     
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysqli.max-persistent
    mysqli.max_persistent = -1
     
    ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
    ; http://php.net/mysqli.allow_local_infile
    ;mysqli.allow_local_infile = On
     
    ; Allow or prevent persistent links.
    ; http://php.net/mysqli.allow-persistent
    mysqli.allow_persistent = On
     
    ; Maximum number of links.  -1 means no limit.
    ; http://php.net/mysqli.max-links
    mysqli.max_links = -1
     
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysqli.cache_size
    mysqli.cache_size = 2000
     
    ; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysqli.default-port
    mysqli.default_port = 3306
     
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysqli.default-socket
    mysqli.default_socket =
     
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-host
    mysqli.default_host =
     
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-user
    mysqli.default_user =
     
    ; Default password for mysqli_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysqli.default-pw
    mysqli.default_pw =
     
    ; Allow or prevent reconnect
    mysqli.reconnect = Off
    J'ai plus trop d'idée ou chercher.. vous pouvez m'aider ?

    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut
    A la fin du tutoriel "encoder son site en utf8" (http://j-willette.developpez.com/tut...-site-en-utf8/) on peut lire :

    "Avoir tous les champs correctement encodés, c'est bien beau, seulement il reste à définir en quel encodage les différentes couches de notre application vont communiquer. Ca ne se fait évidemment pas automatiquement. Maintenant que l'on a notre serveur en UTF-8 et donc nos scripts PHP, que l'on a également nos champs en base de données, il va falloir que ces deux technologies communiquent entre elles en UTF-8.
    Pour cela, rien de plus simple. Juste après la connexion à la base de données et la sélection d'une base en PHP, il faut appeler la fonction mysql_set_charset() en lui précisant l'encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_set_charset( 'utf8' );
    "

    Sauf que ça peut ce faire automatiquement (sur WAMP pas de pb), et je trouve ça particulièrement laid et inefficace devoir spécifier à chaque requète les encodages utilisés.. ..personne n'a une idée?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Fabrique une fonction de connexion à ta base, qui effectue le mysql_connect et le mysql_set_charset. Tu n'as plus qu'a utiliser cette fonction au lieu d'écrire 2 lignes à chaque fois (voire plus).

    L'idéal étant, à mon avis, d'utiliser une couche d'abstraction comme PDO couplé à un singleton (idée de recherche google )

    Exemple (config/db.php) :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    
    define('DB_URL', '127.0.0.1');
    
    class DB
    {
        private static $_instance;
        
        public static $ihmConn;
        
        private $_ihm = Array(
            'driver' => 'mysql',
            'persistent' => false,
            'host' => DB_URL,
            'login' => 'user',
            'password' => 'mdp',
            'database' => 'ta_base',
            'prefix' => '',
            'encoding' => 'utf8'
        );
        
        public function __construct()
        {
            self::$ihmConn =        new PDO('mysql:host='.$this->_ihm['host'].';dbname='.$this->_ihm['database'],
                                        $this->_ihm['login'], $this->_ihm['password'], 
                                        array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
                                           PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        }
        
        /**
         * Instanciation statique de la connexion PDO
         * @return static (object) PDO
         */
        public static function singleton() {
            if(!isset(self::$_instance)) {
                $c = __CLASS__;
                self::$_instance = new $c();
            }
            return self::$_instance;
        }
    
    }
    
    DB::singleton();
    
    ?>
    Après il suffit d'appeler ta connexion comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    require_once(config/db.php);
     
    DB::$ihmConn->query('SELECT toto FROM toto_table ...');

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut
    merci pc.bertineau,

    Mais pas pouvoir indiquer (par exemple dans php.ini) le type d'encodage par défaut pour les connexion mysql (ou mysqli), c'est quand même dommage..

    J'ai pas mal googlisé, et j'ai rien trouvé.. .. j'attend encore un peu, mais je crois qu'il faut que je me résigne à tout préciser au niveau du code...

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    peut être surcharger la methode insert avec "SET NAMES 'UTF8'" en amont de ton insert.

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function insertData($req) {
     
    mysql_query("SET NAMES 'UTF8'");
    mysql_query($req);
     
    }

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Autant le faire à la connexion !

    Sinon pouvoir le faire au niveau du php.ini serait vraiment utile effectivement ! Mais déjà au niveau de la connexion, tu n'auras plus à y penser une fois ta classe d'accès réalisée.

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par gomodo Voir le message
    et je trouve ça particulièrement laid et inefficace devoir spécifier à chaque requète les encodages utilisés.
    Il n'a jamais été question de préciser l'encodage à chaque requête. Juste UNE FOIS, à la connexion de la base de données. Tu ouvres un nouvelle connexion à chaque fois que tu exécutes une requête ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Zone de texte (paramétrage par défaut)
    Par PICHOUX dans le forum Excel
    Réponses: 2
    Dernier message: 11/02/2014, 15h46
  2. [WD-2007] Paramétrage par défaut des marges internes des tableaux
    Par theclear dans le forum Word
    Réponses: 6
    Dernier message: 08/12/2011, 16h03
  3. Set par défaut à la connexion
    Par kendras dans le forum ADO.NET
    Réponses: 3
    Dernier message: 27/06/2011, 16h15
  4. Par défaut Connexion Mysql: PB de Class
    Par phenix1988 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 08/05/2010, 20h43
  5. Liste déroulante par défaut (table Mysql)
    Par Nyutom dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 24/10/2006, 16h25

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