Completed
Push — master ( 584fd0...e68145 )
by cam
01:17
created
ecrire/req/mysql.php 1 patch
Indentation   +877 added lines, -877 removed lines patch added patch discarded remove patch
@@ -20,11 +20,11 @@  discard block
 block discarded – undo
20 20
  */
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 if (!defined('_MYSQL_NOPLANES')) {
27
-	define('_MYSQL_NOPLANES', true);
27
+    define('_MYSQL_NOPLANES', true);
28 28
 }
29 29
 
30 30
 /**
@@ -41,112 +41,112 @@  discard block
 block discarded – undo
41 41
  *     - tableau décrivant la connexion sinon
42 42
  */
43 43
 function req_mysql_dist($host, $port, $login, $pass, $db = '', $prefixe = '') {
44
-	if (!extension_loaded(\mysqli::class)) {
45
-		return false;
46
-	}
47
-
48
-	// si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
-	try {
50
-		if (
51
-			$port and !is_numeric($socket = $port)
52
-			and (!$host or $host === 'localhost')
53
-		) {
54
-			$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
55
-		} elseif ($port) {
56
-			$link = @mysqli_connect($host, $login, $pass, '', $port);
57
-		} else {
58
-			$link = @mysqli_connect($host, $login, $pass);
59
-		}
60
-	} catch (\mysqli_sql_exception $e) {
61
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
62
-		$link = false;
63
-	}
64
-
65
-	if (!$link) {
66
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
67
-
68
-		return false;
69
-	}
70
-	$last = '';
71
-	if (!$db) {
72
-		$ok = $link;
73
-		$db = 'spip';
74
-	} else {
75
-		$ok = mysqli_select_db($link, $db);
76
-		if (
77
-			defined('_MYSQL_SET_SQL_MODE')
78
-			or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
79
-		) {
80
-			mysqli_query($link, $last = "set sql_mode=''");
81
-		}
82
-	}
83
-
84
-	spip_log(
85
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
86
-		_LOG_DEBUG
87
-	);
88
-
89
-	return !$ok ? false : [
90
-		'db' => $db,
91
-		'last' => $last,
92
-		'prefixe' => $prefixe ?: $db,
93
-		'link' => $link,
94
-		'total_requetes' => 0,
95
-	];
44
+    if (!extension_loaded(\mysqli::class)) {
45
+        return false;
46
+    }
47
+
48
+    // si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
+    try {
50
+        if (
51
+            $port and !is_numeric($socket = $port)
52
+            and (!$host or $host === 'localhost')
53
+        ) {
54
+            $link = @mysqli_connect($host, $login, $pass, '', null, $socket);
55
+        } elseif ($port) {
56
+            $link = @mysqli_connect($host, $login, $pass, '', $port);
57
+        } else {
58
+            $link = @mysqli_connect($host, $login, $pass);
59
+        }
60
+    } catch (\mysqli_sql_exception $e) {
61
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
62
+        $link = false;
63
+    }
64
+
65
+    if (!$link) {
66
+        spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
67
+
68
+        return false;
69
+    }
70
+    $last = '';
71
+    if (!$db) {
72
+        $ok = $link;
73
+        $db = 'spip';
74
+    } else {
75
+        $ok = mysqli_select_db($link, $db);
76
+        if (
77
+            defined('_MYSQL_SET_SQL_MODE')
78
+            or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
79
+        ) {
80
+            mysqli_query($link, $last = "set sql_mode=''");
81
+        }
82
+    }
83
+
84
+    spip_log(
85
+        "Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
86
+        _LOG_DEBUG
87
+    );
88
+
89
+    return !$ok ? false : [
90
+        'db' => $db,
91
+        'last' => $last,
92
+        'prefixe' => $prefixe ?: $db,
93
+        'link' => $link,
94
+        'total_requetes' => 0,
95
+    ];
96 96
 }
97 97
 
98 98
 
99 99
 $GLOBALS['spip_mysql_functions_1'] = [
100
-	'alter' => 'spip_mysql_alter',
101
-	'count' => 'spip_mysql_count',
102
-	'countsel' => 'spip_mysql_countsel',
103
-	'create' => 'spip_mysql_create',
104
-	'create_base' => 'spip_mysql_create_base',
105
-	'create_view' => 'spip_mysql_create_view',
106
-	'date_proche' => 'spip_mysql_date_proche',
107
-	'delete' => 'spip_mysql_delete',
108
-	'drop_table' => 'spip_mysql_drop_table',
109
-	'drop_view' => 'spip_mysql_drop_view',
110
-	'errno' => 'spip_mysql_errno',
111
-	'error' => 'spip_mysql_error',
112
-	'explain' => 'spip_mysql_explain',
113
-	'fetch' => 'spip_mysql_fetch',
114
-	'seek' => 'spip_mysql_seek',
115
-	'free' => 'spip_mysql_free',
116
-	'hex' => 'spip_mysql_hex',
117
-	'in' => 'spip_mysql_in',
118
-	'insert' => 'spip_mysql_insert',
119
-	'insertq' => 'spip_mysql_insertq',
120
-	'insertq_multi' => 'spip_mysql_insertq_multi',
121
-	'listdbs' => 'spip_mysql_listdbs',
122
-	'multi' => 'spip_mysql_multi',
123
-	'optimize' => 'spip_mysql_optimize',
124
-	'query' => 'spip_mysql_query',
125
-	'quote' => 'spip_mysql_quote',
126
-	'replace' => 'spip_mysql_replace',
127
-	'replace_multi' => 'spip_mysql_replace_multi',
128
-	'repair' => 'spip_mysql_repair',
129
-	'select' => 'spip_mysql_select',
130
-	'selectdb' => 'spip_mysql_selectdb',
131
-	'set_charset' => 'spip_mysql_set_charset',
132
-	'get_charset' => 'spip_mysql_get_charset',
133
-	'showbase' => 'spip_mysql_showbase',
134
-	'showtable' => 'spip_mysql_showtable',
135
-	'table_exists' => 'spip_mysql_table_exists',
136
-	'update' => 'spip_mysql_update',
137
-	'updateq' => 'spip_mysql_updateq',
138
-
139
-	// association de chaque nom http d'un charset aux couples MySQL
140
-	'charsets' => [
141
-		'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
142
-		'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
143
-		'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
144
-		'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
100
+    'alter' => 'spip_mysql_alter',
101
+    'count' => 'spip_mysql_count',
102
+    'countsel' => 'spip_mysql_countsel',
103
+    'create' => 'spip_mysql_create',
104
+    'create_base' => 'spip_mysql_create_base',
105
+    'create_view' => 'spip_mysql_create_view',
106
+    'date_proche' => 'spip_mysql_date_proche',
107
+    'delete' => 'spip_mysql_delete',
108
+    'drop_table' => 'spip_mysql_drop_table',
109
+    'drop_view' => 'spip_mysql_drop_view',
110
+    'errno' => 'spip_mysql_errno',
111
+    'error' => 'spip_mysql_error',
112
+    'explain' => 'spip_mysql_explain',
113
+    'fetch' => 'spip_mysql_fetch',
114
+    'seek' => 'spip_mysql_seek',
115
+    'free' => 'spip_mysql_free',
116
+    'hex' => 'spip_mysql_hex',
117
+    'in' => 'spip_mysql_in',
118
+    'insert' => 'spip_mysql_insert',
119
+    'insertq' => 'spip_mysql_insertq',
120
+    'insertq_multi' => 'spip_mysql_insertq_multi',
121
+    'listdbs' => 'spip_mysql_listdbs',
122
+    'multi' => 'spip_mysql_multi',
123
+    'optimize' => 'spip_mysql_optimize',
124
+    'query' => 'spip_mysql_query',
125
+    'quote' => 'spip_mysql_quote',
126
+    'replace' => 'spip_mysql_replace',
127
+    'replace_multi' => 'spip_mysql_replace_multi',
128
+    'repair' => 'spip_mysql_repair',
129
+    'select' => 'spip_mysql_select',
130
+    'selectdb' => 'spip_mysql_selectdb',
131
+    'set_charset' => 'spip_mysql_set_charset',
132
+    'get_charset' => 'spip_mysql_get_charset',
133
+    'showbase' => 'spip_mysql_showbase',
134
+    'showtable' => 'spip_mysql_showtable',
135
+    'table_exists' => 'spip_mysql_table_exists',
136
+    'update' => 'spip_mysql_update',
137
+    'updateq' => 'spip_mysql_updateq',
138
+
139
+    // association de chaque nom http d'un charset aux couples MySQL
140
+    'charsets' => [
141
+        'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
142
+        'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
143
+        'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
144
+        'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
145 145
 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
146
-		'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
146
+        'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
147 147
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
148
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
149
-	]
148
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
149
+    ]
150 150
 ];
