Completed
Push — master ( 1356d3...a4fdb4 )
by cam
01:00
created
ecrire/req/mysql.php 2 patches
Indentation   +854 added lines, -854 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 resource       Ressource 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,73 +208,73 @@  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
-			$r = mysqli_query($link, $query . $debug);
269
-		}
270
-	}
271
-
272
-	// Log de l'erreur eventuelle
273
-	if ($e = spip_mysql_errno($serveur)) {
274
-		// et du fautif
275
-		$e .= spip_mysql_error($query, $serveur);
276
-	} 
277
-	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
+            $r = mysqli_query($link, $query . $debug);
269
+        }
270
+    }
271
+
272
+    // Log de l'erreur eventuelle
273
+    if ($e = spip_mysql_errno($serveur)) {
274
+        // et du fautif
275
+        $e .= spip_mysql_error($query, $serveur);
276
+    } 
277
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
278 278
 }
279 279
 
280 280
 /**
@@ -289,12 +289,12 @@  discard block
 block discarded – undo
289 289
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
290 290
  */
291 291
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
292
-	// ici on supprime les ` entourant le nom de table pour permettre
293
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
294
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
295
-	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
292
+    // ici on supprime les ` entourant le nom de table pour permettre
293
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
294
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
295
+    $query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
296 296
 
297
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
297
+    return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
298 298
 }
299 299
 
300 300
 
@@ -307,9 +307,9 @@  discard block
 block discarded – undo
307 307
  * @return bool            Toujours true
308 308
  */
309 309
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
310
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
310
+    spip_mysql_query('OPTIMIZE TABLE ' . $table);
311 311
 
312
-	return true;
312
+    return true;
313 313
 }
314 314
 
315 315
 
@@ -322,18 +322,18 @@  discard block
 block discarded – undo
322 322
  * @return array           Tableau de l'explication
323 323
  */
324 324
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
325
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
326
-		return [];
327
-	}
328
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
329
-	$prefixe = $connexion['prefixe'];
330
-	$link = $connexion['link'];
331
-	$db = $connexion['db'];
332
-
333
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
334
-	$r = mysqli_query($link, $query);
335
-
336
-	return spip_mysql_fetch($r, null, $serveur);
325
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
326
+        return [];
327
+    }
328
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
329
+    $prefixe = $connexion['prefixe'];
330
+    $link = $connexion['link'];
331
+    $db = $connexion['db'];
332
+
333
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
334
+    $r = mysqli_query($link, $query);
335
+
336
+    return spip_mysql_fetch($r, null, $serveur);
337 337
 }
338 338
 
339 339
 
@@ -362,35 +362,35 @@  discard block
 block discarded – undo
362 362
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
363 363
  */
364 364
 function spip_mysql_select(
365
-	$select,
366
-	$from,
367
-	$where = '',
368
-	$groupby = '',
369
-	$orderby = '',
370
-	$limit = '',
371
-	$having = '',
372
-	$serveur = '',
373
-	$requeter = true
365
+    $select,
366
+    $from,
367
+    $where = '',
368
+    $groupby = '',
369
+    $orderby = '',
370
+    $limit = '',
371
+    $having = '',
372
+    $serveur = '',
373
+    $requeter = true
374 374
 ) {
375 375
 
376 376
 
377
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
378
-	$query =
379
-		calculer_mysql_expression('SELECT', $select, ', ')
380
-		. calculer_mysql_expression('FROM', $from, ', ')
381
-		. calculer_mysql_expression('WHERE', $where)
382
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
383
-		. calculer_mysql_expression('HAVING', $having)
384
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
385
-		. ($limit ? "\nLIMIT $limit" : '');
377
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
378
+    $query =
379
+        calculer_mysql_expression('SELECT', $select, ', ')
380
+        . calculer_mysql_expression('FROM', $from, ', ')
381
+        . calculer_mysql_expression('WHERE', $where)
382
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
383
+        . calculer_mysql_expression('HAVING', $having)
384
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
385
+        . ($limit ? "\nLIMIT $limit" : '');
386 386
 
387
-	// renvoyer la requete inerte si demandee
388
-	if ($requeter === false) {
389
-		return $query;
390
-	}
391
-	$r = spip_mysql_query($query, $serveur, $requeter);
387
+    // renvoyer la requete inerte si demandee
388
+    if ($requeter === false) {
389
+        return $query;
390
+    }
391
+    $r = spip_mysql_query($query, $serveur, $requeter);
392 392
 
393
-	return $r ?: $query;
393
+    return $r ?: $query;
394 394
 }
395 395
 
396 396
 
@@ -407,7 +407,7 @@  discard block
 block discarded – undo
407 407
  * @return string Texte du orderby préparé
408 408
  */
409 409
 function spip_mysql_order($orderby) {
410
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
410
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
411 411
 }
412 412
 
413 413
 
@@ -430,26 +430,26 @@  discard block
 block discarded – undo
430 430
  *     Contrainte pour clause WHERE
431 431
  */
432 432
 function calculer_mysql_where($v) {
433
-	if (!is_array($v)) {
434
-		return $v;
435
-	}
436
-
437
-	$op = array_shift($v);
438
-	if (!($n = count($v))) {
439
-		return $op;
440
-	} else {
441
-		$arg = calculer_mysql_where(array_shift($v));
442
-		if ($n == 1) {
443
-			return "$op($arg)";
444
-		} else {
445
-			$arg2 = calculer_mysql_where(array_shift($v));
446
-			if ($n == 2) {
447
-				return "($arg $op $arg2)";
448
-			} else {
449
-				return "($arg $op ($arg2) : $v[0])";
450
-			}
451
-		}
452
-	}
433
+    if (!is_array($v)) {
434
+        return $v;
435
+    }
436
+
437
+    $op = array_shift($v);
438
+    if (!($n = count($v))) {
439
+        return $op;
440
+    } else {
441
+        $arg = calculer_mysql_where(array_shift($v));
442
+        if ($n == 1) {
443
+            return "$op($arg)";
444
+        } else {
445
+            $arg2 = calculer_mysql_where(array_shift($v));
446
+            if ($n == 2) {
447
+                return "($arg $op $arg2)";
448
+            } else {
449
+                return "($arg $op ($arg2) : $v[0])";
450
+            }
451
+        }
452
+    }
453 453
 }
454 454
 
455 455
 /**
@@ -464,21 +464,21 @@  discard block
 block discarded – undo
464 464
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
465 465
  */
466 466
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
467
-	if (empty($v)) {
468
-		return '';
469
-	}
470
-
471
-	$exp = "\n$expression ";
472
-
473
-	if (!is_array($v)) {
474
-		return $exp . $v;
475
-	} else {
476
-		if (strtoupper($join) === 'AND') {
477
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
478
-		} else {
479
-			return $exp . join($join, $v);
480
-		}
481
-	}
467
+    if (empty($v)) {
468
+        return '';
469
+    }
470
+
471
+    $exp = "\n$expression ";
472
+
473
+    if (!is_array($v)) {
474
+        return $exp . $v;
475
+    } else {
476
+        if (strtoupper($join) === 'AND') {
477
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
478
+        } else {
479
+            return $exp . join($join, $v);
480
+        }
481
+    }
482 482
 }
483 483
 
484 484
 
@@ -489,26 +489,26 @@  discard block
 block discarded – undo
489 489
  * @return string Sélection de colonnes pour une clause SELECT
490 490
  */
491 491
 function spip_mysql_select_as($args) {
492
-	$res = '';
493
-	foreach ($args as $k => $v) {
494
-		if (substr($k, -1) == '@') {
495
-			// c'est une jointure qui se refere au from precedent
496
-			// pas de virgule
497
-			$res .= '  ' . $v;
498
-		} else {
499
-			if (!is_numeric($k)) {
500
-				$p = strpos($v, ' ');
501
-				if ($p) {
502
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
503
-				} else {
504
-					$v .= " AS `$k`";
505
-				}
506
-			}
507
-			$res .= ', ' . $v;
508
-		}
509
-	}
510
-
511
-	return substr($res, 2);
492
+    $res = '';
493
+    foreach ($args as $k => $v) {
494
+        if (substr($k, -1) == '@') {
495
+            // c'est une jointure qui se refere au from precedent
496
+            // pas de virgule
497
+            $res .= '  ' . $v;
498
+        } else {
499
+            if (!is_numeric($k)) {
500
+                $p = strpos($v, ' ');
501
+                if ($p) {
502
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
503
+                } else {
504
+                    $v .= " AS `$k`";
505
+                }
506
+            }
507
+            $res .= ', ' . $v;
508
+        }
509
+    }
510
+
511
+    return substr($res, 2);
512 512
 }
513 513
 
514 514
 
