Changeset 35765 in spip-zone


Ignore:
Timestamp:
Mar 3, 2010, 6:08:27 PM (11 years ago)
Author:
gilles.vincent@…
Message:

La connexion à mysqli est possible.
Mais vu qu'on est déjà connecté à mysql au moment de l'initialisation du plugin, il faut se déconnecter à chaque fois pour se reconnecter sous mysqli.
Quelque chose me dit que ce n'est pas très optimal.
;)

Location:
_plugins_/extension_mysqli
Files:
1 added
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/extension_mysqli/plugin.xml

    r35695 r35765  
    1212                Permet d'utiliser MySQLi plutôt que l'interface MySQL
    1313        </description>
     14        <options>mysqli_options.php</options>
    1415        <etat>dev</etat>
    1516        <prefix>mysqli</prefix>
  • _plugins_/extension_mysqli/req/mysqli.php

    r35695 r35765  
    1313if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    15 // fonction pour la premiere connexion a un serveur MySQL
    16 
    17 // http://doc.spip.org/@req_mysql_dist
    18 function req_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
     15// fonction pour changer la connexion aux serveurs MySQL en gardant les paramètres existant
     16
     17function req_mysqli_dist() {
    1918        charger_php_extension('mysqli');
     19
     20        // Il faut fermer les connexions existantes
     21        // Et les reconnecter sur MySQLi
     22        // Au moment du chargement de ce plugin, seule la base SPIP est chargée
     23        // TODO : voir ce qu'il va se passer si on se connecte à plusieures bases
     24
     25        $connexion = &$GLOBALS['connexions'][0];
     26        @mysql_close($connexion['link']);
     27
     28        // On charge le fichier de configuration pour se reconnecter
     29        $f = file(_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES . 'connect.php');
     30        foreach ($f as $line) {
     31                if (substr($line, 0, 15) == "spip_connect_db") {
     32                        preg_match("/spip_connect_db\('(\w*)','(\w*)','(\w*)','(\w*)','(\w*)','(\w*)', '(\w*)','(\w*)'\);/", $line, $matches);
     33                        $connexion['link'] = spip_mysqli_connect_db($matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[7]);
     34                }
     35        }
     36        $connexion[1] = &$GLOBALS['spip_mysql_functions_1'];
     37}
     38
     39// On redirige toutes les fonctions mysql vers la version mysqli
     40$GLOBALS['spip_mysql_functions_1'] = array(
     41        'alter' => 'spip_mysqli_alter',
     42        'count' => 'spip_mysqli_count',
     43        'countsel' => 'spip_mysqli_countsel',
     44        'create' => 'spip_mysqli_create',
     45        'create_base' => 'spip_mysqli_create_base',
     46        'create_view' => 'spip_mysqli_create_view',
     47        'date_proche' => 'spip_mysqli_date_proche',
     48        'delete' => 'spip_mysqli_delete',
     49        'drop_table' => 'spip_mysqli_drop_table',
     50        'drop_view' => 'spip_mysqli_drop_view',
     51        'errno' => 'spip_mysqli_errno',
     52        'error' => 'spip_mysqli_error',
     53        'explain' => 'spip_mysqli_explain',
     54        'fetch' => 'spip_mysqli_fetch',
     55        'seek' => 'spip_mysqli_seek',
     56        'free' => 'spip_mysqli_free',
     57        'hex' => 'spip_mysqli_hex',
     58        'in' => 'spip_mysqli_in',
     59        'insert' => 'spip_mysqli_insert',
     60        'insertq' => 'spip_mysqli_insertq',
     61        'insertq_multi' => 'spip_mysqli_insertq_multi',
     62        'listdbs' => 'spip_mysqli_listdbs',
     63        'multi' => 'spip_mysqli_multi',
     64        'optimize' => 'spip_mysqli_optimize',
     65        'query' => 'spip_mysqli_query',
     66        'quote' => 'spip_mysqli_quote',
     67        'replace' => 'spip_mysqli_replace',
     68        'replace_multi' => 'spip_mysqli_replace_multi',
     69        'repair' => 'spip_mysqli_repair',
     70        'select' => 'spip_mysqli_select',
     71        'selectdb' => 'spip_mysqli_selectdb',
     72        'set_charset' => 'spip_mysqli_set_charset',
     73        'get_charset' => 'spip_mysqli_get_charset',
     74        'showbase' => 'spip_mysqli_showbase',
     75        'showtable' => 'spip_mysqli_showtable',
     76        'update' => 'spip_mysqli_update',
     77        'updateq' => 'spip_mysqli_updateq',
     78        //// association de chaque nom http d'un charset aux couples MySQL
     79        'charsets' => array(
     80                'cp1250'=>array('charset'=>'cp1250','collation'=>'cp1250_general_ci'),
     81                'cp1251'=>array('charset'=>'cp1251','collation'=>'cp1251_general_ci'),
     82                'cp1256'=>array('charset'=>'cp1256','collation'=>'cp1256_general_ci'),
     83                'iso-8859-1'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
     84                //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
     85                'iso-8859-9'=>array('charset'=>'latin5','collation'=>'latin5_turkish_ci'),
     86                //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
     87                'utf-8'=>array('charset'=>'utf8','collation'=>'utf8_general_ci')
     88                )
     89        );
     90
     91// Reconnecte SPIP sur MySQL via un connecteur MySQLi
     92function spip_mysqli_connect_db($host, $port, $login, $pass, $db='') {
    2093        if ($port > 0) $host = "$host:$port";
    2194        $link = new mysqli($host, $login, $pass, $db);
    22         if (!$link) return false;
    23         $last = '';
    24         if (!$db) {
    25                 $db = 'spip';
    26         }
    27 
    28         return array(
    29                 'db' => $db,
    30                 'last' => $last,
    31                 'prefixe' => $prefixe ? $prefixe : $db,
    32                 'link' => $link
    33         );
    34                
    35 }
    36 
    37 $GLOBALS['spip_mysql_functions_1'] = array(
    38                 'alter' => 'spip_mysqli_alter',
    39                 'count' => 'spip_mysqli_count',
    40                 'countsel' => 'spip_mysqli_countsel',
    41                 'create' => 'spip_mysqli_create',
    42                 'create_base' => 'spip_mysqli_create_base',
    43                 'create_view' => 'spip_mysqli_create_view',
    44                 'date_proche' => 'spip_mysqli_date_proche',
    45                 'delete' => 'spip_mysqli_delete',
    46                 'drop_table' => 'spip_mysqli_drop_table',
    47                 'drop_view' => 'spip_mysqli_drop_view',
    48                 'errno' => 'spip_mysqli_errno',
    49                 'error' => 'spip_mysqli_error',
    50                 'explain' => 'spip_mysqli_explain',
    51                 'fetch' => 'spip_mysqli_fetch',
    52                 'seek' => 'spip_mysqli_seek',
    53                 'free' => 'spip_mysqli_free',
    54                 'hex' => 'spip_mysqli_hex',
    55                 'in' => 'spip_mysqli_in',
    56                 'insert' => 'spip_mysqli_insert',
    57                 'insertq' => 'spip_mysqli_insertq',
    58                 'insertq_multi' => 'spip_mysqli_insertq_multi',
    59                 'listdbs' => 'spip_mysqli_listdbs',
    60                 'multi' => 'spip_mysqli_multi',
    61                 'optimize' => 'spip_mysqli_optimize',
    62                 'query' => 'spip_mysqli_query',
    63                 'quote' => 'spip_mysqli_quote',
    64                 'replace' => 'spip_mysqli_replace',
    65                 'replace_multi' => 'spip_mysqli_replace_multi',
    66                 'repair' => 'spip_mysqli_repair',
    67                 'select' => 'spip_mysqli_select',
    68                 'selectdb' => 'spip_mysqli_selectdb',
    69                 'set_charset' => 'spip_mysqli_set_charset',
    70                 'get_charset' => 'spip_mysqli_get_charset',
    71                 'showbase' => 'spip_mysqli_showbase',
    72                 'showtable' => 'spip_mysqli_showtable',
    73                 'update' => 'spip_mysqli_update',
    74                 'updateq' => 'spip_mysqli_updateq',
    75 
    76   // association de chaque nom http d'un charset aux couples MySQL
    77                 'charsets' => array(
    78 'cp1250'=>array('charset'=>'cp1250','collation'=>'cp1250_general_ci'),
    79 'cp1251'=>array('charset'=>'cp1251','collation'=>'cp1251_general_ci'),
    80 'cp1256'=>array('charset'=>'cp1256','collation'=>'cp1256_general_ci'),
    81 'iso-8859-1'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
    82 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
    83 'iso-8859-9'=>array('charset'=>'latin5','collation'=>'latin5_turkish_ci'),
    84 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
    85 'utf-8'=>array('charset'=>'utf8','collation'=>'utf8_general_ci'))
    86                 );
    87 
    88 // http://doc.spip.org/@spip_mysqli_set_charset
     95        return $link;
     96}
     97
     98// http://doc.spip.org/@spip_mysql_set_charset
    8999function spip_mysqli_set_charset($charset, $serveur='',$requeter=true,$requeter=true){
    90100        $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
     
    93103}
    94104
    95 // http://doc.spip.org/@spip_mysqli_get_charset
     105// http://doc.spip.org/@spip_mysql_get_charset
    96106function spip_mysqli_get_charset($charset=array(), $serveur='',$requeter=true){
    97107        $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
     
    103113// Fonction de requete generale, munie d'une trace a la demande
    104114
    105 // http://doc.spip.org/@spip_mysqli_query
     115// http://doc.spip.org/@spip_mysql_query
    106116function spip_mysqli_query($query, $serveur='',$requeter=true) {
    107117
     
    127137}
    128138
    129 // http://doc.spip.org/@spip_mysqli_alter
     139// http://doc.spip.org/@spip_mysql_alter
    130140function spip_mysqli_alter($query, $serveur='',$requeter=true){
    131141        return spip_mysqli_query("ALTER ".$query, $serveur, $requeter); # i.e. que PG se debrouille
    132142}
    133143
    134 // http://doc.spip.org/@spip_mysqli_optimize
     144// http://doc.spip.org/@spip_mysql_optimize
    135145function spip_mysqli_optimize($table, $serveur='',$requeter=true){
    136146        spip_mysqli_query("OPTIMIZE TABLE ". $table);
     
    138148}
    139149
    140 // http://doc.spip.org/@spip_mysqli_explain
     150// http://doc.spip.org/@spip_mysql_explain
    141151function spip_mysqli_explain($query, $serveur='',$requeter=true){
    142152        if (strpos(ltrim($query), 'SELECT') !== 0) return array();
     
    155165
    156166
    157 // http://doc.spip.org/@spip_mysqli_select
     167// http://doc.spip.org/@spip_mysql_select
    158168function spip_mysqli_select($select, $from, $where='',
    159169                           $groupby='', $orderby='', $limit='', $having='',
     
    181191// Pas portable malheureusement, on laisse pour le moment.
    182192
    183 // http://doc.spip.org/@spip_mysqli_order
     193// http://doc.spip.org/@spip_mysql_order
    184194function spip_mysqli_order($orderby)
    185195{
     
    210220}
    211221
    212 // http://doc.spip.org/@calculer_mysqli_expression
     222// http://doc.spip.org/@calculer_mysql_expression
    213223function calculer_mysqli_expression($expression, $v, $join = 'AND'){
    214224        if (empty($v))
     
    227237}
    228238
    229 // http://doc.spip.org/@spip_mysqli_select_as
     239// http://doc.spip.org/@spip_mysql_select_as
    230240function spip_mysqli_select_as($args)
    231241{
     
    257267define('_SQL_PREFIXE_TABLE', '/([,\s])spip_/S');
    258268
    259 // http://doc.spip.org/@traite_mysqli_query
     269// http://doc.spip.org/@traite_mysql_query
    260270function traite_mysqli_query($query, $db='', $prefixe='') {
    261271
     
    281291}
    282292
    283 // http://doc.spip.org/@spip_mysqli_selectdb
     293// http://doc.spip.org/@spip_mysql_selectdb
    284294function spip_mysqli_selectdb($db) {
    285295        return mysqli_select_db($db);
     
    290300// Attention on n'a pas toujours les droits
    291301
    292 // http://doc.spip.org/@spip_mysqli_listdbs
     302// http://doc.spip.org/@spip_mysql_listdbs
    293303function spip_mysqli_listdbs($serveur='',$requeter=true) {
    294304        return spip_mysqli_query("show databases",$serveur,$requeter);
     
    302312// Le nom des caches doit etre inferieur a 64 caracteres
    303313
    304 // http://doc.spip.org/@spip_mysqli_create
     314// http://doc.spip.org/@spip_mysql_create
    305315function spip_mysqli_create($nom, $champs, $cles, $autoinc=false, $temporary=false, $serveur='',$requeter=true) {
    306316
     
    352362
    353363// Fonction de creation d'une vue SQL nommee $nom
    354 // http://doc.spip.org/@spip_mysqli_create_view
     364// http://doc.spip.org/@spip_mysql_create_view
    355365function spip_mysqli_create_view($nom, $query_select, $serveur='',$requeter=true) {
    356366        if (!$query_select) return false;
     
    366376
    367377
    368 // http://doc.spip.org/@spip_mysqli_drop_table
     378// http://doc.spip.org/@spip_mysql_drop_table
    369379function spip_mysqli_drop_table($table, $exist='', $serveur='',$requeter=true)
    370380{
     
    374384
    375385// supprime une vue
    376 // http://doc.spip.org/@spip_mysqli_drop_view
     386// http://doc.spip.org/@spip_mysql_drop_view
    377387function spip_mysqli_drop_view($view, $exist='', $serveur='',$requeter=true) {
    378388        if ($exist) $exist =" IF EXISTS";
     
    380390}
    381391
    382 // http://doc.spip.org/@spip_mysqli_showbase
     392// http://doc.spip.org/@spip_mysql_showbase
    383393function spip_mysqli_showbase($match, $serveur='',$requeter=true)
    384394{
     
    386396}
    387397
    388 // http://doc.spip.org/@spip_mysqli_repair
     398// http://doc.spip.org/@spip_mysql_repair
    389399function spip_mysqli_repair($table, $serveur='',$requeter=true)
    390400{
     
    395405// colonnes, indexes, etc.
    396406// au meme format que la definition des tables de SPIP
    397 // http://doc.spip.org/@spip_mysqli_showtable
     407// http://doc.spip.org/@spip_mysql_showtable
    398408function spip_mysqli_showtable($nom_table, $serveur='',$requeter=true)
    399409{
     
    466476//
    467477
    468 // http://doc.spip.org/@spip_mysqli_fetch
     478// http://doc.spip.org/@spip_mysql_fetch
    469479function spip_mysqli_fetch($r, $t='', $serveur='',$requeter=true) {
    470480        if (!$t) $t = MYSQLI_ASSOC;
     
    477487
    478488
    479 // http://doc.spip.org/@spip_mysqli_countsel
     489// http://doc.spip.org/@spip_mysql_countsel
    480490function spip_mysqli_countsel($from = array(), $where = array(),
    481491                             $groupby = '', $having = array(), $serveur='',$requeter=true)
     
    492502}
    493503
    494 // http://doc.spip.org/@spip_mysqli_error
     504// http://doc.spip.org/@spip_mysql_error
    495505function spip_mysqli_error($serveur='') {
    496506        $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
     
    500510
    501511// A transposer dans les portages
    502 // http://doc.spip.org/@spip_mysqli_errno
     512// http://doc.spip.org/@spip_mysql_errno
    503513function spip_mysqli_errno($serveur='') {
    504514        $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
     
    513523
    514524// Interface de abstract_sql
    515 // http://doc.spip.org/@spip_mysqli_count
     525// http://doc.spip.org/@spip_mysql_count
    516526function spip_mysqli_count($r, $serveur='',$requeter=true) {
    517527        if ($r) return mysqli_num_rows($r);
     
    519529
    520530
    521 // http://doc.spip.org/@spip_mysqli_free
     531// http://doc.spip.org/@spip_mysql_free
    522532function spip_mysqli_free($r, $serveur='',$requeter=true) {
    523533        return mysqli_free_result($r);
    524534}
    525535
    526 // http://doc.spip.org/@spip_mysqli_insert
     536// http://doc.spip.org/@spip_mysql_insert
    527537function spip_mysqli_insert($table, $champs, $valeurs, $desc='', $serveur='',$requeter=true) {
    528538
     
    550560}
    551561
    552 // http://doc.spip.org/@spip_mysqli_insertq
     562// http://doc.spip.org/@spip_mysql_insertq
    553563function spip_mysqli_insertq($table, $couples=array(), $desc=array(), $serveur='',$requeter=true) {
    554564
     
    565575
    566576
    567 // http://doc.spip.org/@spip_mysqli_insertq_multi
     577// http://doc.spip.org/@spip_mysql_insertq_multi
    568578function spip_mysqli_insertq_multi($table, $tab_couples=array(), $desc=array(), $serveur='',$requeter=true) {
    569579
     
    592602}
    593603
    594 // http://doc.spip.org/@spip_mysqli_update
     604// http://doc.spip.org/@spip_mysql_update
    595605function spip_mysqli_update($table, $champs, $where='', $desc='', $serveur='',$requeter=true) {
    596606        $set = array();
     
    607617// idem, mais les valeurs sont des constantes a mettre entre apostrophes
    608618// sauf les expressions de date lorsqu'il s'agit de fonctions SQL (NOW etc)
    609 // http://doc.spip.org/@spip_mysqli_updateq
     619// http://doc.spip.org/@spip_mysql_updateq
    610620function spip_mysqli_updateq($table, $champs, $where='', $desc=array(), $serveur='',$requeter=true) {
    611621
     
    624634}
    625635
    626 // http://doc.spip.org/@spip_mysqli_delete
     636// http://doc.spip.org/@spip_mysql_delete
    627637function spip_mysqli_delete($table, $where='', $serveur='',$requeter=true) {
    628638        $res = spip_mysqli_query(
     
    638648}
    639649
    640 // http://doc.spip.org/@spip_mysqli_replace
     650// http://doc.spip.org/@spip_mysql_replace
    641651function spip_mysqli_replace($table, $couples, $desc=array(), $serveur='',$requeter=true) {
    642652        return spip_mysqli_query("REPLACE $table (" . join(',',array_keys($couples)) . ') VALUES (' .join(',',array_map('_q', $couples)) . ')', $serveur, $requeter);
     
    644654
    645655
    646 // http://doc.spip.org/@spip_mysqli_replace_multi
     656// http://doc.spip.org/@spip_mysql_replace_multi
    647657function spip_mysqli_replace_multi($table, $tab_couples, $desc=array(), $serveur='',$requeter=true) {
    648658        $cles = "(" . join(',',array_keys($tab_couples[0])). ')';
     
    656666
    657667
    658 // http://doc.spip.org/@spip_mysqli_multi
     668// http://doc.spip.org/@spip_mysql_multi
    659669function spip_mysqli_multi ($objet, $lang) {
    660670        $lengthlang = strlen("[$lang]");
     
    686696}
    687697
    688 // http://doc.spip.org/@spip_mysqli_hex
     698// http://doc.spip.org/@spip_mysql_hex
    689699function spip_mysqli_hex($v)
    690700{
     
    715725// IN (...) est limite a 255 elements, d'ou cette fonction assistante
    716726//
    717 // http://doc.spip.org/@spip_mysqli_in
     727// http://doc.spip.org/@spip_mysql_in
    718728function spip_mysqli_in($val, $valeurs, $not='', $serveur='',$requeter=true) {
    719729        $n = $i = 0;
     
    735745
    736746// pour compatibilite. Ne plus utiliser.
    737 // http://doc.spip.org/@calcul_mysqli_in
     747// http://doc.spip.org/@calcul_mysql_in
    738748function calcul_mysqli_in($val, $valeurs, $not='') {
    739749        if (is_array($valeurs))
     
    744754}
    745755
    746 // http://doc.spip.org/@spip_mysqli_cite
     756// http://doc.spip.org/@spip_mysql_cite
    747757function spip_mysqli_cite($v, $type) {
    748758        if (sql_test_date($type) AND preg_match('/^\w+\(/', $v)
     
    755765}
    756766
    757 // Ces deux fonctions n'ont pas d'equivalent exact PostGres
    758 // et ne sont la que pour compatibilite avec les extensions de SPIP < 1.9.3
    759 
    760 //
    761 // Poser un verrou local a un SPIP donne
    762 // Changer de nom toutes les heures en cas de blocage MySQL (ca arrive)
    763 //
    764 // http://doc.spip.org/@spip_get_lock
    765 function spip_mysqli_get_lock($nom, $timeout = 0) {
    766 
    767         define('_LOCK_TIME', intval(time()/3600-316982));
    768 
    769         $connexion = &$GLOBALS['connexions'][0];
    770         $prefixe = $connexion['prefixe'];
    771         $link = $connexion['link'];
    772         $nom = "$bd:$prefix:$nom" .  _LOCK_TIME;
    773 
    774         $connexion['last'] = $q = "SELECT GET_LOCK(" . _q($nom) . ", $timeout) AS n";
    775         $q = @sql_fetch($link->query($q));
    776         if (!$q) spip_log("pas de lock sql pour $nom");
    777         return $q['n'];
    778 }
    779 
    780 // http://doc.spip.org/@spip_release_lock
    781 function spip_mysqli_release_lock($nom) {
    782 
    783         $connexion = &$GLOBALS['connexions'][0];
    784         $prefixe = $connexion['prefixe'];
    785         $nom = "$bd:$prefix:$nom" . _LOCK_TIME;
    786         $link = $connexion['link'];
    787 
    788         $connexion['last'] = $q = "SELECT RELEASE_LOCK(" . _q($nom) . ")";
    789         $link->query($q);
    790 }
    791 
    792 // Renvoie false si on n'a pas les fonctions mysqli (pour l'install)
    793 // http://doc.spip.org/@spip_versions_mysqli
    794 function spip_versions_mysqli() {
    795         charger_php_extension('mysqli');
    796         return function_exists('mysqli_query');
    797 }
    798 
    799767
    800768?>
Note: See TracChangeset for help on using the changeset viewer.