151 151
 
152 152
 
@@ -157,9 +157,9 @@  discard block
 block discarded – undo
157 157
  * @return Object Information de connexion pour mysqli
158 158
  */
159 159
 function _mysql_link($serveur = '') {
160
-	$link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
160
+    $link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
161 161
 
162
-	return $link;
162
+    return $link;
163 163
 }
164 164
 
165 165
 
@@ -172,10 +172,10 @@  discard block
 block discarded – undo
172 172
  * @return mysqli_result|bool Jeu de résultats pour fetch()
173 173
  */
174 174
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
175
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
175
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
+    spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
177 177
 
178
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
178
+    return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
179 179
 }
180 180
 
181 181
 
@@ -188,11 +188,11 @@  discard block
 block discarded – undo
188 188
  * @return array Description du charset (son nom est dans 'charset')
189 189
  */
190 190
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
191
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192
-	$connexion['last'] = $c = 'SHOW CHARACTER SET'
193
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
191
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192
+    $connexion['last'] = $c = 'SHOW CHARACTER SET'
193
+        . (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
194 194
 
195
-	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
195
+    return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
196 196
 }
197 197
 
198 198
 /**
@@ -208,80 +208,80 @@  discard block
 block discarded – undo
208 208
  */
209 209
 function spip_mysql_query($query, $serveur = '', $requeter = true) {
210 210
 
211
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
212
-	$prefixe = $connexion['prefixe'];
213
-	$link = $connexion['link'];
214
-	$db = $connexion['db'];
215
-
216
-	$query = _mysql_traite_query($query, $db, $prefixe);
217
-
218
-	// renvoyer la requete inerte si demandee
219
-	if (!$requeter) {
220
-		return $query;
221
-	}
222
-
223
-	if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
224
-		include_spip('public/tracer');
225
-		$t = trace_query_start();
226
-	} else {
227
-		$t = 0;
228
-	}
229
-
230
-	$connexion['last'] = $query;
231
-	$connexion['total_requetes']++;
232
-
233
-	// ajouter un debug utile dans log/mysql-slow.log ?
234
-	$debug = '';
235
-	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236
-		if (isset($GLOBALS['debug']['aucasou'])) {
237
-			[, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
-			$debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
239
-		}
240
-		if (isset($_SERVER['REQUEST_URI'])) {
241
-			$debug .= $_SERVER['REQUEST_URI'];
242
-		}
243
-		if (!empty($GLOBALS['ip'])) {
244
-			$debug .= ' + ' . $GLOBALS['ip'];
245
-		}
246
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
247
-	}
248
-	try {
249
-		$r = mysqli_query($link, $query . $debug);
250
-	} catch (\mysqli_sql_exception $e) {
251
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
252
-		$r = false;
253
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
255
-	}
256
-
257
-	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
258
-	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
259
-		if ($e == 2006) { //Si Gone Away on relance une connexion vierge
260
-			//Fermer la connexion defaillante
261
-			mysqli_close($connexion['link']);
262
-			unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
263
-			//Relancer une connexion vierge
264
-			spip_connect($serveur);
265
-			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
266
-			$link = $connexion['link'];
267
-			//On retente au cas où
268
-			try {
269
-				$r = mysqli_query($link, $query . $debug);
270
-			} catch (\mysqli_sql_exception $e) {
271
-				spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
272
-				$r = false;
273
-				// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
274
-				// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
275
-			}
276
-		}
277
-	}
278
-
279
-	// Log de l'erreur eventuelle
280
-	if ($e = spip_mysql_errno($serveur)) {
281
-		// et du fautif
282
-		$e .= spip_mysql_error($query, $serveur);
283
-	}
284
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
211
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
212
+    $prefixe = $connexion['prefixe'];
213
+    $link = $connexion['link'];
214
+    $db = $connexion['db'];
215
+
216
+    $query = _mysql_traite_query($query, $db, $prefixe);
217
+
218
+    // renvoyer la requete inerte si demandee
219
+    if (!$requeter) {
220
+        return $query;
221
+    }
222
+
223
+    if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
224
+        include_spip('public/tracer');
225
+        $t = trace_query_start();
226
+    } else {
227
+        $t = 0;
228
+    }
229
+
230
+    $connexion['last'] = $query;
231
+    $connexion['total_requetes']++;
232
+
233
+    // ajouter un debug utile dans log/mysql-slow.log ?
234
+    $debug = '';
235
+    if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236
+        if (isset($GLOBALS['debug']['aucasou'])) {
237
+            [, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
+            $debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
239
+        }
240
+        if (isset($_SERVER['REQUEST_URI'])) {
241
+            $debug .= $_SERVER['REQUEST_URI'];
242
+        }
243
+        if (!empty($GLOBALS['ip'])) {
244
+            $debug .= ' + ' . $GLOBALS['ip'];
245
+        }
246
+        $debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
247
+    }
248
+    try {
249
+        $r = mysqli_query($link, $query . $debug);
250
+    } catch (\mysqli_sql_exception $e) {
251
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
252
+        $r = false;
253
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
255
+    }
256
+
257
+    //Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
258
+    if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
259
+        if ($e == 2006) { //Si Gone Away on relance une connexion vierge
260
+            //Fermer la connexion defaillante
261
+            mysqli_close($connexion['link']);
262
+            unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
263
+            //Relancer une connexion vierge
264
+            spip_connect($serveur);
265
+            $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
266
+            $link = $connexion['link'];
267
+            //On retente au cas où
268
+            try {
269
+                $r = mysqli_query($link, $query . $debug);
270
+            } catch (\mysqli_sql_exception $e) {
271
+                spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
272
+                $r = false;
273
+                // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
274
+                // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
275
+            }
276
+        }
277
+    }
278
+
279
+    // Log de l'erreur eventuelle
280
+    if ($e = spip_mysql_errno($serveur)) {
281
+        // et du fautif
282
+        $e .= spip_mysql_error($query, $serveur);
283
+    }
284
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
285 285
 }
286 286
 
287 287
 /**
@@ -296,12 +296,12 @@  discard block
 block discarded – undo
296 296
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
297 297
  */
298 298
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
299
-	// ici on supprime les ` entourant le nom de table pour permettre
300
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
301
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
302
-	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
299
+    // ici on supprime les ` entourant le nom de table pour permettre
300
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
301
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
302
+    $query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
303 303
 
304
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
304
+    return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
305 305
 }
306 306
 
307 307
 
@@ -314,9 +314,9 @@  discard block
 block discarded – undo
314 314
  * @return bool            Toujours true
315 315
  */
316 316
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
317
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
317
+    spip_mysql_query('OPTIMIZE TABLE ' . $table);
318 318
 
319
-	return true;
319
+    return true;
320 320
 }
321 321
 
322 322
 
@@ -329,18 +329,18 @@  discard block
 block discarded – undo
329 329
  * @return array           Tableau de l'explication
330 330
  */
331 331
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
332
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
333
-		return [];
334
-	}
335
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
336
-	$prefixe = $connexion['prefixe'];
337
-	$link = $connexion['link'];
338
-	$db = $connexion['db'];
339
-
340
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
341
-	$r = mysqli_query($link, $query);
342
-
343
-	return spip_mysql_fetch($r, null, $serveur);
332
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
333
+        return [];
334
+    }
335
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
336
+    $prefixe = $connexion['prefixe'];
337
+    $link = $connexion['link'];
338
+    $db = $connexion['db'];
339
+
340
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
341
+    $r = mysqli_query($link, $query);
342
+
343
+    return spip_mysql_fetch($r, null, $serveur);
344 344
 }