@@ -533,58 +533,58 @@  discard block
 block discarded – undo
533 533
  */
534 534
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
535 535
 
536
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
537
-		$pref = '`' . $db . '`.';
538
-	} else {
539
-		$pref = '';
540
-	}
541
-
542
-	if ($prefixe) {
543
-		$pref .= $prefixe . '_';
544
-	}
545
-
546
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
547
-		$suite = '';
548
-	} else {
549
-		$suite = strstr($query, (string) $regs[0]);
550
-		$query = substr($query, 0, -strlen($suite));
551
-		// propager le prefixe en cas de requete imbriquee
552
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
553
-		// modifier une requete qui est en fait juste du texte dans un champ
554
-		if (stripos($suite, 'SELECT') !== false) {
555
-			if ($echappe_textes) {
556
-				[$suite_echap, $textes] = query_echappe_textes($suite);
557
-			}
558
-			else {
559
-				$suite_echap = $suite;
560
-			}
561
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
562
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
563
-				if ($echappe_textes) {
564
-					$suite = query_reinjecte_textes($suite_echap, $textes);
565
-				}
566
-				else {
567
-					$suite = $suite_echap;
568
-				}
569
-			}
570
-		}
571
-	}
572
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
573
-
574
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
575
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
576
-	if (
577
-		defined('_MYSQL_NOPLANES')
578
-		and _MYSQL_NOPLANES
579
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
580
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
581
-	) {
582
-		include_spip('inc/charsets');
583
-		$r = utf8_noplanes($r);
584
-	}
585
-
586
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
587
-	return $r;
536
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
537
+        $pref = '`' . $db . '`.';
538
+    } else {
539
+        $pref = '';
540
+    }
541
+
542
+    if ($prefixe) {
543
+        $pref .= $prefixe . '_';
544
+    }
545
+
546
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
547
+        $suite = '';
548
+    } else {
549
+        $suite = strstr($query, (string) $regs[0]);
550
+        $query = substr($query, 0, -strlen($suite));
551
+        // propager le prefixe en cas de requete imbriquee
552
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
553
+        // modifier une requete qui est en fait juste du texte dans un champ
554
+        if (stripos($suite, 'SELECT') !== false) {
555
+            if ($echappe_textes) {
556
+                [$suite_echap, $textes] = query_echappe_textes($suite);
557
+            }
558
+            else {
559
+                $suite_echap = $suite;
560
+            }
561
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
562
+                $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
563
+                if ($echappe_textes) {
564
+                    $suite = query_reinjecte_textes($suite_echap, $textes);
565
+                }
566
+                else {
567
+                    $suite = $suite_echap;
568
+                }
569
+            }
570
+        }
571
+    }
572
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
573
+
574
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
575
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
576
+    if (
577
+        defined('_MYSQL_NOPLANES')
578
+        and _MYSQL_NOPLANES
579
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
580
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
581
+    ) {
582
+        include_spip('inc/charsets');
583
+        $r = utf8_noplanes($r);
584
+    }
585
+
586
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
587
+    return $r;
588 588
 }
589 589
 
590 590
 /**
@@ -602,13 +602,13 @@  discard block
 block discarded – undo
602 602
  *     - False en cas d'erreur.
603 603
  **/
604 604
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
605
-	$link = _mysql_link($serveur);
606
-	$ok = mysqli_select_db($link, $db);
607
-	if (!$ok) {
608
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
609
-	}
605
+    $link = _mysql_link($serveur);
606
+    $ok = mysqli_select_db($link, $db);
607
+    if (!$ok) {
608
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
609
+    }
610 610
 
611
-	return $ok;
611
+    return $ok;
612 612
 }
613 613
 
614 614
 
@@ -629,14 +629,14 @@  discard block
 block discarded – undo
629 629
  *     Liste de noms de bases de données
630 630
  **/
631 631
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
632
-	$dbs = [];
633
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
634
-		while ($row = mysqli_fetch_assoc($res)) {
635
-			$dbs[] = $row['Database'];
636
-		}
637
-	}
638
-
639
-	return $dbs;
632
+    $dbs = [];
633
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
634
+        while ($row = mysqli_fetch_assoc($res)) {
635
+            $dbs[] = $row['Database'];
636
+        }
637
+    }
638
+
639
+    return $dbs;
640 640
 }
641 641
 
642 642
 
@@ -659,73 +659,73 @@  discard block
 block discarded – undo
659 659
  *     - true si la requête réussie, false sinon.
660 660
  */
661 661
 function spip_mysql_create(
662
-	$nom,
663
-	$champs,
664
-	$cles,
665
-	$autoinc = false,
666
-	$temporary = false,
667
-	$serveur = '',
668
-	$requeter = true
662
+    $nom,
663
+    $champs,
664
+    $cles,
665
+    $autoinc = false,
666
+    $temporary = false,
667
+    $serveur = '',
668
+    $requeter = true
669 669
 ) {
670 670
 
671
-	$query = '';
672
-	$keys = '';
673
-	$s = '';
674
-	$p = '';
675
-
676
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
677
-	// sans les renseigner (laisse le compilo recuperer la description)
678
-	if (!is_array($champs) || !is_array($cles)) {
679
-		return;
680
-	}
681
-
682
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
683
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
684
-		spip_mysql_query("SET sql_mode=''", $serveur);
685
-	}
686
-
687
-	foreach ($cles as $k => $v) {
688
-		$keys .= "$s\n\t\t$k ($v)";
689
-		if ($k == 'PRIMARY KEY') {
690
-			$p = $v;
691
-		}
692
-		$s = ',';
693
-	}
694
-	$s = '';
695
-
696
-	$character_set = '';
697
-	if (@$GLOBALS['meta']['charset_sql_base']) {
698
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
699
-	}
700
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
701
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
702
-	}
703
-
704
-	foreach ($champs as $k => $v) {
705
-		$v = _mysql_remplacements_definitions_table($v);
706
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
707
-			if (
708
-				preg_match(',(char|text),i', $defs[1])
709
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
710
-			) {
711
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
712
-			}
713
-		}
714
-
715
-		$query .= "$s\n\t\t$k $v"
716
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
717
-				? ' auto_increment'
718
-				: ''
719
-			);
720
-		$s = ',';
721
-	}
722
-	$temporary = $temporary ? 'TEMPORARY' : '';
723
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
724
-		. ' ENGINE=MyISAM'
725
-		. ($character_set ? " DEFAULT $character_set" : '')
726
-		. "\n";
727
-
728
-	return spip_mysql_query($q, $serveur);
671
+    $query = '';
672
+    $keys = '';
673
+    $s = '';
674
+    $p = '';
675
+
676
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
677
+    // sans les renseigner (laisse le compilo recuperer la description)
678
+    if (!is_array($champs) || !is_array($cles)) {
679
+        return;
680
+    }
681
+
682
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
683
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
684
+        spip_mysql_query("SET sql_mode=''", $serveur);
685
+    }
686
+
687
+    foreach ($cles as $k => $v) {
688
+        $keys .= "$s\n\t\t$k ($v)";
689
+        if ($k == 'PRIMARY KEY') {
690
+            $p = $v;
691
+        }
692
+        $s = ',';
693
+    }
694
+    $s = '';
695
+
696
+    $character_set = '';
697
+    if (@$GLOBALS['meta']['charset_sql_base']) {
698
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
699
+    }
700
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
701
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
702
+    }
703
+
704
+    foreach ($champs as $k => $v) {
705
+        $v = _mysql_remplacements_definitions_table($v);
706
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
707
+            if (
708
+                preg_match(',(char|text),i', $defs[1])
709
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
710
+            ) {
711
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
712
+            }
713
+        }
714
+
715
+        $query .= "$s\n\t\t$k $v"
716
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
717
+                ? ' auto_increment'
718
+                : ''
719
+            );
720
+        $s = ',';
721
+    }
722
+    $temporary = $temporary ? 'TEMPORARY' : '';
723
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
724
+        . ' ENGINE=MyISAM'
725
+        . ($character_set ? " DEFAULT $character_set" : '')
726
+        . "\n";
727
+
728
+    return spip_mysql_query($q, $serveur);
729 729
 }
730 730
 
731 731
 
@@ -738,25 +738,25 @@  discard block
 block discarded – undo
738 738
  *     Définition SQL adaptée pour MySQL d'un champ de table
739 739
  */
