Changeset 35765 in spip-zone
- Timestamp:
- Mar 3, 2010, 6:08:27 PM (11 years ago)
- Location:
- _plugins_/extension_mysqli
- Files:
-
- 1 added
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/extension_mysqli/plugin.xml
r35695 r35765 12 12 Permet d'utiliser MySQLi plutôt que l'interface MySQL 13 13 </description> 14 <options>mysqli_options.php</options> 14 15 <etat>dev</etat> 15 16 <prefix>mysqli</prefix> -
_plugins_/extension_mysqli/req/mysqli.php
r35695 r35765 13 13 if (!defined("_ECRIRE_INC_VERSION")) return; 14 14 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 17 function req_mysqli_dist() { 19 18 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 92 function spip_mysqli_connect_db($host, $port, $login, $pass, $db='') { 20 93 if ($port > 0) $host = "$host:$port"; 21 94 $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 89 99 function spip_mysqli_set_charset($charset, $serveur='',$requeter=true,$requeter=true){ 90 100 $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; … … 93 103 } 94 104 95 // http://doc.spip.org/@spip_mysql i_get_charset105 // http://doc.spip.org/@spip_mysql_get_charset 96 106 function spip_mysqli_get_charset($charset=array(), $serveur='',$requeter=true){ 97 107 $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; … … 103 113 // Fonction de requete generale, munie d'une trace a la demande 104 114 105 // http://doc.spip.org/@spip_mysql i_query115 // http://doc.spip.org/@spip_mysql_query 106 116 function spip_mysqli_query($query, $serveur='',$requeter=true) { 107 117 … … 127 137 } 128 138 129 // http://doc.spip.org/@spip_mysql i_alter139 // http://doc.spip.org/@spip_mysql_alter 130 140 function spip_mysqli_alter($query, $serveur='',$requeter=true){ 131 141 return spip_mysqli_query("ALTER ".$query, $serveur, $requeter); # i.e. que PG se debrouille 132 142 } 133 143 134 // http://doc.spip.org/@spip_mysql i_optimize144 // http://doc.spip.org/@spip_mysql_optimize 135 145 function spip_mysqli_optimize($table, $serveur='',$requeter=true){ 136 146 spip_mysqli_query("OPTIMIZE TABLE ". $table); … … 138 148 } 139 149 140 // http://doc.spip.org/@spip_mysql i_explain150 // http://doc.spip.org/@spip_mysql_explain 141 151 function spip_mysqli_explain($query, $serveur='',$requeter=true){ 142 152 if (strpos(ltrim($query), 'SELECT') !== 0) return array(); … … 155 165 156 166 157 // http://doc.spip.org/@spip_mysql i_select167 // http://doc.spip.org/@spip_mysql_select 158 168 function spip_mysqli_select($select, $from, $where='', 159 169 $groupby='', $orderby='', $limit='', $having='', … … 181 191 // Pas portable malheureusement, on laisse pour le moment. 182 192 183 // http://doc.spip.org/@spip_mysql i_order193 // http://doc.spip.org/@spip_mysql_order 184 194 function spip_mysqli_order($orderby) 185 195 { … … 210 220 } 211 221 212 // http://doc.spip.org/@calculer_mysql i_expression222 // http://doc.spip.org/@calculer_mysql_expression 213 223 function calculer_mysqli_expression($expression, $v, $join = 'AND'){ 214 224 if (empty($v)) … … 227 237 } 228 238 229 // http://doc.spip.org/@spip_mysql i_select_as239 // http://doc.spip.org/@spip_mysql_select_as 230 240 function spip_mysqli_select_as($args) 231 241 { … … 257 267 define('_SQL_PREFIXE_TABLE', '/([,\s])spip_/S'); 258 268 259 // http://doc.spip.org/@traite_mysql i_query269 // http://doc.spip.org/@traite_mysql_query 260 270 function traite_mysqli_query($query, $db='', $prefixe='') { 261 271 … … 281 291 } 282 292 283 // http://doc.spip.org/@spip_mysql i_selectdb293 // http://doc.spip.org/@spip_mysql_selectdb 284 294 function spip_mysqli_selectdb($db) { 285 295 return mysqli_select_db($db); … … 290 300 // Attention on n'a pas toujours les droits 291 301 292 // http://doc.spip.org/@spip_mysql i_listdbs302 // http://doc.spip.org/@spip_mysql_listdbs 293 303 function spip_mysqli_listdbs($serveur='',$requeter=true) { 294 304 return spip_mysqli_query("show databases",$serveur,$requeter); … … 302 312 // Le nom des caches doit etre inferieur a 64 caracteres 303 313 304 // http://doc.spip.org/@spip_mysql i_create314 // http://doc.spip.org/@spip_mysql_create 305 315 function spip_mysqli_create($nom, $champs, $cles, $autoinc=false, $temporary=false, $serveur='',$requeter=true) { 306 316 … … 352 362 353 363 // Fonction de creation d'une vue SQL nommee $nom 354 // http://doc.spip.org/@spip_mysql i_create_view364 // http://doc.spip.org/@spip_mysql_create_view 355 365 function spip_mysqli_create_view($nom, $query_select, $serveur='',$requeter=true) { 356 366 if (!$query_select) return false; … … 366 376 367 377 368 // http://doc.spip.org/@spip_mysql i_drop_table378 // http://doc.spip.org/@spip_mysql_drop_table 369 379 function spip_mysqli_drop_table($table, $exist='', $serveur='',$requeter=true) 370 380 { … … 374 384 375 385 // supprime une vue 376 // http://doc.spip.org/@spip_mysql i_drop_view386 // http://doc.spip.org/@spip_mysql_drop_view 377 387 function spip_mysqli_drop_view($view, $exist='', $serveur='',$requeter=true) { 378 388 if ($exist) $exist =" IF EXISTS"; … … 380 390 } 381 391 382 // http://doc.spip.org/@spip_mysql i_showbase392 // http://doc.spip.org/@spip_mysql_showbase 383 393 function spip_mysqli_showbase($match, $serveur='',$requeter=true) 384 394 { … … 386 396 } 387 397 388 // http://doc.spip.org/@spip_mysql i_repair398 // http://doc.spip.org/@spip_mysql_repair 389 399 function spip_mysqli_repair($table, $serveur='',$requeter=true) 390 400 { … … 395 405 // colonnes, indexes, etc. 396 406 // au meme format que la definition des tables de SPIP 397 // http://doc.spip.org/@spip_mysql i_showtable407 // http://doc.spip.org/@spip_mysql_showtable 398 408 function spip_mysqli_showtable($nom_table, $serveur='',$requeter=true) 399 409 { … … 466 476 // 467 477 468 // http://doc.spip.org/@spip_mysql i_fetch478 // http://doc.spip.org/@spip_mysql_fetch 469 479 function spip_mysqli_fetch($r, $t='', $serveur='',$requeter=true) { 470 480 if (!$t) $t = MYSQLI_ASSOC; … … 477 487 478 488 479 // http://doc.spip.org/@spip_mysql i_countsel489 // http://doc.spip.org/@spip_mysql_countsel 480 490 function spip_mysqli_countsel($from = array(), $where = array(), 481 491 $groupby = '', $having = array(), $serveur='',$requeter=true) … … 492 502 } 493 503 494 // http://doc.spip.org/@spip_mysql i_error504 // http://doc.spip.org/@spip_mysql_error 495 505 function spip_mysqli_error($serveur='') { 496 506 $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; … … 500 510 501 511 // A transposer dans les portages 502 // http://doc.spip.org/@spip_mysql i_errno512 // http://doc.spip.org/@spip_mysql_errno 503 513 function spip_mysqli_errno($serveur='') { 504 514 $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; … … 513 523 514 524 // Interface de abstract_sql 515 // http://doc.spip.org/@spip_mysql i_count525 // http://doc.spip.org/@spip_mysql_count 516 526 function spip_mysqli_count($r, $serveur='',$requeter=true) { 517 527 if ($r) return mysqli_num_rows($r); … … 519 529 520 530 521 // http://doc.spip.org/@spip_mysql i_free531 // http://doc.spip.org/@spip_mysql_free 522 532 function spip_mysqli_free($r, $serveur='',$requeter=true) { 523 533 return mysqli_free_result($r); 524 534 } 525 535 526 // http://doc.spip.org/@spip_mysql i_insert536 // http://doc.spip.org/@spip_mysql_insert 527 537 function spip_mysqli_insert($table, $champs, $valeurs, $desc='', $serveur='',$requeter=true) { 528 538 … … 550 560 } 551 561 552 // http://doc.spip.org/@spip_mysql i_insertq562 // http://doc.spip.org/@spip_mysql_insertq 553 563 function spip_mysqli_insertq($table, $couples=array(), $desc=array(), $serveur='',$requeter=true) { 554 564 … … 565 575 566 576 567 // http://doc.spip.org/@spip_mysql i_insertq_multi577 // http://doc.spip.org/@spip_mysql_insertq_multi 568 578 function spip_mysqli_insertq_multi($table, $tab_couples=array(), $desc=array(), $serveur='',$requeter=true) { 569 579 … … 592 602 } 593 603 594 // http://doc.spip.org/@spip_mysql i_update604 // http://doc.spip.org/@spip_mysql_update 595 605 function spip_mysqli_update($table, $champs, $where='', $desc='', $serveur='',$requeter=true) { 596 606 $set = array(); … … 607 617 // idem, mais les valeurs sont des constantes a mettre entre apostrophes 608 618 // sauf les expressions de date lorsqu'il s'agit de fonctions SQL (NOW etc) 609 // http://doc.spip.org/@spip_mysql i_updateq619 // http://doc.spip.org/@spip_mysql_updateq 610 620 function spip_mysqli_updateq($table, $champs, $where='', $desc=array(), $serveur='',$requeter=true) { 611 621 … … 624 634 } 625 635 626 // http://doc.spip.org/@spip_mysql i_delete636 // http://doc.spip.org/@spip_mysql_delete 627 637 function spip_mysqli_delete($table, $where='', $serveur='',$requeter=true) { 628 638 $res = spip_mysqli_query( … … 638 648 } 639 649 640 // http://doc.spip.org/@spip_mysql i_replace650 // http://doc.spip.org/@spip_mysql_replace 641 651 function spip_mysqli_replace($table, $couples, $desc=array(), $serveur='',$requeter=true) { 642 652 return spip_mysqli_query("REPLACE $table (" . join(',',array_keys($couples)) . ') VALUES (' .join(',',array_map('_q', $couples)) . ')', $serveur, $requeter); … … 644 654 645 655 646 // http://doc.spip.org/@spip_mysql i_replace_multi656 // http://doc.spip.org/@spip_mysql_replace_multi 647 657 function spip_mysqli_replace_multi($table, $tab_couples, $desc=array(), $serveur='',$requeter=true) { 648 658 $cles = "(" . join(',',array_keys($tab_couples[0])). ')'; … … 656 666 657 667 658 // http://doc.spip.org/@spip_mysql i_multi668 // http://doc.spip.org/@spip_mysql_multi 659 669 function spip_mysqli_multi ($objet, $lang) { 660 670 $lengthlang = strlen("[$lang]"); … … 686 696 } 687 697 688 // http://doc.spip.org/@spip_mysql i_hex698 // http://doc.spip.org/@spip_mysql_hex 689 699 function spip_mysqli_hex($v) 690 700 { … … 715 725 // IN (...) est limite a 255 elements, d'ou cette fonction assistante 716 726 // 717 // http://doc.spip.org/@spip_mysql i_in727 // http://doc.spip.org/@spip_mysql_in 718 728 function spip_mysqli_in($val, $valeurs, $not='', $serveur='',$requeter=true) { 719 729 $n = $i = 0; … … 735 745 736 746 // pour compatibilite. Ne plus utiliser. 737 // http://doc.spip.org/@calcul_mysql i_in747 // http://doc.spip.org/@calcul_mysql_in 738 748 function calcul_mysqli_in($val, $valeurs, $not='') { 739 749 if (is_array($valeurs)) … … 744 754 } 745 755 746 // http://doc.spip.org/@spip_mysql i_cite756 // http://doc.spip.org/@spip_mysql_cite 747 757 function spip_mysqli_cite($v, $type) { 748 758 if (sql_test_date($type) AND preg_match('/^\w+\(/', $v) … … 755 765 } 756 766 757 // Ces deux fonctions n'ont pas d'equivalent exact PostGres758 // et ne sont la que pour compatibilite avec les extensions de SPIP < 1.9.3759 760 //761 // Poser un verrou local a un SPIP donne762 // Changer de nom toutes les heures en cas de blocage MySQL (ca arrive)763 //764 // http://doc.spip.org/@spip_get_lock765 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_lock781 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_mysqli794 function spip_versions_mysqli() {795 charger_php_extension('mysqli');796 return function_exists('mysqli_query');797 }798 799 767 800 768 ?>
Note: See TracChangeset
for help on using the changeset viewer.