345 345
 
346 346
 
@@ -369,35 +369,35 @@  discard block
 block discarded – undo
369 369
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
370 370
  */
371 371
 function spip_mysql_select(
372
-	$select,
373
-	$from,
374
-	$where = '',
375
-	$groupby = '',
376
-	$orderby = '',
377
-	$limit = '',
378
-	$having = '',
379
-	$serveur = '',
380
-	$requeter = true
372
+    $select,
373
+    $from,
374
+    $where = '',
375
+    $groupby = '',
376
+    $orderby = '',
377
+    $limit = '',
378
+    $having = '',
379
+    $serveur = '',
380
+    $requeter = true
381 381
 ) {
382 382
 
383 383
 
384
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
385
-	$query =
386
-		calculer_mysql_expression('SELECT', $select, ', ')
387
-		. calculer_mysql_expression('FROM', $from, ', ')
388
-		. calculer_mysql_expression('WHERE', $where)
389
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
390
-		. calculer_mysql_expression('HAVING', $having)
391
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
392
-		. ($limit ? "\nLIMIT $limit" : '');
384
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
385
+    $query =
386
+        calculer_mysql_expression('SELECT', $select, ', ')
387
+        . calculer_mysql_expression('FROM', $from, ', ')
388
+        . calculer_mysql_expression('WHERE', $where)
389
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
390
+        . calculer_mysql_expression('HAVING', $having)
391
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
392
+        . ($limit ? "\nLIMIT $limit" : '');
393 393
 
394
-	// renvoyer la requete inerte si demandee
395
-	if ($requeter === false) {
396
-		return $query;
397
-	}
398
-	$r = spip_mysql_query($query, $serveur, $requeter);
394
+    // renvoyer la requete inerte si demandee
395
+    if ($requeter === false) {
396
+        return $query;
397
+    }
398
+    $r = spip_mysql_query($query, $serveur, $requeter);
399 399
 
400
-	return $r ?: $query;
400
+    return $r ?: $query;
401 401
 }
402 402
 
403 403
 
@@ -414,7 +414,7 @@  discard block
 block discarded – undo
414 414
  * @return string Texte du orderby préparé
415 415
  */
416 416
 function spip_mysql_order($orderby) {
417
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
417
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
418 418
 }
419 419
 
420 420
 
@@ -437,26 +437,26 @@  discard block
 block discarded – undo
437 437
  *     Contrainte pour clause WHERE
438 438
  */
439 439
 function calculer_mysql_where($v) {
440
-	if (!is_array($v)) {
441
-		return $v;
442
-	}
443
-
444
-	$op = array_shift($v);
445
-	if (!($n = count($v))) {
446
-		return $op;
447
-	} else {
448
-		$arg = calculer_mysql_where(array_shift($v));
449
-		if ($n == 1) {
450
-			return "$op($arg)";
451
-		} else {
452
-			$arg2 = calculer_mysql_where(array_shift($v));
453
-			if ($n == 2) {
454
-				return "($arg $op $arg2)";
455
-			} else {
456
-				return "($arg $op ($arg2) : $v[0])";
457
-			}
458
-		}
459
-	}
440
+    if (!is_array($v)) {
441
+        return $v;
442
+    }
443
+
444
+    $op = array_shift($v);
445
+    if (!($n = count($v))) {
446
+        return $op;
447
+    } else {
448
+        $arg = calculer_mysql_where(array_shift($v));
449
+        if ($n == 1) {
450
+            return "$op($arg)";
451
+        } else {
452
+            $arg2 = calculer_mysql_where(array_shift($v));
453
+            if ($n == 2) {
454
+                return "($arg $op $arg2)";
455
+            } else {
456
+                return "($arg $op ($arg2) : $v[0])";
457
+            }
458
+        }
459
+    }
460 460
 }
461 461
 
462 462
 /**
@@ -471,21 +471,21 @@  discard block
 block discarded – undo
471 471
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
472 472
  */
473 473
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
474
-	if (empty($v)) {
475
-		return '';
476
-	}
477
-
478
-	$exp = "\n$expression ";
479
-
480
-	if (!is_array($v)) {
481
-		return $exp . $v;
482
-	} else {
483
-		if (strtoupper($join) === 'AND') {
484
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
485
-		} else {
486
-			return $exp . join($join, $v);
487
-		}
488
-	}
474
+    if (empty($v)) {
475
+        return '';
476
+    }
477
+
478
+    $exp = "\n$expression ";
479
+
480
+    if (!is_array($v)) {
481
+        return $exp . $v;
482
+    } else {
483
+        if (strtoupper($join) === 'AND') {
484
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
485
+        } else {
486
+            return $exp . join($join, $v);
487
+        }
488
+    }
489 489
 }
490 490
 
491 491
 
@@ -496,26 +496,26 @@  discard block
 block discarded – undo
496 496
  * @return string Sélection de colonnes pour une clause SELECT
497 497
  */
498 498
 function spip_mysql_select_as($args) {
499
-	$res = '';
500
-	foreach ($args as $k => $v) {
501
-		if (substr($k, -1) == '@') {
502
-			// c'est une jointure qui se refere au from precedent
503
-			// pas de virgule
504
-			$res .= '  ' . $v;
505
-		} else {
506
-			if (!is_numeric($k)) {
507
-				$p = strpos($v, ' ');
508
-				if ($p) {
509
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
510
-				} else {
511
-					$v .= " AS `$k`";
512
-				}
513
-			}
514
-			$res .= ', ' . $v;
515
-		}
516
-	}
517
-
518
-	return substr($res, 2);
499
+    $res = '';
500
+    foreach ($args as $k => $v) {
501
+        if (substr($k, -1) == '@') {
502
+            // c'est une jointure qui se refere au from precedent
503
+            // pas de virgule
504
+            $res .= '  ' . $v;
505
+        } else {
506
+            if (!is_numeric($k)) {
507
+                $p = strpos($v, ' ');
508
+                if ($p) {
509
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
510
+                } else {
511
+                    $v .= " AS `$k`";
512
+                }
513
+            }
514
+            $res .= ', ' . $v;
515
+        }
516
+    }
517
+
518
+    return substr($res, 2);
519 519
 }
520 520
 
521 521
 
@@ -540,58 +540,58 @@  discard block
 block discarded – undo
540 540
  */
541 541
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
542 542
 
543
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
544
-		$pref = '`' . $db . '`.';
545
-	} else {
546
-		$pref = '';
547
-	}
548
-
549
-	if ($prefixe) {
550
-		$pref .= $prefixe . '_';
551
-	}
552
-
553
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
554
-		$suite = '';
555
-	} else {
556
-		$suite = strstr($query, (string) $regs[0]);
557
-		$query = substr($query, 0, -strlen($suite));
558
-		// propager le prefixe en cas de requete imbriquee
559
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
560
-		// modifier une requete qui est en fait juste du texte dans un champ
561
-		if (stripos($suite, 'SELECT') !== false) {
562
-			if ($echappe_textes) {
563
-				[$suite_echap, $textes] = query_echappe_textes($suite);
564
-			}
565
-			else {
566
-				$suite_echap = $suite;
567
-			}
568
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
569
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
570
-				if ($echappe_textes) {
571
-					$suite = query_reinjecte_textes($suite_echap, $textes);
572
-				}
573
-				else {
574
-					$suite = $suite_echap;
575
-				}
576
-			}
577
-		}
578
-	}
579
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
580
-
581
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
583
-	if (
584
-		defined('_MYSQL_NOPLANES')
585
-		and _MYSQL_NOPLANES
586
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
587
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
588
-	) {
589
-		include_spip('inc/charsets');
590
-		$r = utf8_noplanes($r);
591
-	}
592
-
593
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
594
-	return $r;
543
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
544
+        $pref = '`' . $db . '`.';
545
+    } else {
546
+        $pref = '';
547
+    }
548
+
549
+    if ($prefixe) {
550
+        $pref .= $prefixe . '_';
551
+    }
552
+
553
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
554
+        $suite = '';
555
+    } else {
556
+        $suite = strstr($query, (string) $regs[0]);
557
+        $query = substr($query, 0, -strlen($suite));
558
+        // propager le prefixe en cas de requete imbriquee
559
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
560
+        // modifier une requete qui est en fait juste du texte dans un champ
561
+        if (stripos($suite, 'SELECT') !== false) {
562
+            if ($echappe_textes) {
563
+                [$suite_echap, $textes] = query_echappe_textes($suite);
564
+            }
565
+            else {
566
+                $suite_echap = $suite;
567
+            }
568
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
569
+                $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
570
+                if ($echappe_textes) {
571
+                    $suite = query_reinjecte_textes($suite_echap, $textes);
572
+                }
573
+                else {
574
+                    $suite = $suite_echap;
575
+                }
576
+            }
577
+        }
578
+    }
579
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
580
+
581
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
583
+    if (
584
+        defined('_MYSQL_NOPLANES')
585
+        and _MYSQL_NOPLANES
586
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
587
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
588
+    ) {
589
+        include_spip('inc/charsets');
590
+        $r = utf8_noplanes($r);
591
+    }
592
+
593
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
594
+    return $r;
595 595
 }