740 740
 function _mysql_remplacements_definitions_table($query) {
741
-	// quelques remplacements
742
-	$num = '(\s*\([0-9]*\))?';
743
-	$enum = '(\s*\([^\)]*\))?';
744
-
745
-	$remplace = [
746
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
747
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
748
-	];
749
-
750
-	if (is_string($query)) {
751
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
752
-	} elseif (is_array($query)) {
753
-		$keys = array_keys($remplace);
754
-		foreach ($query as $k => $q) {
755
-			$query[$k] = preg_replace($keys, $remplace, $q);
756
-		}
757
-	}
758
-
759
-	return $query;
741
+    // quelques remplacements
742
+    $num = '(\s*\([0-9]*\))?';
743
+    $enum = '(\s*\([^\)]*\))?';
744
+
745
+    $remplace = [
746
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
747
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
748
+    ];
749
+
750
+    if (is_string($query)) {
751
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
752
+    } elseif (is_array($query)) {
753
+        $keys = array_keys($remplace);
754
+        foreach ($query as $k => $q) {
755
+            $query[$k] = preg_replace($keys, $remplace, $q);
756
+        }
757
+    }
758
+
759
+    return $query;
760 760
 }
761 761
 
762 762
 
@@ -769,7 +769,7 @@  discard block
 block discarded – undo
769 769
  * @return bool true si la base est créee.
770 770
  **/
771 771
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
772
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
772
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
773 773
 }
774 774
 
775 775
 
@@ -790,19 +790,19 @@  discard block
 block discarded – undo
790 790
  *     - string texte de la requête si $requeter vaut false
791 791
  */
792 792
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
793
-	if (!$query_select) {
794
-		return false;
795
-	}
796
-	// vue deja presente
797
-	if (sql_showtable($nom, false, $serveur)) {
798
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
793
+    if (!$query_select) {
794
+        return false;
795
+    }
796
+    // vue deja presente
797
+    if (sql_showtable($nom, false, $serveur)) {
798
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
799 799
 
800
-		return false;
801
-	}
800
+        return false;
801
+    }
802 802
 
803
-	$query = "CREATE VIEW $nom AS " . $query_select;
803
+    $query = "CREATE VIEW $nom AS " . $query_select;
804 804
 
805
-	return spip_mysql_query($query, $serveur, $requeter);
805
+    return spip_mysql_query($query, $serveur, $requeter);
806 806
 }
807 807
 
808 808
 
@@ -818,11 +818,11 @@  discard block
 block discarded – undo
818 818
  *     - true si la requête a réussie, false sinon
819 819
  */
820 820
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
821
-	if ($exist) {
822
-		$exist = ' IF EXISTS';
823
-	}
821
+    if ($exist) {
822
+        $exist = ' IF EXISTS';
823
+    }
824 824
 
825
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
825
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
826 826
 }
827 827
 
828 828
 /**
@@ -837,11 +837,11 @@  discard block
 block discarded – undo
837 837
  *     - true si la requête a réussie, false sinon
838 838
  */
839 839
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
840
-	if ($exist) {
841
-		$exist = ' IF EXISTS';
842
-	}
840
+    if ($exist) {
841
+        $exist = ' IF EXISTS';
842
+    }
843 843
 
844
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
844
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
845 845
 }
846 846
 
847 847
 /**
@@ -858,7 +858,7 @@  discard block
 block discarded – undo
858 858
  *     Ressource à utiliser avec sql_fetch()
859 859
  **/
860 860
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
861
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
861
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
862 862
 }
863 863
 
864 864
 /**
@@ -874,7 +874,7 @@  discard block
 block discarded – undo
874 874
  *     - true si la requête a réussie, false sinon
875 875
  */
876 876
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
877
-	return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
877
+    return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
878 878
 }
879 879
 
880 880
 /**
@@ -891,12 +891,12 @@  discard block
 block discarded – undo
891 891
  *     Ressource à utiliser avec sql_fetch()
892 892
  **/
893 893
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
894
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
895
-	if (!$requeter) {
896
-		return $r;
897
-	}
898
-	$res = spip_mysql_fetch($r);
899
-	return (bool) $res;
894
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
895
+    if (!$requeter) {
896
+        return $r;
897
+    }
898
+    $res = spip_mysql_fetch($r);
899
+    return (bool) $res;
900 900
 }
901 901
 
902 902
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -919,86 +919,86 @@  discard block
 block discarded – undo
919 919
  *     - array description de la table sinon
920 920
  */
921 921
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
922
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
923
-	if (!$s) {
924
-		return '';
925
-	}
926
-	if (!$requeter) {
927
-		return $s;
928
-	}
929
-
930
-	[, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
931
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
932
-		$desc = $r[1];
933
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
934
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
935
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
936
-			$namedkeys = $r[2];
937
-			$desc = $r[1];
938
-		} else {
939
-			$namedkeys = '';
940
-		}
941
-
942
-		$fields = [];
943
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
944
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
945
-			$fields[strtolower($r[1])] = $r[2];
946
-		}
947
-		$keys = [];
948
-
949
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
950
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
951
-				$k = str_replace('`', '', trim($r[1]));
952
-				$t = strtolower(str_replace('`', '', $r[2]));
953
-				if ($k && !isset($keys[$k])) {
954
-					$keys[$k] = $t;
955
-				} else {
956
-					$keys[] = $t;
957
-				}
958
-			}
959
-		}
960
-		spip_mysql_free($s);
961
-
962
-		return ['field' => $fields, 'key' => $keys];
963
-	}
964
-
965
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
966
-	if ($res) {
967
-		$nfields = [];
968
-		$nkeys = [];
969
-		while ($val = spip_mysql_fetch($res)) {
970
-			$nfields[$val['Field']] = $val['Type'];
971
-			if ($val['Null'] == 'NO') {
972
-				$nfields[$val['Field']] .= ' NOT NULL';
973
-			}
974
-			if ($val['Default'] === '0' || $val['Default']) {
975
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
976
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
977
-				} else {
978
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
979
-				}
980
-			}
981
-			if ($val['Extra']) {
982
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
983
-			}
984
-			if ($val['Key'] == 'PRI') {
985
-				$nkeys['PRIMARY KEY'] = $val['Field'];
986
-			} else {
987
-				if ($val['Key'] == 'MUL') {
988
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
989
-				} else {
990
-					if ($val['Key'] == 'UNI') {
991
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
992
-					}
993
-				}
994
-			}
995
-		}
996
-		spip_mysql_free($res);
997
-
998
-		return ['field' => $nfields, 'key' => $nkeys];
999
-	}
1000
-
1001
-	return '';
922
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
923
+    if (!$s) {
924
+        return '';
925
+    }
926
+    if (!$requeter) {
927
+        return $s;
928
+    }
929
+
930
+    [, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
931
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
932
+        $desc = $r[1];
933
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
934
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
935
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
936
+            $namedkeys = $r[2];
937
+            $desc = $r[1];
938
+        } else {
939
+            $namedkeys = '';
940
+        }
941
+
942
+        $fields = [];
943
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
944
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
945
+            $fields[strtolower($r[1])] = $r[2];
946
+        }
947
+        $keys = [];
948
+
949
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
950
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
951
+                $k = str_replace('`', '', trim($r[1]));
952
+                $t = strtolower(str_replace('`', '', $r[2]));
953
+                if ($k && !isset($keys[$k])) {
954
+                    $keys[$k] = $t;
955
+                } else {
956
+                    $keys[] = $t;
957
+                }
958
+            }
959
+        }
960
+        spip_mysql_free($s);
961
+
962
+        return ['field' => $fields, 'key' => $keys];
963
+    }
964
+
965
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
966
+    if ($res) {
967
+        $nfields = [];
968
+        $nkeys = [];
969
+        while ($val = spip_mysql_fetch($res)) {
970
+            $nfields[$val['Field']] = $val['Type'];
971
+            if ($val['Null'] == 'NO') {
972
+                $nfields[$val['Field']] .= ' NOT NULL';
973
+            }
974
+            if ($val['Default'] === '0' || $val['Default']) {
975
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
976
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
977
+                } else {
978
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
979
+                }
980
+            }
981
+            if ($val['Extra']) {
982
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
983
+            }
984
+            if ($val['Key'] == 'PRI') {
985
+                $nkeys['PRIMARY KEY'] = $val['Field'];
986
+            } else {
987
+                if ($val['Key'] == 'MUL') {
988
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
989
+                } else {
990
+                    if ($val['Key'] == 'UNI') {
991
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
992
+                    }
993
+                }
994
+            }
995
+        }
996
+        spip_mysql_free($res);
997
+
998
+        return ['field' => $nfields, 'key' => $nkeys];
999
+    }
1000
+
1001
+    return '';
1002 1002
 }
1003 1003
 
1004 1004
 
@@ -1014,12 +1014,12 @@  discard block
 block discarded – undo
1014 1014
  * @return array           Ligne de résultat
1015 1015
  */