596 596
 
597 597
 /**
@@ -609,17 +609,17 @@  discard block
 block discarded – undo
609 609
  *     - False en cas d'erreur.
610 610
  **/
611 611
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
612
-	$link = _mysql_link($serveur);
613
-	try {
614
-		$ok = mysqli_select_db($link, $db);
615
-	} catch (\mysqli_sql_exception $e) {
616
-		$ok = false;
617
-	}
618
-	if (!$ok) {
619
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
620
-	}
621
-
622
-	return $ok;
612
+    $link = _mysql_link($serveur);
613
+    try {
614
+        $ok = mysqli_select_db($link, $db);
615
+    } catch (\mysqli_sql_exception $e) {
616
+        $ok = false;
617
+    }
618
+    if (!$ok) {
619
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
620
+    }
621
+
622
+    return $ok;
623 623
 }
624 624
 
625 625
 
@@ -640,14 +640,14 @@  discard block
 block discarded – undo
640 640
  *     Liste de noms de bases de données
641 641
  **/
642 642
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
643
-	$dbs = [];
644
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
645
-		while ($row = mysqli_fetch_assoc($res)) {
646
-			$dbs[] = $row['Database'];
647
-		}
648
-	}
649
-
650
-	return $dbs;
643
+    $dbs = [];
644
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
645
+        while ($row = mysqli_fetch_assoc($res)) {
646
+            $dbs[] = $row['Database'];
647
+        }
648
+    }
649
+
650
+    return $dbs;
651 651
 }
652 652
 
653 653
 
@@ -670,73 +670,73 @@  discard block
 block discarded – undo
670 670
  *     - true si la requête réussie, false sinon.
671 671
  */
672 672
 function spip_mysql_create(
673
-	$nom,
674
-	$champs,
675
-	$cles,
676
-	$autoinc = false,
677
-	$temporary = false,
678
-	$serveur = '',
679
-	$requeter = true
673
+    $nom,
674
+    $champs,
675
+    $cles,
676
+    $autoinc = false,
677
+    $temporary = false,
678
+    $serveur = '',
679
+    $requeter = true
680 680
 ) {
681 681
 
682
-	$query = '';
683
-	$keys = '';
684
-	$s = '';
685
-	$p = '';
686
-
687
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
688
-	// sans les renseigner (laisse le compilo recuperer la description)
689
-	if (!is_array($champs) || !is_array($cles)) {
690
-		return;
691
-	}
692
-
693
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
694
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
695
-		spip_mysql_query("SET sql_mode=''", $serveur);
696
-	}
697
-
698
-	foreach ($cles as $k => $v) {
699
-		$keys .= "$s\n\t\t$k ($v)";
700
-		if ($k == 'PRIMARY KEY') {
701
-			$p = $v;
702
-		}
703
-		$s = ',';
704
-	}
705
-	$s = '';
706
-
707
-	$character_set = '';
708
-	if (@$GLOBALS['meta']['charset_sql_base']) {
709
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
710
-	}
711
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
712
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
713
-	}
714
-
715
-	foreach ($champs as $k => $v) {
716
-		$v = _mysql_remplacements_definitions_table($v);
717
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
718
-			if (
719
-				preg_match(',(char|text),i', $defs[1])
720
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
721
-			) {
722
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
723
-			}
724
-		}
725
-
726
-		$query .= "$s\n\t\t$k $v"
727
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
728
-				? ' auto_increment'
729
-				: ''
730
-			);
731
-		$s = ',';
732
-	}
733
-	$temporary = $temporary ? 'TEMPORARY' : '';
734
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
735
-		. (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
736
-		. ($character_set ? " DEFAULT $character_set" : '')
737
-		. "\n";
738
-
739
-	return spip_mysql_query($q, $serveur);
682
+    $query = '';
683
+    $keys = '';
684
+    $s = '';
685
+    $p = '';
686
+
687
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
688
+    // sans les renseigner (laisse le compilo recuperer la description)
689
+    if (!is_array($champs) || !is_array($cles)) {
690
+        return;
691
+    }
692
+
693
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
694
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
695
+        spip_mysql_query("SET sql_mode=''", $serveur);
696
+    }
697
+
698
+    foreach ($cles as $k => $v) {
699
+        $keys .= "$s\n\t\t$k ($v)";
700
+        if ($k == 'PRIMARY KEY') {
701
+            $p = $v;
702
+        }
703
+        $s = ',';
704
+    }
705
+    $s = '';
706
+
707
+    $character_set = '';
708
+    if (@$GLOBALS['meta']['charset_sql_base']) {
709
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
710
+    }
711
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
712
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
713
+    }
714
+
715
+    foreach ($champs as $k => $v) {
716
+        $v = _mysql_remplacements_definitions_table($v);
717
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
718
+            if (
719
+                preg_match(',(char|text),i', $defs[1])
720
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
721
+            ) {
722
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
723
+            }
724
+        }
725
+
726
+        $query .= "$s\n\t\t$k $v"
727
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
728
+                ? ' auto_increment'
729
+                : ''
730
+            );
731
+        $s = ',';
732
+    }
733
+    $temporary = $temporary ? 'TEMPORARY' : '';
734
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
735
+        . (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
736
+        . ($character_set ? " DEFAULT $character_set" : '')
737
+        . "\n";
738
+
739
+    return spip_mysql_query($q, $serveur);
740 740
 }
741 741
 
742 742
 
@@ -749,25 +749,25 @@  discard block
 block discarded – undo
749 749
  *     Définition SQL adaptée pour MySQL d'un champ de table
750 750
  */
751 751
 function _mysql_remplacements_definitions_table($query) {
752
-	// quelques remplacements
753
-	$num = '(\s*\([0-9]*\))?';
754
-	$enum = '(\s*\([^\)]*\))?';
755
-
756
-	$remplace = [
757
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
758
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
759
-	];
760
-
761
-	if (is_string($query)) {
762
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
763
-	} elseif (is_array($query)) {
764
-		$keys = array_keys($remplace);
765
-		foreach ($query as $k => $q) {
766
-			$query[$k] = preg_replace($keys, $remplace, $q);
767
-		}
768
-	}
769
-
770
-	return $query;
752
+    // quelques remplacements
753
+    $num = '(\s*\([0-9]*\))?';
754
+    $enum = '(\s*\([^\)]*\))?';
755
+
756
+    $remplace = [
757
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
758
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
759
+    ];
760
+
761
+    if (is_string($query)) {
762
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
763
+    } elseif (is_array($query)) {
764
+        $keys = array_keys($remplace);
765
+        foreach ($query as $k => $q) {
766
+            $query[$k] = preg_replace($keys, $remplace, $q);
767
+        }
768
+    }
769
+
770
+    return $query;
771 771
 }
772 772
 
773 773
 
@@ -780,7 +780,7 @@  discard block
 block discarded – undo
780 780
  * @return bool true si la base est créee.
781 781
  **/
782 782
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
783
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
783
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
784 784
 }
785 785
 
786 786
 
@@ -801,19 +801,19 @@  discard block
 block discarded – undo
801 801
  *     - string texte de la requête si $requeter vaut false
802 802
  */
803 803
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
804
-	if (!$query_select) {
805
-		return false;
806
-	}
807
-	// vue deja presente
808
-	if (sql_showtable($nom, false, $serveur)) {
809
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
804
+    if (!$query_select) {
805
+        return false;
806
+    }
807
+    // vue deja presente
808
+    if (sql_showtable($nom, false, $serveur)) {
809
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
810 810
 
811
-		return false;
812
-	}
811
+        return false;
812
+    }
813 813
 
814
-	$query = "CREATE VIEW $nom AS " . $query_select;
814
+    $query = "CREATE VIEW $nom AS " . $query_select;
815 815
 
816
-	return spip_mysql_query($query, $serveur, $requeter);
816
+    return spip_mysql_query($query, $serveur, $requeter);
817 817
 }
818 818
 
819 819
 
@@ -829,11 +829,11 @@  discard block
 block discarded – undo
829 829
  *     - true si la requête a réussie, false sinon
830 830
  */
831 831
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
832
-	if ($exist) {
833
-		$exist = ' IF EXISTS';
834
-	}
832
+    if ($exist) {
833
+        $exist = ' IF EXISTS';
834
+    }
835 835
 
836
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
836
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
837 837
 }
838 838
 
839 839
 /**
@@ -848,11 +848,11 @@  discard block
 block discarded – undo
848 848
  *     - true si la requête a réussie, false sinon
849 849
  */
850 850
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
851
-	if ($exist) {
852
-		$exist = ' IF EXISTS';
853
-	}
851
+    if ($exist) {
852
+        $exist = ' IF EXISTS';
853
+    }
854 854
 
855
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
855
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
856 856
 }
857 857
 
858 858
 /**
@@ -869,7 +869,7 @@  discard block
 block discarded – undo
869 869
  *     Ressource à utiliser avec sql_fetch()
870 870
  **/
871 871
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
872
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
872
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
873 873
 }
874 874
 
875 875
 /**
@@ -885,17 +885,17 @@  discard block
 block discarded – undo
885 885
  *     - true si la requête a réussie, false sinon
886 886
  */
887 887
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
888
-	$table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
889
-	$engine = $table_status['Engine'];
890
-	if ($engine == 'InnoDB') {
891
-		if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
892
-			return [' OK '];
893
-		}
894
-	} elseif ($engine == 'MyISAM') {
895
-		return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
896
-	} else {
897
-		spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
898
-	}
888
+    $table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
889
+    $engine = $table_status['Engine'];
890
+    if ($engine == 'InnoDB') {
891
+        if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
892
+            return [' OK '];
893
+        }
894
+    } elseif ($engine == 'MyISAM') {
895
+        return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
896
+    } else {
897
+        spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
898
+    }
899 899
 }
900 900
 
901 901
 /**
@@ -913,12 +913,12 @@  discard block
 block discarded – undo
913 913
  *     - string : requete sql, si $requeter = true
914 914
  **/
915 915
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
916
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
-	if (!$requeter) {
918
-		return $r;
919
-	}
920
-	$res = spip_mysql_fetch($r);
921
-	return (bool) $res;
916
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
+    if (!$requeter) {
918
+        return $r;
919
+    }
920
+    $res = spip_mysql_fetch($r);
921
+    return (bool) $res;
922 922
 }
923 923
 
924 924
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -941,86 +941,86 @@  discard block
 block discarded – undo
941 941
  *     - array description de la table sinon
942 942
  */
943 943
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
944
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
-	if (!$s) {
946
-		return '';
947
-	}
948
-	if (!$requeter) {
949
-		return $s;
950
-	}
951
-
952
-	[, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
-		$desc = $r[1];
955
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
956
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
-			$namedkeys = $r[2];
959
-			$desc = $r[1];
960
-		} else {
961
-			$namedkeys = '';
962
-		}
963
-
964
-		$fields = [];
965
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
966
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
-			$fields[strtolower($r[1])] = $r[2];
968
-		}
969
-		$keys = [];
970
-
971
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
-				$k = str_replace('`', '', trim($r[1]));
974
-				$t = strtolower(str_replace('`', '', $r[2]));
975
-				if ($k && !isset($keys[$k])) {
976
-					$keys[$k] = $t;
977
-				} else {
978
-					$keys[] = $t;
979
-				}
980
-			}
981
-		}
982
-		spip_mysql_free($s);
983
-
984
-		return ['field' => $fields, 'key' => $keys];
985
-	}
986
-
987
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
-	if ($res) {
989
-		$nfields = [];
990
-		$nkeys = [];
991
-		while ($val = spip_mysql_fetch($res)) {
992
-			$nfields[$val['Field']] = $val['Type'];
993
-			if ($val['Null'] == 'NO') {
994
-				$nfields[$val['Field']] .= ' NOT NULL';
995
-			}
996
-			if ($val['Default'] === '0' || $val['Default']) {
997
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
998
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
-				} else {
1000
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
-				}
1002
-			}
1003
-			if ($val['Extra']) {
1004
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
-			}
1006
-			if ($val['Key'] == 'PRI') {
1007
-				$nkeys['PRIMARY KEY'] = $val['Field'];
1008
-			} else {
1009
-				if ($val['Key'] == 'MUL') {
1010
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
-				} else {
1012
-					if ($val['Key'] == 'UNI') {
1013
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
-					}
1015
-				}
1016
-			}
1017
-		}
1018
-		spip_mysql_free($res);
1019
-
1020
-		return ['field' => $nfields, 'key' => $nkeys];
1021
-	}
1022
-
1023
-	return '';
944
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
+    if (!$s) {
946
+        return '';
947
+    }
948
+    if (!$requeter) {
949
+        return $s;
950
+    }
951
+
952
+    [, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
+        $desc = $r[1];
955
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
956
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
+            $namedkeys = $r[2];
959
+            $desc = $r[1];
960
+        } else {
961
+            $namedkeys = '';
962
+        }
963
+
964
+        $fields = [];
965
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
966
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
+            $fields[strtolower($r[1])] = $r[2];
968
+        }
969
+        $keys = [];
970
+
971
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
+                $k = str_replace('`', '', trim($r[1]));
974
+                $t = strtolower(str_replace('`', '', $r[2]));
975
+                if ($k && !isset($keys[$k])) {
976
+                    $keys[$k] = $t;
977
+                } else {
978
+                    $keys[] = $t;
979
+                }
980
+            }
981
+        }
982
+        spip_mysql_free($s);
983
+
984
+        return ['field' => $fields, 'key' => $keys];
985
+    }
986
+
987
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
+    if ($res) {
989
+        $nfields = [];
990
+        $nkeys = [];
991
+        while ($val = spip_mysql_fetch($res)) {
992
+            $nfields[$val['Field']] = $val['Type'];
993
+            if ($val['Null'] == 'NO') {
994
+                $nfields[$val['Field']] .= ' NOT NULL';
995
+            }
996
+            if ($val['Default'] === '0' || $val['Default']) {
997
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
998
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
+                } else {
1000
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
+                }
1002
+            }
1003
+            if ($val['Extra']) {
1004
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
+            }
1006
+            if ($val['Key'] == 'PRI') {
1007
+                $nkeys['PRIMARY KEY'] = $val['Field'];
1008
+            } else {
1009
+                if ($val['Key'] == 'MUL') {
1010
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
+                } else {
1012
+                    if ($val['Key'] == 'UNI') {
1013
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
+                    }
1015
+                }
1016
+            }
1017
+        }
1018
+        spip_mysql_free($res);
1019
+
1020
+        return ['field' => $nfields, 'key' => $nkeys];
1021
+    }
1022
+
1023
+    return '';
1024 1024
 }
1025 1025
 
1026 1026
 
@@ -1039,13 +1039,13 @@  discard block
 block discarded – undo
1039 1039
  *     - false Erreur
1040 1040
  */