1016 1016
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1017
-	if (!$t) {
1018
-		$t = MYSQLI_ASSOC;
1019
-	}
1020
-	if ($r) {
1021
-		return mysqli_fetch_array($r, $t);
1022
-	}
1017
+    if (!$t) {
1018
+        $t = MYSQLI_ASSOC;
1019
+    }
1020
+    if ($r) {
1021
+        return mysqli_fetch_array($r, $t);
1022
+    }
1023 1023
 }
1024 1024
 
1025 1025
 /**
@@ -1032,9 +1032,9 @@  discard block
 block discarded – undo
1032 1032
  * @return bool True si déplacement réussi, false sinon.
1033 1033
  **/
1034 1034
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1035
-	if ($r and mysqli_num_rows($r)) {
1036
-		return mysqli_data_seek($r, $row_number);
1037
-	}
1035
+    if ($r and mysqli_num_rows($r)) {
1036
+        return mysqli_data_seek($r, $row_number);
1037
+    }
1038 1038
 }
1039 1039
 
1040 1040
 
@@ -1052,26 +1052,26 @@  discard block
 block discarded – undo
1052 1052
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1053 1053
  **/
1054 1054
 function spip_mysql_countsel(
1055
-	$from = [],
1056
-	$where = [],
1057
-	$groupby = '',
1058
-	$having = [],
1059
-	$serveur = '',
1060
-	$requeter = true
1055
+    $from = [],
1056
+    $where = [],
1057
+    $groupby = '',
1058
+    $having = [],
1059
+    $serveur = '',
1060
+    $requeter = true
1061 1061
 ) {
1062
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1063
-
1064
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1065
-	if (!$requeter) {
1066
-		return $r;
1067
-	}
1068
-	if (!$r instanceof mysqli_result) {
1069
-		return 0;
1070
-	}
1071
-	[$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1072
-	mysqli_free_result($r);
1073
-
1074
-	return $c;
1062
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1063
+
1064
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1065
+    if (!$requeter) {
1066
+        return $r;
1067
+    }
1068
+    if (!$r instanceof mysqli_result) {
1069
+        return 0;
1070
+    }
1071
+    [$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1072
+    mysqli_free_result($r);
1073
+
1074
+    return $c;
1075 1075
 }
1076 1076
 
1077 1077
 
@@ -1094,16 +1094,16 @@  discard block
 block discarded – undo
1094 1094
  *     Erreur eventuelle
1095 1095
  **/
1096 1096
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1097
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1098
-	$s = mysqli_error($link);
1099
-	if ($s) {
1100
-		$trace = debug_backtrace();
1101
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1102
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1103
-		}
1104
-	}
1105
-
1106
-	return $s;
1097
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1098
+    $s = mysqli_error($link);
1099
+    if ($s) {
1100
+        $trace = debug_backtrace();
1101
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1102
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1103
+        }
1104
+    }
1105
+
1106
+    return $s;
1107 1107
 }
1108 1108
 
1109 1109
 
@@ -1118,18 +1118,18 @@  discard block
 block discarded – undo
1118 1118
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1119 1119
  **/
1120 1120
 function spip_mysql_errno($serveur = '', $requeter = true) {
1121
-	$link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1122
-	$s = mysqli_errno($link);
1123
-	// 2006 MySQL server has gone away
1124
-	// 2013 Lost connection to MySQL server during query
1125
-	if (in_array($s, [2006, 2013])) {
1126
-		define('spip_interdire_cache', true);
1127
-	}
1128
-	if ($s) {
1129
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1130
-	}
1131
-
1132
-	return $s;
1121
+    $link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1122
+    $s = mysqli_errno($link);
1123
+    // 2006 MySQL server has gone away
1124
+    // 2013 Lost connection to MySQL server during query
1125
+    if (in_array($s, [2006, 2013])) {
1126
+        define('spip_interdire_cache', true);
1127
+    }
1128
+    if ($s) {
1129
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1130
+    }
1131
+
1132
+    return $s;
1133 1133
 }
1134 1134
 
1135 1135
 
@@ -1143,9 +1143,9 @@  discard block
 block discarded – undo
1143 1143
  * @return int               Nombre de lignes
1144 1144
  */
1145 1145
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1146
-	if ($r) {
1147
-		return mysqli_num_rows($r);
1148
-	}
1146
+    if ($r) {
1147
+        return mysqli_num_rows($r);
1148
+    }
1149 1149
 }
1150 1150
 
1151 1151
 
@@ -1161,7 +1161,7 @@  discard block
 block discarded – undo
1161 1161
  * @return bool              True si réussi
1162 1162
  */
1163 1163
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1164
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1164
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1165 1165
 }
1166 1166
 
1167 1167
 
@@ -1189,59 +1189,59 @@  discard block
 block discarded – undo
1189 1189
  **/
1190 1190
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1191 1191
 
1192
-	$e = null;
1193
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1194
-	$link = $connexion['link'];
1195
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1196
-
1197
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1198
-	if (
1199
-		defined('_MYSQL_NOPLANES')
1200
-		and _MYSQL_NOPLANES
1201
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1202
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1203
-	) {
1204
-		include_spip('inc/charsets');
1205
-		$valeurs = utf8_noplanes($valeurs);
1206
-	}
1207
-
1208
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1209
-	if (!$requeter) {
1210
-		return $query;
1211
-	}
1212
-
1213
-	if (isset($_GET['var_profile'])) {
1214
-		include_spip('public/tracer');
1215
-		$t = trace_query_start();
1216
-		$e = '';
1217
-	} else {
1218
-		$t = 0;
1219
-	}
1220
-
1221
-	$connexion['last'] = $query;
1222
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1223
-	$r = false;
1224
-	$insert = false;
1225
-	try {
1226
-		$insert = mysqli_query($link, $query);
1227
-	} catch (\mysqli_sql_exception $e) {
1228
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1229
-		// Todo: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1230
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1231
-	}
1232
-	if ($insert) {
1233
-		$r = mysqli_insert_id($link);
1234
-	} else {
1235
-		// Log de l'erreur eventuelle
1236
-		if ($e = spip_mysql_errno($serveur)) {
1237
-			// et du fautif
1238
-			$e .= spip_mysql_error($query, $serveur);
1239
-		} 
1240
-	}
1241
-
1242
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1243
-
1244
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1192
+    $e = null;
1193
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1194
+    $link = $connexion['link'];
1195
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1196
+
1197
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1198
+    if (
1199
+        defined('_MYSQL_NOPLANES')
1200
+        and _MYSQL_NOPLANES
1201
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1202
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1203
+    ) {
1204
+        include_spip('inc/charsets');
1205
+        $valeurs = utf8_noplanes($valeurs);
1206
+    }
1207
+
1208
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1209
+    if (!$requeter) {
1210
+        return $query;
1211
+    }
1212
+
1213
+    if (isset($_GET['var_profile'])) {
1214
+        include_spip('public/tracer');
1215
+        $t = trace_query_start();
1216
+        $e = '';
1217
+    } else {
1218
+        $t = 0;
1219
+    }
1220
+
1221
+    $connexion['last'] = $query;
1222
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1223
+    $r = false;
1224
+    $insert = false;
1225
+    try {
1226
+        $insert = mysqli_query($link, $query);
1227
+    } catch (\mysqli_sql_exception $e) {
1228
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1229
+        // Todo: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1230
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1231
+    }
1232
+    if ($insert) {
1233
+        $r = mysqli_insert_id($link);
1234
+    } else {
1235
+        // Log de l'erreur eventuelle
1236
+        if ($e = spip_mysql_errno($serveur)) {
1237
+            // et du fautif
1238
+            $e .= spip_mysql_error($query, $serveur);
1239
+        } 
1240
+    }
1241
+
1242
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1243
+
1244
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1245 1245
 }
1246 1246
 
1247 1247
 /**
@@ -1266,26 +1266,26 @@  discard block
 block discarded – undo
1266 1266
  **/
1267 1267
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1268 1268
 
1269
-	if (!$desc) {
1270
-		$desc = description_table($table, $serveur);
1271
-	}
1272
-	if (!$desc) {
1273
-		$couples = [];
1274
-	}
1275
-	$fields = $desc['field'] ?? [];
1276
-
1277
-	foreach ($couples as $champ => $val) {
1278
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1279
-	}
1280
-
1281
-	return spip_mysql_insert(
1282
-		$table,
1283
-		'(' . join(',', array_keys($couples)) . ')',
1284
-		'(' . join(',', $couples) . ')',
1285
-		$desc,
1286
-		$serveur,
1287
-		$requeter
1288
-	);
1269
+    if (!$desc) {
1270
+        $desc = description_table($table, $serveur);
1271
+    }
1272
+    if (!$desc) {
1273
+        $couples = [];
1274
+    }
1275
+    $fields = $desc['field'] ?? [];
1276
+
1277
+    foreach ($couples as $champ => $val) {
1278
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1279
+    }
1280
+
1281
+    return spip_mysql_insert(
1282
+        $table,
1283
+        '(' . join(',', array_keys($couples)) . ')',
1284
+        '(' . join(',', $couples) . ')',
1285
+        $desc,
1286
+        $serveur,
1287
+        $requeter
1288
+    );
1289 1289
 }
1290 1290
 
1291 1291
 
@@ -1310,34 +1310,34 @@  discard block
 block discarded – undo
1310 1310
  **/
1311 1311
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1312 1312
 
1313
-	if (!$desc) {
1314
-		$desc = description_table($table, $serveur);
1315
-	}
1316
-	if (!$desc) {
1317
-		$tab_couples = [];
1318
-	}
1319
-	$fields = $desc['field'] ?? [];
1320
-
1321
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1322
-	$valeurs = [];
1323
-	$r = false;
1324
-
1325
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1326
-	foreach ($tab_couples as $couples) {
1327
-		foreach ($couples as $champ => $val) {
1328
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1329
-		}
1330
-		$valeurs[] = '(' . join(',', $couples) . ')';
1331
-		if (count($valeurs) >= 100) {
1332
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1333
-			$valeurs = [];
1334
-		}
1335
-	}
1336
-	if (count($valeurs)) {
1337
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1338
-	}
1339
-
1340
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1313
+    if (!$desc) {
1314
+        $desc = description_table($table, $serveur);
1315
+    }
1316
+    if (!$desc) {
1317
+        $tab_couples = [];
1318
+    }
1319
+    $fields = $desc['field'] ?? [];
1320
+
1321
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1322
+    $valeurs = [];
1323
+    $r = false;
1324
+
1325
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1326
+    foreach ($tab_couples as $couples) {
1327
+        foreach ($couples as $champ => $val) {
1328
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1329
+        }
1330
+        $valeurs[] = '(' . join(',', $couples) . ')';
1331
+        if (count($valeurs) >= 100) {
1332
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1333
+            $valeurs = [];
1334
+        }
1335
+    }
1336
+    if (count($valeurs)) {
1337
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1338
+    }
1339
+
1340
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1341 1341
 }
1342 1342
 
1343 1343
 /**
@@ -1362,19 +1362,19 @@  discard block
 block discarded – undo
1362 1362
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1363 1363
  */
1364 1364
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1365
-	$set = [];
1366
-	foreach ($champs as $champ => $val) {
1367
-		$set[] = $champ . "=$val";
1368
-	}
1369
-	if (!empty($set)) {
1370
-		return spip_mysql_query(
1371
-			calculer_mysql_expression('UPDATE', $table, ',')
1372
-			. calculer_mysql_expression('SET', $set, ',')
1373
-			. calculer_mysql_expression('WHERE', $where),
1374
-			$serveur,
1375
-			$requeter
1376
-		);
1377
-	}
1365
+    $set = [];
1366
+    foreach ($champs as $champ => $val) {
1367
+        $set[] = $champ . "=$val";
1368
+    }
1369
+    if (!empty($set)) {
1370
+        return spip_mysql_query(
1371
+            calculer_mysql_expression('UPDATE', $table, ',')
1372
+            . calculer_mysql_expression('SET', $set, ',')
1373
+            . calculer_mysql_expression('WHERE', $where),
1374
+            $serveur,
1375
+            $requeter
1376
+        );
1377
+    }
1378 1378
 }
1379 1379
 
1380 1380
 /**
@@ -1407,29 +1407,29 @@  discard block
 block discarded – undo
1407 1407
  */
1408 1408
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1409 1409
 
1410
-	if (!$champs) {
1411
-		return;
1412
-	}
1413
-	if (!$desc) {
1414
-		$desc = description_table($table, $serveur);
1415
-	}
1416
-	if (!$desc) {
1417
-		$champs = [];
1418
-	} else {
1419
-		$fields = $desc['field'];
1420
-	}
1421
-	$set = [];
1422
-	foreach ($champs as $champ => $val) {
1423
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1424
-	}
1425
-
1426
-	return spip_mysql_query(
1427
-		calculer_mysql_expression('UPDATE', $table, ',')
1428
-		. calculer_mysql_expression('SET', $set, ',')
1429
-		. calculer_mysql_expression('WHERE', $where),
1430
-		$serveur,
1431
-		$requeter
1432
-	);
1410
+    if (!$champs) {
1411
+        return;
1412
+    }
1413
+    if (!$desc) {
1414
+        $desc = description_table($table, $serveur);
1415
+    }
1416
+    if (!$desc) {
1417
+        $champs = [];
1418
+    } else {
1419
+        $fields = $desc['field'];
1420
+    }
1421
+    $set = [];
1422
+    foreach ($champs as $champ => $val) {
1423
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1424
+    }
1425
+
1426
+    return spip_mysql_query(
1427
+        calculer_mysql_expression('UPDATE', $table, ',')
1428
+        . calculer_mysql_expression('SET', $set, ',')
1429
+        . calculer_mysql_expression('WHERE', $where),
1430
+        $serveur,
1431
+        $requeter
1432
+    );
1433 1433
 }
1434 1434
 
1435 1435
 /**
@@ -1445,22 +1445,22 @@  discard block
 block discarded – undo
1445 1445
  *     - False en cas d'erreur.
1446 1446
  **/
1447 1447
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1448
-	$res = spip_mysql_query(
1449
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1450
-		. calculer_mysql_expression('WHERE', $where),
1451
-		$serveur,
1452
-		$requeter
1453
-	);
1454
-	if (!$requeter) {
1455
-		return $res;
1456
-	}
1457
-	if ($res) {
1458
-		$link = _mysql_link($serveur);
1459
-
1460
-		return mysqli_affected_rows($link);
1461
-	} else {
1462
-		return false;
1463
-	}
1448
+    $res = spip_mysql_query(
1449
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1450
+        . calculer_mysql_expression('WHERE', $where),
1451
+        $serveur,
1452
+        $requeter
1453
+    );
1454
+    if (!$requeter) {
1455
+        return $res;
1456
+    }
1457
+    if ($res) {
1458
+        $link = _mysql_link($serveur);
1459
+
1460
+        return mysqli_affected_rows($link);
1461
+    } else {
1462
+        return false;
1463
+    }
1464 1464
 }
1465 1465
 
1466 1466
 
@@ -1489,10 +1489,10 @@  discard block
 block discarded – undo
1489 1489
  *     - False en cas d'erreur.
1490 1490
  **/
1491 1491
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1492
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1493
-		',',
1494
-		array_map('_q', $couples)
1495
-	) . ')', $serveur, $requeter);
1492
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1493
+        ',',
1494
+        array_map('_q', $couples)
1495
+    ) . ')', $serveur, $requeter);
1496 1496
 }
1497 1497
 
1498 1498
 
@@ -1521,14 +1521,14 @@  discard block
 block discarded – undo
1521 1521
  *     - False en cas d'erreur.
1522 1522
  **/
1523 1523
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1524
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1525
-	$valeurs = [];
1526
-	foreach ($tab_couples as $couples) {
1527
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1528
-	}
1529
-	$valeurs = implode(', ', $valeurs);
1530
-
1531
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1524
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1525
+    $valeurs = [];
1526
+    foreach ($tab_couples as $couples) {
1527
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1528
+    }
1529
+    $valeurs = implode(', ', $valeurs);
1530
+
1531
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1532 1532
 }
1533 1533
 
1534 1534
 
@@ -1543,32 +1543,32 @@  discard block
 block discarded – undo
1543 1543
  * @return string       Texte de sélection pour la requête
1544 1544
  */
1545 1545
 function spip_mysql_multi($objet, $lang) {
1546
-	$lengthlang = strlen("[$lang]");
1547
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1548
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1549
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1550
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1551
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1552
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1553
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1554
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1555
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1556
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1557
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1558
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1559
-		'     TRIM(' . $objet . '), ' .
1560
-		'     CONCAT( ' .
1561
-		"          $debutchaine, " .
1562
-		'          IF( ' .
1563
-		"               $poslang = 0, " .
1564
-		"                     $chainemulti, " .
1565
-		"               $chainelang" .
1566
-		'          ), ' .
1567
-		"          $finchaine" .
1568
-		'     ) ' .
1569
-		'))) AS multi';
1570
-
1571
-	return $retour;
1546
+    $lengthlang = strlen("[$lang]");
1547
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1548
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1549
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1550
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1551
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1552
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1553
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1554
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1555
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1556
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1557
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1558
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1559
+        '     TRIM(' . $objet . '), ' .
1560
+        '     CONCAT( ' .
1561
+        "          $debutchaine, " .
1562
+        '          IF( ' .
1563
+        "               $poslang = 0, " .
1564
+        "                     $chainemulti, " .
1565
+        "               $chainelang" .
1566
+        '          ), ' .
1567
+        "          $finchaine" .
1568
+        '     ) ' .
1569
+        '))) AS multi';
1570
+
1571
+    return $retour;
1572 1572
 }