1041 1041
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1042
-	if (!$t) {
1043
-		$t = \MYSQLI_ASSOC;
1044
-	}
1045
-	if ($r) {
1046
-		return mysqli_fetch_array($r, $t);
1047
-	}
1048
-	return false;
1042
+    if (!$t) {
1043
+        $t = \MYSQLI_ASSOC;
1044
+    }
1045
+    if ($r) {
1046
+        return mysqli_fetch_array($r, $t);
1047
+    }
1048
+    return false;
1049 1049
 }
1050 1050
 
1051 1051
 /**
@@ -1058,9 +1058,9 @@  discard block
 block discarded – undo
1058 1058
  * @return bool True si déplacement réussi, false sinon.
1059 1059
  **/
1060 1060
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1061
-	if ($r and mysqli_num_rows($r)) {
1062
-		return mysqli_data_seek($r, $row_number);
1063
-	}
1061
+    if ($r and mysqli_num_rows($r)) {
1062
+        return mysqli_data_seek($r, $row_number);
1063
+    }
1064 1064
 }
1065 1065
 
1066 1066
 
@@ -1078,26 +1078,26 @@  discard block
 block discarded – undo
1078 1078
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1079 1079
  **/
1080 1080
 function spip_mysql_countsel(
1081
-	$from = [],
1082
-	$where = [],
1083
-	$groupby = '',
1084
-	$having = [],
1085
-	$serveur = '',
1086
-	$requeter = true
1081
+    $from = [],
1082
+    $where = [],
1083
+    $groupby = '',
1084
+    $having = [],
1085
+    $serveur = '',
1086
+    $requeter = true
1087 1087
 ) {
1088
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1089
-
1090
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1091
-	if (!$requeter) {
1092
-		return $r;
1093
-	}
1094
-	if (!$r instanceof mysqli_result) {
1095
-		return 0;
1096
-	}
1097
-	[$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1098
-	mysqli_free_result($r);
1099
-
1100
-	return intval($c);
1088
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1089
+
1090
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1091
+    if (!$requeter) {
1092
+        return $r;
1093
+    }
1094
+    if (!$r instanceof mysqli_result) {
1095
+        return 0;
1096
+    }
1097
+    [$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1098
+    mysqli_free_result($r);
1099
+
1100
+    return intval($c);
1101 1101
 }
1102 1102
 
1103 1103
 
@@ -1120,16 +1120,16 @@  discard block
 block discarded – undo
1120 1120
  *     Erreur eventuelle
1121 1121
  **/
1122 1122
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1123
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1124
-	$s = mysqli_error($link);
1125
-	if ($s) {
1126
-		$trace = debug_backtrace();
1127
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1128
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1129
-		}
1130
-	}
1131
-
1132
-	return $s;
1123
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1124
+    $s = mysqli_error($link);
1125
+    if ($s) {
1126
+        $trace = debug_backtrace();
1127
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1128
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1129
+        }
1130
+    }
1131
+
1132
+    return $s;
1133 1133
 }
1134 1134
 
1135 1135
 
@@ -1144,18 +1144,18 @@  discard block
 block discarded – undo
1144 1144
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1145 1145
  **/
1146 1146
 function spip_mysql_errno($serveur = '', $requeter = true) {
1147
-	$link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1148
-	$s = mysqli_errno($link);
1149
-	// 2006 MySQL server has gone away
1150
-	// 2013 Lost connection to MySQL server during query
1151
-	if (in_array($s, [2006, 2013])) {
1152
-		define('spip_interdire_cache', true);
1153
-	}
1154
-	if ($s) {
1155
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1156
-	}
1157
-
1158
-	return $s;
1147
+    $link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1148
+    $s = mysqli_errno($link);
1149
+    // 2006 MySQL server has gone away
1150
+    // 2013 Lost connection to MySQL server during query
1151
+    if (in_array($s, [2006, 2013])) {
1152
+        define('spip_interdire_cache', true);
1153
+    }
1154
+    if ($s) {
1155
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1156
+    }
1157
+
1158
+    return $s;
1159 1159
 }
1160 1160
 
1161 1161
 
@@ -1169,9 +1169,9 @@  discard block
 block discarded – undo
1169 1169
  * @return int               Nombre de lignes
1170 1170
  */
1171 1171
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1172
-	if ($r) {
1173
-		return mysqli_num_rows($r);
1174
-	}
1172
+    if ($r) {
1173
+        return mysqli_num_rows($r);
1174
+    }
1175 1175
 }
1176 1176
 
1177 1177
 
@@ -1187,7 +1187,7 @@  discard block
 block discarded – undo
1187 1187
  * @return bool              True si réussi
1188 1188
  */
1189 1189
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1190
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1190
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1191 1191
 }
1192 1192
 
1193 1193
 
@@ -1215,59 +1215,59 @@  discard block
 block discarded – undo
1215 1215
  **/
1216 1216
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1217 1217
 
1218
-	$e = null;
1219
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1220
-	$link = $connexion['link'];
1221
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1222
-
1223
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1224
-	if (
1225
-		defined('_MYSQL_NOPLANES')
1226
-		and _MYSQL_NOPLANES
1227
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1228
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1229
-	) {
1230
-		include_spip('inc/charsets');
1231
-		$valeurs = utf8_noplanes($valeurs);
1232
-	}
1233
-
1234
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1235
-	if (!$requeter) {
1236
-		return $query;
1237
-	}
1238
-
1239
-	if (isset($_GET['var_profile'])) {
1240
-		include_spip('public/tracer');
1241
-		$t = trace_query_start();
1242
-		$e = '';
1243
-	} else {
1244
-		$t = 0;
1245
-	}
1246
-
1247
-	$connexion['last'] = $query;
1248
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1249
-	$r = false;
1250
-	$insert = false;
1251
-	try {
1252
-		$insert = mysqli_query($link, $query);
1253
-	} catch (\mysqli_sql_exception $e) {
1254
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1255
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1256
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1257
-	}
1258
-	if ($insert) {
1259
-		$r = mysqli_insert_id($link);
1260
-	} else {
1261
-		// Log de l'erreur eventuelle
1262
-		if ($e = spip_mysql_errno($serveur)) {
1263
-			// et du fautif
1264
-			$e .= spip_mysql_error($query, $serveur);
1265
-		}
1266
-	}
1267
-
1268
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1269
-
1270
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1218
+    $e = null;
1219
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1220
+    $link = $connexion['link'];
1221
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1222
+
1223
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1224
+    if (
1225
+        defined('_MYSQL_NOPLANES')
1226
+        and _MYSQL_NOPLANES
1227
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1228
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1229
+    ) {
1230
+        include_spip('inc/charsets');
1231
+        $valeurs = utf8_noplanes($valeurs);
1232
+    }
1233
+
1234
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1235
+    if (!$requeter) {
1236
+        return $query;
1237
+    }
1238
+
1239
+    if (isset($_GET['var_profile'])) {
1240
+        include_spip('public/tracer');
1241
+        $t = trace_query_start();
1242
+        $e = '';
1243
+    } else {
1244
+        $t = 0;
1245
+    }
1246
+
1247
+    $connexion['last'] = $query;
1248
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1249
+    $r = false;
1250
+    $insert = false;
1251
+    try {
1252
+        $insert = mysqli_query($link, $query);
1253
+    } catch (\mysqli_sql_exception $e) {
1254
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1255
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1256
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1257
+    }
1258
+    if ($insert) {
1259
+        $r = mysqli_insert_id($link);
1260
+    } else {
1261
+        // Log de l'erreur eventuelle
1262
+        if ($e = spip_mysql_errno($serveur)) {
1263
+            // et du fautif
1264
+            $e .= spip_mysql_error($query, $serveur);
1265
+        }
1266
+    }
1267
+
1268
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1269
+
1270
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1271 1271
 }
1272 1272
 
1273 1273
 /**
@@ -1292,26 +1292,26 @@  discard block
 block discarded – undo
1292 1292
  **/
1293 1293
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1294 1294
 