1573 1573
 
1574 1574
 /**
@@ -1582,7 +1582,7 @@  discard block
 block discarded – undo
1582 1582
  *     Valeur hexadécimale pour MySQL
1583 1583
  **/
1584 1584
 function spip_mysql_hex($v) {
1585
-	return '0x' . $v;
1585
+    return '0x' . $v;
1586 1586
 }
1587 1587
 
1588 1588
 /**
@@ -1598,15 +1598,15 @@  discard block
 block discarded – undo
1598 1598
  *    Donnée prête à être utilisée par le gestionnaire SQL
1599 1599
  */
1600 1600
 function spip_mysql_quote($v, $type = '') {
1601
-	if (!is_array($v)) {
1602
-		return spip_mysql_cite($v, $type);
1603
-	}
1604
-
1605
-	// si c'est un tableau, le parcourir en propageant le type
1606
-	foreach ($v as $k => $r) {
1607
-		$v[$k] = spip_mysql_quote($r, $type);
1608
-	}
1609
-	return implode(',', $v);
1601
+    if (!is_array($v)) {
1602
+        return spip_mysql_cite($v, $type);
1603
+    }
1604
+
1605
+    // si c'est un tableau, le parcourir en propageant le type
1606
+    foreach ($v as $k => $r) {
1607
+        $v[$k] = spip_mysql_quote($r, $type);
1608
+    }
1609
+    return implode(',', $v);
1610 1610
 }
1611 1611
 
1612 1612
 /**
@@ -1622,18 +1622,18 @@  discard block
 block discarded – undo
1622 1622
  *     Expression SQL
1623 1623
  **/
1624 1624
 function spip_mysql_date_proche($champ, $interval, $unite) {
1625
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1626
-	return '('
1627
-	. $champ
1628
-	. (($interval <= 0) ? '>' : '<')
1629
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1630
-	. '('
1631
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1632
-	. ', INTERVAL '
1633
-	. (($interval > 0) ? $interval : (0 - $interval))
1634
-	. ' '
1635
-	. $unite
1636
-	. '))';
1625
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1626
+    return '('
1627
+    . $champ
1628
+    . (($interval <= 0) ? '>' : '<')
1629
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1630
+    . '('
1631
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1632
+    . ', INTERVAL '
1633
+    . (($interval > 0) ? $interval : (0 - $interval))
1634
+    . ' '
1635
+    . $unite
1636
+    . '))';
1637 1637
 }
1638 1638
 
1639 1639
 
@@ -1657,7 +1657,7 @@  discard block
 block discarded – undo
1657 1657
  *     Expression de requête SQL
1658 1658
  **/
1659 1659
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1660
-	return "($val $not IN ($valeurs))";
1660
+    return "($val $not IN ($valeurs))";
1661 1661
 }
1662 1662
 
1663 1663
 
@@ -1669,39 +1669,39 @@  discard block
 block discarded – undo
1669 1669
  * @return string|number     Texte ou nombre échappé
1670 1670
  */
1671 1671
 function spip_mysql_cite($v, $type) {
1672
-	if (!$type) {
1673
-		if (is_bool($v)) {
1674
-			return strval(intval($v));
1675
-		} elseif (is_numeric($v)) {
1676
-			return strval($v);
1677
-		} elseif ($v === null) {
1678
-			return "''";
1679
-		}
1680
-		return "'" . addslashes($v) . "'";
1681
-	}
1682
-
1683
-	if ($v === null) {
1684
-		if (stripos($type, 'NOT NULL') === false) {
1685
-			// null php se traduit en NULL SQL
1686
-			return 'NULL';
1687
-		} else {
1688
-			return "''";
1689
-		}
1690
-	} elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1691
-		return $v;
1692
-	} elseif (sql_test_int($type)) {
1693
-		if (
1694
-			is_numeric($v) 
1695
-			or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1696
-		) {
1697
-			return $v;
1698
-		} else {
1699
-			// si pas numerique, forcer le intval
1700
-			return intval($v);
1701
-		}
1702
-	}
1703
-
1704
-	return ("'" . addslashes($v) . "'");
1672
+    if (!$type) {
1673
+        if (is_bool($v)) {
1674
+            return strval(intval($v));
1675
+        } elseif (is_numeric($v)) {
1676
+            return strval($v);
1677
+        } elseif ($v === null) {
1678
+            return "''";
1679
+        }
1680
+        return "'" . addslashes($v) . "'";
1681
+    }
1682
+
1683
+    if ($v === null) {
1684
+        if (stripos($type, 'NOT NULL') === false) {
1685
+            // null php se traduit en NULL SQL
1686
+            return 'NULL';
1687
+        } else {
1688
+            return "''";
1689
+        }
1690
+    } elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1691
+        return $v;
1692
+    } elseif (sql_test_int($type)) {
1693
+        if (
1694
+            is_numeric($v) 
1695
+            or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1696
+        ) {
1697
+            return $v;
1698
+        } else {
1699
+            // si pas numerique, forcer le intval
1700
+            return intval($v);
1701
+        }
1702
+    }
1703
+
1704
+    return ("'" . addslashes($v) . "'");
1705 1705
 }
1706 1706
 
1707 1707
 /**
@@ -1711,7 +1711,7 @@  discard block
 block discarded – undo
1711 1711
  *     True si on a les fonctions, false sinon
1712 1712
  */
1713 1713
 function spip_versions_mysql() {
1714
-	return function_exists('mysqli_query');
1714
+    return function_exists('mysqli_query');
1715 1715
 }
1716 1716
 
1717 1717
 
@@ -1724,20 +1724,20 @@  discard block
 block discarded – undo
1724 1724
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1725 1725
  */
1726 1726
 function test_rappel_nom_base_mysql($server_db) {
1727
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1728
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1729
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1727
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1728
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1729
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1730 1730
 
1731
-	if ($ok) {
1732
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1731
+    if ($ok) {
1732
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1733 1733
 
1734
-		return '';
1735
-	} else {
1736
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1734
+        return '';
1735
+    } else {
1736
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1737 1737
 
1738
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1739
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1740
-	}
1738
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1739
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1740
+    }
1741 1741
 }
1742 1742
 
1743 1743
 /**
@@ -1751,13 +1751,13 @@  discard block
 block discarded – undo
1751 1751
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1752 1752
  */
1753 1753
 function test_sql_mode_mysql($server_db) {
1754
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1755
-	$row = sql_fetch($res, $server_db);
1756
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1757
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1754
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1755
+    $row = sql_fetch($res, $server_db);
1756
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1757
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1758 1758
 
1759
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1760
-	}
1759
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1760
+    }
1761 1761
 
1762
-	return '';
1762
+    return '';
1763 1763
 }
Please login to merge, or discard this patch.
Spacing   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -58,12 +58,12 @@  discard block
 block discarded – undo
58 58
 			$link = @mysqli_connect($host, $login, $pass);
59 59
 		}
60 60
 	} catch (\mysqli_sql_exception $e) {
61
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
61
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
62 62
 		$link = false;
63 63
 	}
64 64
 
65 65
 	if (!$link) {
66
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
66
+		spip_log('Echec mysqli_connect. Erreur : '.mysqli_connect_error(), 'mysql.'._LOG_HS);
67 67
 
68 68
 		return false;
69 69
 	}
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
 	}
83 83
 
84 84
 	spip_log(
85
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
85
+		"Connexion MySQLi vers $host, base $db, prefixe $prefixe ".($ok ? 'operationnelle' : 'impossible'),
86 86
 		_LOG_DEBUG
87 87
 	);
88 88
 
@@ -173,9 +173,9 @@  discard block
 block discarded – undo
173 173
  */
174 174
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
175 175
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
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
 
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
191 191
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192 192
 	$connexion['last'] = $c = 'SHOW CHARACTER SET'
193
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
193
+		. (!$charset ? '' : (' LIKE '._q($charset['charset'])));
194 194
 
195 195
 	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
196 196
 }
@@ -234,21 +234,21 @@  discard block
 block discarded – undo
234 234
 	$debug = '';