1295
-	if (!$desc) {
1296
-		$desc = description_table($table, $serveur);
1297
-	}
1298
-	if (!$desc) {
1299
-		$couples = [];
1300
-	}
1301
-	$fields = $desc['field'] ?? [];
1302
-
1303
-	foreach ($couples as $champ => $val) {
1304
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1305
-	}
1306
-
1307
-	return spip_mysql_insert(
1308
-		$table,
1309
-		'(' . join(',', array_keys($couples)) . ')',
1310
-		'(' . join(',', $couples) . ')',
1311
-		$desc,
1312
-		$serveur,
1313
-		$requeter
1314
-	);
1295
+    if (!$desc) {
1296
+        $desc = description_table($table, $serveur);
1297
+    }
1298
+    if (!$desc) {
1299
+        $couples = [];
1300
+    }
1301
+    $fields = $desc['field'] ?? [];
1302
+
1303
+    foreach ($couples as $champ => $val) {
1304
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1305
+    }
1306
+
1307
+    return spip_mysql_insert(
1308
+        $table,
1309
+        '(' . join(',', array_keys($couples)) . ')',
1310
+        '(' . join(',', $couples) . ')',
1311
+        $desc,
1312
+        $serveur,
1313
+        $requeter
1314
+    );
1315 1315
 }
1316 1316
 
1317 1317
 
@@ -1336,34 +1336,34 @@  discard block
 block discarded – undo
1336 1336
  **/
1337 1337
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1338 1338
 
1339
-	if (!$desc) {
1340
-		$desc = description_table($table, $serveur);
1341
-	}
1342
-	if (!$desc) {
1343
-		$tab_couples = [];
1344
-	}
1345
-	$fields = $desc['field'] ?? [];
1346
-
1347
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1348
-	$valeurs = [];
1349
-	$r = false;
1350
-
1351
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1352
-	foreach ($tab_couples as $couples) {
1353
-		foreach ($couples as $champ => $val) {
1354
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1355
-		}
1356
-		$valeurs[] = '(' . join(',', $couples) . ')';
1357
-		if (count($valeurs) >= 100) {
1358
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1359
-			$valeurs = [];
1360
-		}
1361
-	}
1362
-	if (count($valeurs)) {
1363
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
-	}
1365
-
1366
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1339
+    if (!$desc) {
1340
+        $desc = description_table($table, $serveur);
1341
+    }
1342
+    if (!$desc) {
1343
+        $tab_couples = [];
1344
+    }
1345
+    $fields = $desc['field'] ?? [];
1346
+
1347
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1348
+    $valeurs = [];
1349
+    $r = false;
1350
+
1351
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1352
+    foreach ($tab_couples as $couples) {
1353
+        foreach ($couples as $champ => $val) {
1354
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1355
+        }
1356
+        $valeurs[] = '(' . join(',', $couples) . ')';
1357
+        if (count($valeurs) >= 100) {
1358
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1359
+            $valeurs = [];
1360
+        }
1361
+    }
1362
+    if (count($valeurs)) {
1363
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
+    }
1365
+
1366
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1367 1367
 }
1368 1368
 
1369 1369
 /**
@@ -1388,19 +1388,19 @@  discard block
 block discarded – undo
1388 1388
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1389 1389
  */
1390 1390
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1391
-	$set = [];
1392
-	foreach ($champs as $champ => $val) {
1393
-		$set[] = $champ . "=$val";
1394
-	}
1395
-	if (!empty($set)) {
1396
-		return spip_mysql_query(
1397
-			calculer_mysql_expression('UPDATE', $table, ',')
1398
-			. calculer_mysql_expression('SET', $set, ',')
1399
-			. calculer_mysql_expression('WHERE', $where),
1400
-			$serveur,
1401
-			$requeter
1402
-		);
1403
-	}
1391
+    $set = [];
1392
+    foreach ($champs as $champ => $val) {
1393
+        $set[] = $champ . "=$val";
1394
+    }
1395
+    if (!empty($set)) {
1396
+        return spip_mysql_query(
1397
+            calculer_mysql_expression('UPDATE', $table, ',')
1398
+            . calculer_mysql_expression('SET', $set, ',')
1399
+            . calculer_mysql_expression('WHERE', $where),
1400
+            $serveur,
1401
+            $requeter
1402
+        );
1403
+    }
1404 1404
 }
1405 1405
 
1406 1406
 /**
@@ -1433,29 +1433,29 @@  discard block
 block discarded – undo
1433 1433
  */
1434 1434
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1435 1435
 
1436
-	if (!$champs) {
1437
-		return;
1438
-	}
1439
-	if (!$desc) {
1440
-		$desc = description_table($table, $serveur);
1441
-	}
1442
-	if (!$desc) {
1443
-		$champs = [];
1444
-	} else {
1445
-		$fields = $desc['field'];
1446
-	}
1447
-	$set = [];
1448
-	foreach ($champs as $champ => $val) {
1449
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1450
-	}
1451
-
1452
-	return spip_mysql_query(
1453
-		calculer_mysql_expression('UPDATE', $table, ',')
1454
-		. calculer_mysql_expression('SET', $set, ',')
1455
-		. calculer_mysql_expression('WHERE', $where),
1456
-		$serveur,
1457
-		$requeter
1458
-	);
1436
+    if (!$champs) {
1437
+        return;
1438
+    }
1439
+    if (!$desc) {
1440
+        $desc = description_table($table, $serveur);
1441
+    }
1442
+    if (!$desc) {
1443
+        $champs = [];
1444
+    } else {
1445
+        $fields = $desc['field'];
1446
+    }
1447
+    $set = [];
1448
+    foreach ($champs as $champ => $val) {
1449
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1450
+    }
1451
+
1452
+    return spip_mysql_query(
1453
+        calculer_mysql_expression('UPDATE', $table, ',')
1454
+        . calculer_mysql_expression('SET', $set, ',')
1455
+        . calculer_mysql_expression('WHERE', $where),
1456
+        $serveur,
1457
+        $requeter
1458
+    );
1459 1459
 }
1460 1460
 
1461 1461
 /**
@@ -1471,22 +1471,22 @@  discard block
 block discarded – undo
1471 1471
  *     - False en cas d'erreur.
1472 1472
  **/
1473 1473
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1474
-	$res = spip_mysql_query(
1475
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1476
-		. calculer_mysql_expression('WHERE', $where),
1477
-		$serveur,
1478
-		$requeter
1479
-	);
1480
-	if (!$requeter) {
1481
-		return $res;
1482
-	}
1483
-	if ($res) {
1484
-		$link = _mysql_link($serveur);
1485
-
1486
-		return mysqli_affected_rows($link);
1487
-	} else {
1488
-		return false;
1489
-	}
1474
+    $res = spip_mysql_query(
1475
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1476
+        . calculer_mysql_expression('WHERE', $where),
1477
+        $serveur,
1478
+        $requeter
1479
+    );
1480
+    if (!$requeter) {
1481
+        return $res;
1482
+    }
1483
+    if ($res) {
1484
+        $link = _mysql_link($serveur);
1485
+
1486
+        return mysqli_affected_rows($link);
1487
+    } else {
1488
+        return false;
1489
+    }
1490 1490
 }
1491 1491
 
1492 1492
 
@@ -1515,10 +1515,10 @@  discard block
 block discarded – undo
1515 1515
  *     - False en cas d'erreur.
1516 1516
  **/
1517 1517
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1518
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1519
-		',',
1520
-		array_map('_q', $couples)
1521
-	) . ')', $serveur, $requeter);
1518
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1519
+        ',',
1520
+        array_map('_q', $couples)
1521
+    ) . ')', $serveur, $requeter);
1522 1522
 }
1523 1523
 
1524 1524
 
@@ -1547,14 +1547,14 @@  discard block
 block discarded – undo
1547 1547
  *     - False en cas d'erreur.
1548 1548
  **/
1549 1549
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1550
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1551
-	$valeurs = [];
1552
-	foreach ($tab_couples as $couples) {
1553
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1554
-	}
1555
-	$valeurs = implode(', ', $valeurs);
1556
-
1557
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1550
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1551
+    $valeurs = [];
1552
+    foreach ($tab_couples as $couples) {
1553
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1554
+    }
1555
+    $valeurs = implode(', ', $valeurs);
1556
+
1557
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1558 1558
 }
1559 1559
 
1560 1560
 
@@ -1569,32 +1569,32 @@  discard block
 block discarded – undo
1569 1569
  * @return string       Texte de sélection pour la requête
1570 1570
  */
1571 1571
 function spip_mysql_multi($objet, $lang) {
1572
-	$lengthlang = strlen("[$lang]");
1573
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1574
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1575
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1576
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1577
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1579
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1580
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1582
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1583
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1584
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1585
-		'     TRIM(' . $objet . '), ' .
1586
-		'     CONCAT( ' .
1587
-		"          $debutchaine, " .
1588
-		'          IF( ' .
1589
-		"               $poslang = 0, " .
1590
-		"                     $chainemulti, " .
1591
-		"               $chainelang" .
1592
-		'          ), ' .
1593
-		"          $finchaine" .
1594
-		'     ) ' .
1595
-		'))) AS multi';
1596
-
1597
-	return $retour;
1572
+    $lengthlang = strlen("[$lang]");
1573
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1574
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1575
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1576
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1577
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1579
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1580
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1582
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1583
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1584
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1585
+        '     TRIM(' . $objet . '), ' .
1586
+        '     CONCAT( ' .
1587
+        "          $debutchaine, " .
1588
+        '          IF( ' .
1589
+        "               $poslang = 0, " .
1590
+        "                     $chainemulti, " .
1591
+        "               $chainelang" .
1592
+        '          ), ' .
1593
+        "          $finchaine" .
1594
+        '     ) ' .
1595
+        '))) AS multi';
1596
+
1597
+    return $retour;
1598 1598
 }
1599 1599
 
1600 1600
 /**
@@ -1608,7 +1608,7 @@  discard block
 block discarded – undo
1608 1608
  *     Valeur hexadécimale pour MySQL
1609 1609
  **/
1610 1610
 function spip_mysql_hex($v) {
1611
-	return '0x' . $v;
1611
+    return '0x' . $v;
1612 1612
 }
1613 1613
 
1614 1614
 /**
@@ -1624,15 +1624,15 @@  discard block
 block discarded – undo
1624 1624
  *    Donnée prête à être utilisée par le gestionnaire SQL
1625 1625
  */
1626 1626
 function spip_mysql_quote($v, $type = '') {
1627
-	if (!is_array($v)) {
1628
-		return spip_mysql_cite($v, $type);
1629
-	}
1630
-
1631
-	// si c'est un tableau, le parcourir en propageant le type
1632
-	foreach ($v as $k => $r) {
1633
-		$v[$k] = spip_mysql_quote($r, $type);
1634
-	}
1635
-	return implode(',', $v);
1627
+    if (!is_array($v)) {
1628
+        return spip_mysql_cite($v, $type);
1629
+    }
1630
+
1631
+    // si c'est un tableau, le parcourir en propageant le type
1632
+    foreach ($v as $k => $r) {
1633
+        $v[$k] = spip_mysql_quote($r, $type);
1634
+    }
1635
+    return implode(',', $v);
1636 1636
 }
1637 1637
 
1638 1638
 /**
@@ -1648,18 +1648,18 @@  discard block
 block discarded – undo
1648 1648
  *     Expression SQL
1649 1649
  **/
1650 1650
 function spip_mysql_date_proche($champ, $interval, $unite) {
1651
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1652
-	return '('
1653
-	. $champ
1654
-	. (($interval <= 0) ? '>' : '<')
1655
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1656
-	. '('
1657
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1658
-	. ', INTERVAL '
1659
-	. (($interval > 0) ? $interval : (0 - $interval))
1660
-	. ' '
1661
-	. $unite
1662
-	. '))';
1651
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1652
+    return '('
1653
+    . $champ
1654
+    . (($interval <= 0) ? '>' : '<')
1655
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1656
+    . '('
1657
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1658
+    . ', INTERVAL '
1659
+    . (($interval > 0) ? $interval : (0 - $interval))
1660
+    . ' '
1661
+    . $unite
1662
+    . '))';
1663 1663
 }
1664 1664
 
1665 1665
 
@@ -1683,7 +1683,7 @@  discard block
 block discarded – undo
1683 1683
  *     Expression de requête SQL
1684 1684
  **/
1685 1685
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1686
-	return "($val $not IN ($valeurs))";
1686
+    return "($val $not IN ($valeurs))";
1687 1687
 }
1688 1688
 
1689 1689
 
@@ -1695,39 +1695,39 @@  discard block
 block discarded – undo
1695 1695
  * @return string|number     Texte ou nombre échappé
1696 1696
  */
1697 1697
 function spip_mysql_cite($v, $type) {
1698
-	if (!$type) {
1699
-		if (is_bool($v)) {
1700
-			return strval(intval($v));
1701
-		} elseif (is_numeric($v)) {
1702
-			return strval($v);
1703
-		} elseif ($v === null) {
1704
-			return "''";
1705
-		}
1706
-		return "'" . addslashes($v) . "'";
1707
-	}
1708
-
1709
-	if ($v === null) {
1710
-		if (stripos($type, 'NOT NULL') === false) {
1711
-			// null php se traduit en NULL SQL
1712
-			return 'NULL';
1713
-		} else {
1714
-			return "''";
1715
-		}
1716
-	} elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1717
-		return $v;
1718
-	} elseif (sql_test_int($type)) {
1719
-		if (
1720
-			is_numeric($v)
1721
-			or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1722
-		) {
1723
-			return $v;
1724
-		} else {
1725
-			// si pas numerique, forcer le intval
1726
-			return intval($v);
1727
-		}
1728
-	}
1729
-
1730
-	return ("'" . addslashes($v) . "'");
1698
+    if (!$type) {
1699
+        if (is_bool($v)) {
1700
+            return strval(intval($v));
1701
+        } elseif (is_numeric($v)) {
1702
+            return strval($v);
1703
+        } elseif ($v === null) {
1704
+            return "''";
1705
+        }
1706
+        return "'" . addslashes($v) . "'";
1707
+    }
1708
+
1709
+    if ($v === null) {
1710
+        if (stripos($type, 'NOT NULL') === false) {
1711
+            // null php se traduit en NULL SQL
1712
+            return 'NULL';
1713
+        } else {
1714
+            return "''";
1715
+        }
1716
+    } elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1717
+        return $v;
1718
+    } elseif (sql_test_int($type)) {
1719
+        if (
1720
+            is_numeric($v)
1721
+            or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1722
+        ) {
1723
+            return $v;
1724
+        } else {
1725
+            // si pas numerique, forcer le intval
1726
+            return intval($v);
1727
+        }
1728
+    }
1729
+
1730
+    return ("'" . addslashes($v) . "'");
1731 1731
 }
1732 1732
 
1733 1733
 /**
@@ -1737,7 +1737,7 @@  discard block
 block discarded – undo
1737 1737
  *     True si on a les fonctions, false sinon
1738 1738
  */
1739 1739
 function spip_versions_mysql() {
1740
-	return function_exists('mysqli_query');
1740
+    return function_exists('mysqli_query');
1741 1741
 }
1742 1742
 
1743 1743
 
@@ -1750,20 +1750,20 @@  discard block
 block discarded – undo
1750 1750
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1751 1751
  */
1752 1752
 function test_rappel_nom_base_mysql($server_db) {
1753
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1754
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1755
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1753
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1754
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1755
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1756 1756
 
1757
-	if ($ok) {
1758
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1757
+    if ($ok) {
1758
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1759 1759
 
1760
-		return '';
1761
-	} else {
1762
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1760
+        return '';
1761
+    } else {
1762
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1763 1763
 
1764
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1765
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1766
-	}
1764
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1765
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1766
+    }
1767 1767
 }
1768 1768
 
1769 1769
 /**
@@ -1777,13 +1777,13 @@  discard block
 block discarded – undo
1777 1777
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1778 1778
  */
1779 1779
 function test_sql_mode_mysql($server_db) {
1780
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1781
-	$row = sql_fetch($res, $server_db);
1782
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1783
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1780
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1781
+    $row = sql_fetch($res, $server_db);
1782
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1783
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1784 1784
 
1785
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1786
-	}
1785
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1786
+    }
1787 1787
 
1788
-	return '';
1788
+    return '';
1789 1789
 }
Please login to merge, or discard this patch.