235 235
 	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236 236
 		if (isset($GLOBALS['debug']['aucasou'])) {
237
-			[, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
-			$debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
237
+			[, $id,, $infos] = $GLOBALS['debug']['aucasou'];
238
+			$debug .= "BOUCLE$id @ ".($infos[0] ?? '').' | ';
239 239
 		}
240 240
 		if (isset($_SERVER['REQUEST_URI'])) {
241 241
 			$debug .= $_SERVER['REQUEST_URI'];
242 242
 		}
243 243
 		if (!empty($GLOBALS['ip'])) {
244
-			$debug .= ' + ' . $GLOBALS['ip'];
244
+			$debug .= ' + '.$GLOBALS['ip'];
245 245
 		}
246
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
246
+		$debug = ' /* '.mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)).' */';
247 247
 	}
248 248
 	try {
249
-		$r = mysqli_query($link, $query . $debug);
249
+		$r = mysqli_query($link, $query.$debug);
250 250
 	} catch (\mysqli_sql_exception $e) {
251
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
251
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
252 252
 		$r = false;
253 253
 		// Todo: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254 254
 		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
 			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
266 266
 			$link = $connexion['link'];
267 267
 			//On retente au cas où
268
-			$r = mysqli_query($link, $query . $debug);
268
+			$r = mysqli_query($link, $query.$debug);
269 269
 		}
270 270
 	}
271 271
 
@@ -294,7 +294,7 @@  discard block
 block discarded – undo
294 294
 	// d'utiliser ceux-ci, copie-colle de phpmyadmin
295 295
 	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
296 296
 
297
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
297
+	return spip_mysql_query('ALTER '.$query, $serveur, $requeter); # i.e. que PG se debrouille
298 298
 }
299 299
 
300 300
 
@@ -307,7 +307,7 @@  discard block
 block discarded – undo
307 307
  * @return bool            Toujours true
308 308
  */
309 309
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
310
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
310
+	spip_mysql_query('OPTIMIZE TABLE '.$table);
311 311
 
312 312
 	return true;
313 313
 }
@@ -330,7 +330,7 @@  discard block
 block discarded – undo
330 330
 	$link = $connexion['link'];
331 331
 	$db = $connexion['db'];
332 332
 
333
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
333
+	$query = 'EXPLAIN '._mysql_traite_query($query, $db, $prefixe);
334 334
 	$r = mysqli_query($link, $query);
335 335
 
336 336
 	return spip_mysql_fetch($r, null, $serveur);
@@ -381,7 +381,7 @@  discard block
 block discarded – undo
381 381
 		. calculer_mysql_expression('WHERE', $where)
382 382
 		. calculer_mysql_expression('GROUP BY', $groupby, ',')
383 383
 		. calculer_mysql_expression('HAVING', $having)
384
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
384
+		. ($orderby ? ("\nORDER BY ".spip_mysql_order($orderby)) : '')
385 385
 		. ($limit ? "\nLIMIT $limit" : '');
386 386
 
387 387
 	// renvoyer la requete inerte si demandee
@@ -471,12 +471,12 @@  discard block
 block discarded – undo
471 471
 	$exp = "\n$expression ";
472 472
 
473 473
 	if (!is_array($v)) {
474
-		return $exp . $v;
474
+		return $exp.$v;
475 475
 	} else {
476 476
 		if (strtoupper($join) === 'AND') {
477
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
477
+			return $exp.join("\n\t$join ", array_map('calculer_mysql_where', $v));
478 478
 		} else {
479
-			return $exp . join($join, $v);
479
+			return $exp.join($join, $v);
480 480
 		}
481 481
 	}
482 482
 }
@@ -494,17 +494,17 @@  discard block
 block discarded – undo
494 494
 		if (substr($k, -1) == '@') {
495 495
 			// c'est une jointure qui se refere au from precedent
496 496
 			// pas de virgule
497
-			$res .= '  ' . $v;
497
+			$res .= '  '.$v;
498 498
 		} else {
499 499
 			if (!is_numeric($k)) {
500 500
 				$p = strpos($v, ' ');
501 501
 				if ($p) {
502
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
502
+					$v = substr($v, 0, $p)." AS `$k`".substr($v, $p);
503 503
 				} else {
504 504
 					$v .= " AS `$k`";
505 505
 				}
506 506
 			}
507
-			$res .= ', ' . $v;
507
+			$res .= ', '.$v;
508 508
 		}
509 509
 	}
510 510
 
@@ -534,13 +534,13 @@  discard block
 block discarded – undo
534 534
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
535 535
 
536 536
 	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
537
-		$pref = '`' . $db . '`.';
537
+		$pref = '`'.$db.'`.';
538 538
 	} else {
539 539
 		$pref = '';
540 540
 	}
541 541
 
542 542
 	if ($prefixe) {
543
-		$pref .= $prefixe . '_';
543
+		$pref .= $prefixe.'_';
544 544
 	}
545 545
 
546 546
 	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
@@ -559,7 +559,7 @@  discard block
 block discarded – undo
559 559
 				$suite_echap = $suite;
560 560
 			}
561 561
 			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
562
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
562
+				$suite_echap = $r[1]._mysql_traite_query($r[2], $db, $prefixe, false);
563 563
 				if ($echappe_textes) {
564 564
 					$suite = query_reinjecte_textes($suite_echap, $textes);
565 565
 				}
@@ -569,7 +569,7 @@  discard block
 block discarded – undo
569 569
 			}
570 570
 		}
571 571
 	}
572
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
572
+	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1'.$pref, $query).$suite;
573 573
 
574 574
 	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
575 575
 	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
@@ -605,7 +605,7 @@  discard block
 block discarded – undo
605 605
 	$link = _mysql_link($serveur);
606 606
 	$ok = mysqli_select_db($link, $db);
607 607
 	if (!$ok) {
608
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
608
+		spip_log('Echec mysqli_selectdb. Erreur : '.mysqli_error($link), 'mysql.'._LOG_CRITIQUE);
609 609
 	}
610 610
 
611 611
 	return $ok;
@@ -695,10 +695,10 @@  discard block
 block discarded – undo
695 695
 
696 696
 	$character_set = '';
697 697
 	if (@$GLOBALS['meta']['charset_sql_base']) {
698
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
698
+		$character_set .= ' CHARACTER SET '.$GLOBALS['meta']['charset_sql_base'];
699 699
 	}
700 700
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
701
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
701
+		$character_set .= ' COLLATE '.$GLOBALS['meta']['charset_collation_sql_base'];
702 702
 	}
703 703
 
704 704
 	foreach ($champs as $k => $v) {
@@ -708,7 +708,7 @@  discard block
 block discarded – undo
708 708
 				preg_match(',(char|text),i', $defs[1])
709 709
 				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
710 710
 			) {
711
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
711
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
712 712
 			}
713 713
 		}
714 714
 
@@ -720,7 +720,7 @@  discard block
 block discarded – undo
720 720
 		$s = ',';
721 721
 	}
722 722
 	$temporary = $temporary ? 'TEMPORARY' : '';
723
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
723
+	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query".($keys ? ",$keys" : '').')'
724 724
 		. ' ENGINE=MyISAM'
725 725
 		. ($character_set ? " DEFAULT $character_set" : '')
726 726
 		. "\n";
@@ -800,7 +800,7 @@  discard block
 block discarded – undo
800 800
 		return false;
801 801
 	}
802 802
 
803
-	$query = "CREATE VIEW $nom AS " . $query_select;
803
+	$query = "CREATE VIEW $nom AS ".$query_select;
804 804
 
805 805
 	return spip_mysql_query($query, $serveur, $requeter);
806 806
 }
@@ -858,7 +858,7 @@  discard block
 block discarded – undo
858 858
  *     Ressource à utiliser avec sql_fetch()
859 859
  **/
860 860
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
861
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
861
+	return spip_mysql_query('SHOW TABLES LIKE '._q($match), $serveur, $requeter);
862 862
 }
863 863
 
864 864
 /**
@@ -891,7 +891,7 @@  discard block
 block discarded – undo
891 891
  *     Ressource à utiliser avec sql_fetch()
892 892
  **/
893 893
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
894
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
894
+	$r = spip_mysql_query('SHOW TABLES LIKE '._q($table), $serveur, $requeter);
895 895
 	if (!$requeter) {
896 896
 		return $r;
897 897
 	}
@@ -973,22 +973,22 @@  discard block
 block discarded – undo
973 973
 			}
974 974
 			if ($val['Default'] === '0' || $val['Default']) {
975 975
 				if (preg_match('/[A-Z_]/', $val['Default'])) {
976
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
976
+					$nfields[$val['Field']] .= ' DEFAULT '.$val['Default'];
977 977
 				} else {
978
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
978
+					$nfields[$val['Field']] .= " DEFAULT '".$val['Default']."'";
979 979
 				}
980 980
 			}
981 981
 			if ($val['Extra']) {
982
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
982
+				$nfields[$val['Field']] .= ' '.$val['Extra'];
983 983
 			}
984 984
 			if ($val['Key'] == 'PRI') {
985 985
 				$nkeys['PRIMARY KEY'] = $val['Field'];
986 986
 			} else {
987 987
 				if ($val['Key'] == 'MUL') {
988
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
988
+					$nkeys['KEY '.$val['Field']] = $val['Field'];
989 989
 				} else {
990 990
 					if ($val['Key'] == 'UNI') {
991
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
991
+						$nkeys['UNIQUE KEY '.$val['Field']] = $val['Field'];
992 992
 					}
993 993
 				}
994 994
 			}
@@ -1059,7 +1059,7 @@  discard block
 block discarded – undo
1059 1059
 	$serveur = '',
1060 1060
 	$requeter = true
1061 1061
 ) {
1062
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1062
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
1063 1063
 
1064 1064
 	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1065 1065
 	if (!$requeter) {
@@ -1099,7 +1099,7 @@  discard block
 block discarded – undo
1099 1099
 	if ($s) {
1100 1100
 		$trace = debug_backtrace();
1101 1101
 		if ($trace[0]['function'] != 'spip_mysql_error') {
1102
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1102
+			spip_log("$s - $query - ".sql_error_backtrace(), 'mysql.'._LOG_ERREUR);
1103 1103
 		}
1104 1104
 	}
1105 1105
 
@@ -1225,7 +1225,7 @@  discard block
 block discarded – undo
1225 1225
 	try {
1226 1226
 		$insert = mysqli_query($link, $query);
1227 1227
 	} catch (\mysqli_sql_exception $e) {
1228
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1228
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
1229 1229
 		// Todo: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1230 1230
 		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1231 1231
 	}
@@ -1280,8 +1280,8 @@  discard block
 block discarded – undo
1280 1280
 
1281 1281
 	return spip_mysql_insert(
1282 1282
 		$table,
1283
-		'(' . join(',', array_keys($couples)) . ')',
1284
-		'(' . join(',', $couples) . ')',
1283
+		'('.join(',', array_keys($couples)).')',
1284
+		'('.join(',', $couples).')',
1285 1285
 		$desc,
1286 1286
 		$serveur,
1287 1287
 		$requeter
@@ -1318,7 +1318,7 @@  discard block
 block discarded – undo
1318 1318
 	}
1319 1319
 	$fields = $desc['field'] ?? [];
1320 1320
 
1321
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1321
+	$cles = '('.join(',', array_keys(reset($tab_couples))).')';
1322 1322
 	$valeurs = [];
1323 1323
 	$r = false;
1324 1324
 
@@ -1327,7 +1327,7 @@  discard block
 block discarded – undo
1327 1327
 		foreach ($couples as $champ => $val) {
1328 1328
 			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1329 1329
 		}
1330
-		$valeurs[] = '(' . join(',', $couples) . ')';
1330
+		$valeurs[] = '('.join(',', $couples).')';
1331 1331
 		if (count($valeurs) >= 100) {
1332 1332
 			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1333 1333
 			$valeurs = [];
@@ -1364,7 +1364,7 @@  discard block
 block discarded – undo
1364 1364
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1365 1365
 	$set = [];
1366 1366
 	foreach ($champs as $champ => $val) {
1367
-		$set[] = $champ . "=$val";
1367
+		$set[] = $champ."=$val";
1368 1368
 	}
1369 1369
 	if (!empty($set)) {
1370 1370
 		return spip_mysql_query(
@@ -1420,7 +1420,7 @@  discard block
 block discarded – undo
1420 1420
 	}
1421 1421
 	$set = [];
1422 1422
 	foreach ($champs as $champ => $val) {
1423
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1423
+		$set[] = $champ.'='.spip_mysql_cite($val, @$fields[$champ]);
1424 1424
 	}
1425 1425
 
1426 1426
 	return spip_mysql_query(
@@ -1489,10 +1489,10 @@  discard block
 block discarded – undo
1489 1489
  *     - False en cas d'erreur.
1490 1490
  **/
1491 1491
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1492
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1492
+	return spip_mysql_query("REPLACE $table (".join(',', array_keys($couples)).') VALUES ('.join(
1493 1493
 		',',
1494 1494
 		array_map('_q', $couples)
1495
-	) . ')', $serveur, $requeter);
1495
+	).')', $serveur, $requeter);
1496 1496
 }
1497 1497
 
1498 1498
 
@@ -1521,10 +1521,10 @@  discard block
 block discarded – undo
1521 1521
  *     - False en cas d'erreur.
1522 1522
  **/
1523 1523
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1524
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1524
+	$cles = '('.join(',', array_keys($tab_couples[0])).')';
1525 1525
 	$valeurs = [];
1526 1526
 	foreach ($tab_couples as $couples) {
1527
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1527
+		$valeurs[] = '('.join(',', array_map('_q', $couples)).')';
1528 1528
 	}
1529 1529
 	$valeurs = implode(', ', $valeurs);
1530 1530
 
@@ -1544,28 +1544,28 @@  discard block
 block discarded – undo
1544 1544
  */
1545 1545
 function spip_mysql_multi($objet, $lang) {
1546 1546
 	$lengthlang = strlen("[$lang]");
1547
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1548
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1549
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1550
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1551
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1552
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1547
+	$posmulti = 'INSTR('.$objet.", '<multi>')";
1548
+	$posfinmulti = 'INSTR('.$objet.", '</multi>')";
1549
+	$debutchaine = 'LEFT('.$objet.", $posmulti-1)";
1550
+	$finchaine = 'RIGHT('.$objet.', CHAR_LENGTH('.$objet.") -(7+$posfinmulti))";
1551
+	$chainemulti = 'TRIM(SUBSTRING('.$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1552
+	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1553 1553
 	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1554
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1555
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1554
+	$chainelang = 'TRIM(SUBSTRING('.$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1555
+	$posfinlang = 'INSTR('.$chainelang.", '[')";
1556 1556
 	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1557 1557
 	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1558
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1559
-		'     TRIM(' . $objet . '), ' .
1560
-		'     CONCAT( ' .
1561
-		"          $debutchaine, " .
1562
-		'          IF( ' .
1563
-		"               $poslang = 0, " .
1564
-		"                     $chainemulti, " .
1565
-		"               $chainelang" .
1566
-		'          ), ' .
1567
-		"          $finchaine" .
1568
-		'     ) ' .
1558
+	$retour = "(TRIM(IF($posmulti = 0 , ".
1559
+		'     TRIM('.$objet.'), '.
1560
+		'     CONCAT( '.
1561
+		"          $debutchaine, ".
1562
+		'          IF( '.
1563
+		"               $poslang = 0, ".
1564
+		"                     $chainemulti, ".
1565
+		"               $chainelang".
1566
+		'          ), '.
1567
+		"          $finchaine".
1568
+		'     ) '.
1569 1569
 		'))) AS multi';
1570 1570
 
1571 1571
 	return $retour;
@@ -1582,7 +1582,7 @@  discard block
 block discarded – undo
1582 1582
  *     Valeur hexadécimale pour MySQL
1583 1583
  **/
1584 1584
 function spip_mysql_hex($v) {
1585
-	return '0x' . $v;
1585
+	return '0x'.$v;
1586 1586
 }
1587 1587
 
1588 1588
 /**
@@ -1622,7 +1622,7 @@  discard block
 block discarded – undo
1622 1622
  *     Expression SQL
1623 1623
  **/
1624 1624
 function spip_mysql_date_proche($champ, $interval, $unite) {
1625
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1625
+	$use_now = (($champ === 'maj' or strpos($champ, '.maj')) ? true : false);
1626 1626
 	return '('
1627 1627
 	. $champ
1628 1628
 	. (($interval <= 0) ? '>' : '<')
@@ -1677,7 +1677,7 @@  discard block
 block discarded – undo
1677 1677
 		} elseif ($v === null) {
1678 1678
 			return "''";
1679 1679
 		}
1680
-		return "'" . addslashes($v) . "'";
1680
+		return "'".addslashes($v)."'";
1681 1681
 	}
1682 1682
 
1683 1683
 	if ($v === null) {
@@ -1701,7 +1701,7 @@  discard block
 block discarded – undo
1701 1701
 		}
1702 1702
 	}
1703 1703
 
1704
-	return ("'" . addslashes($v) . "'");
1704
+	return ("'".addslashes($v)."'");
1705 1705
 }
1706 1706
 
1707 1707
 /**
@@ -1735,7 +1735,7 @@  discard block
 block discarded – undo
1735 1735
 	} else {
1736 1736
 		$GLOBALS['mysql_rappel_nom_base'] = false;
1737 1737
 
1738
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1738
+		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1739 1739
 		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1740 1740
 	}
1741 1741
 }
Please login to merge, or discard this patch.