Completed
Push — master ( e198b7...7f0c36 )
by Davey
05:51
created

mysql.php ➔ mysql_connect()   D

Complexity

Conditions 13
Paths 378

Size

Total Lines 68
Code Lines 43

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 28
CRAP Score 13

Importance

Changes 0
Metric Value
cc 13
eloc 43
nc 378
nop 5
dl 0
loc 68
ccs 28
cts 28
cp 1
crap 13
rs 4.2817
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
namespace {
3
4
    if (!function_exists('\mysql_connect')) {
5
        define ('MYSQL_ASSOC', 1);
6
        define ('MYSQL_NUM', 2);
7
        define ('MYSQL_BOTH', 3);
8
        define ('MYSQL_CLIENT_COMPRESS', 32);
9
        define ('MYSQL_CLIENT_SSL', 2048);
10
        define ('MYSQL_CLIENT_INTERACTIVE', 1024);
11
        define ('MYSQL_CLIENT_IGNORE_SPACE', 256);
12
13
        function mysql_connect(
14
            $hostname = null,
15
            $username = null,
16
            $password = null,
17
            $new = false,
18
            $flags = 0
19
        ) {
20 52
            if ($new !== false) {
21 1
                trigger_error('Argument $new is no longer supported in PHP > 7', E_USER_WARNING);
22
            }
23 51
            if (null === $hostname) {
24 1
                $hostname = ini_get('mysqli.default_host') ?: null;
25
            }
26 51
            if (null === $username) {
27 1
                $username = ini_get('mysqli.default_user') ?: null;
28
            }
29 51
            if (null === $password) {
30 49
                $password = ini_get('mysqli.default_pw') ?: null;
31
            }
32
33 51
            $hash = sha1($hostname . $username . $flags);
34 51
            if ($hostname{1} != ':' && isset(\Dshafik\MySQL::$connections[$hash])) {
35 10
                \Dshafik\MySQL::$last_connection = \Dshafik\MySQL::$connections[$hash]['conn'];
36 10
                \Dshafik\MySQL::$connections[$hash]['refcount'] += 1;
37 10
                return \Dshafik\MySQL::$connections[$hash]['conn'];
38
            }
39
40 42
            if ($flags === 0) {
41 40
                \Dshafik\MySQL::$last_connection = $conn = mysqli_connect($hostname, $username, $password);
42 39
                $conn->hash = $hash;
43 39
                \Dshafik\MySQL::$connections[$hash] = ['refcount' => 1, 'conn' => $conn];
44
45 39
                return $conn;
46
            }
47
48
            try {
49 2
                \Dshafik\MySQL::$last_connection = $conn = mysqli_init();
50
51 2
                mysqli_real_connect(
52
                    $conn,
53
                    $hostname,
54
                    $username,
55
                    $password,
56 2
                    '',
57 2
                    null,
58 2
                    '',
59
                    $flags
60
                );
61
62
                // @codeCoverageIgnoreStart
63
                // PHPUnit turns the warning from mysqli_real_connect into an exception, so this never runs
64
                if ($conn === false) {
65
                    return false;
66
                }
67
                // @codeCoverageIgnoreEnd
68
69 1
                $conn->hash = $hash;
70 1
                \Dshafik\MySQL::$connections[$hash] = ['refcount' => 1, 'conn' => $conn];
71
72 1
                return $conn;
73 1
            } catch (\Throwable $e) {
74 1
                trigger_error($e->getMessage(), E_USER_WARNING);
75
                // @codeCoverageIgnoreStart
76
                // PHPUnit turns the warning into an exception, so this never runs
77
                return false;
78
                // @codeCoverageIgnoreEnd
79
            }
80
        }
81
82
        function mysql_pconnect(
83
            $hostname = null,
84
            $username = null,
85
            $password = null,
86
            $flags = 0
87
        ) {
88 1
            $hostname = 'p:' . $hostname;
89 1
            return mysql_connect($hostname, $username, $password, false, $flags);
90
        }
91
92
        function mysql_close(\mysqli $link = null)
93
        {
94 75
            $isDefault = ($link === null);
95
96 75
            $link = \Dshafik\MySQL::getConnection($link, __FUNCTION__);
97 75
            if ($link === null) {
98
                // @codeCoverageIgnoreStart
99
                // PHPUnit Warning -> Exception
100
                return false;
101
                // @codeCoverageIgnoreEnd
102
            }
103
104 75
            if (isset(\Dshafik\MySQL::$connections[$link->hash])) {
105 49
                \Dshafik\MySQL::$connections[$link->hash]['refcount'] -= 1;
106
            }
107
108 75
            $return = true;
109 75
            if (\Dshafik\MySQL::$connections[$link->hash]['refcount'] == 0) {
110 66
                $return = mysqli_close($link);
111 66
                unset(\Dshafik\MySQL::$connections[$link->hash]);
112
            }
113
114 75
            if ($isDefault) {
115 75
                Dshafik\MySQL::$last_connection = null;
116
            }
117
118 75
            return $return;
119
        }
120
121
        function mysql_select_db($databaseName, \mysqli $link = null)
122
        {
123 42
            $link = \Dshafik\MySQL::getConnection($link);
124
125 42
            return mysqli_query(
126
                $link,
127 42
                "USE " . mysqli_real_escape_string($link, $databaseName)
128 42
            ) !== false;
129
        }
130
131
        function mysql_query($query, \mysqli $link = null)
132
        {
133 45
            return mysqli_query(\Dshafik\MySQL::getConnection($link), $query);
134
        }
135
136
        function mysql_unbuffered_query($query, \mysqli $link = null)
137
        {
138 4
            $link = \Dshafik\MySQL::getConnection($link);
139 4
            if (mysqli_real_query($link, $query)) {
140 3
                return mysqli_use_result($link);
141
            }
142
143 1
            return false;
144
        }
145
146
        function mysql_db_query($databaseName, $query, \mysqli $link = null)
147
        {
148 2
            if (mysql_select_db($databaseName, $link)) {
149 1
                return mysql_query($query, $link);
150
            }
151 1
            return false;
152
        }
153
154
        function mysql_list_dbs(\mysqli $link = null)
155
        {
156 1
            return mysql_query("SHOW DATABASES", $link);
157
        }
158
159
        function mysql_list_tables($databaseName, \mysqli $link = null)
160
        {
161 2
            $link = \Dshafik\MySQL::getConnection($link);
162 2
            return mysql_query("SHOW TABLES FROM " . mysql_real_escape_string($databaseName, $link), $link);
163
        }
164
165
        function mysql_list_fields($databaseName, $tableName, \mysqli $link = null)
166
        {
167 2
            $link = \Dshafik\MySQL::getConnection($link);
168 2
            $result = mysql_query(
169
                "SHOW COLUMNS FROM " .
170 2
                mysqli_real_escape_string($link, $databaseName) . "." .
171 2
                mysqli_real_escape_string($link, $tableName),
172
                $link
173
            );
174
175 2
            if ($result instanceof \mysqli_result) {
176 1
                $result->table = $tableName;
177 1
                return $result;
178
            }
179
180 1
            trigger_error("mysql_list_fields(): Unable to save MySQL query result", E_USER_WARNING);
181
            // @codeCoverageIgnoreStart
182
            return false;
183
            // @codeCoverageIgnoreEnd
184
        }
185
186
        function mysql_list_processes(\mysqli $link = null)
187
        {
188
            return mysql_query("SHOW PROCESSLIST", $link);
189
        }
190
191
        function mysql_error(\mysqli $link = null)
192
        {
193 28
            return mysqli_error(\Dshafik\MySQL::getConnection($link));
194
        }
195
196
        function mysql_errno(\mysqli $link = null)
197
        {
198 1
            return mysqli_errno(\Dshafik\MySQL::getConnection($link));
199
        }
200
201
        function mysql_affected_rows(\mysqli $link = null)
202
        {
203 1
            return mysqli_affected_rows(\Dshafik\MySQL::getConnection($link));
204
        }
205
206
        function mysql_insert_id($link = null) /*|*/
207
        {
208 1
            return mysqli_insert_id(\Dshafik\MySQL::getConnection($link));
209
        }
210
211
        function mysql_result($result, $row, $field = 0)
212
        {
213 7
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
214
                // @codeCoverageIgnoreStart
215
                return false;
216
                // @codeCoverageIgnoreEnd
217
            }
218
219 6
            if (!mysqli_data_seek($result, $row)) {
220 1
                trigger_error(
221
                    sprintf(
222 1
                        "mysql_result(): Unable to jump to row %d on MySQL result index %s",
223
                        $row,
224
                        spl_object_hash($result)
225
                    ),
226 1
                    E_USER_WARNING
227
                );
228
                // @codeCoverageIgnoreStart
229
                return false;
230
                // @codeCoverageIgnoreEnd
231
            }
232
233 5
            $found = true;
234 5
            if (strpos($field, ".") !== false) {
235 3
                list($table, $name) =  explode(".", $field);
236 3
                $i = 0;
237 3
                $found = false;
238 3
		        mysqli_field_seek($result, 0);
239 3
                while ($column = mysqli_fetch_field($result)) {
240 3
                    if ($column->table == $table && $column->name == $name) {
241 2
                        $field = $i;
242 2
                        $found = true;
243 2
                        break;
244
                    }
245 3
                    $i++;
246
                }
247
            }
248
249 5
            $row = mysql_fetch_array($result);
250 5
            if ($found && array_key_exists($field, $row)) {
251 3
                return $row[$field];
252
            }
253
254 2
            trigger_error(
255
                sprintf(
256 2
                    "%s(): %s not found in MySQL result index %s",
257 2
                    __FUNCTION__,
258
                    $field,
259
                    spl_object_hash($result)
260
                ),
261 2
                E_USER_WARNING
262
            );
263
            // @codeCoverageIgnoreStart
264
            return false;
265
            // @codeCoverageIgnoreEnd
266
        }
267
268
        function mysql_num_rows($result)
269
        {
270 12
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
271
                // @codeCoverageIgnoreStart
272
                return false;
273
                // @codeCoverageIgnoreEnd
274
            }
275
276 11
            $previous = error_reporting(0);
277 11
            $rows = mysqli_num_rows($result);
278 11
            error_reporting($previous);
279
280 11
            return $rows;
281
        }
282
283
        function mysql_num_fields($result)
284
        {
285 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
286
                // @codeCoverageIgnoreStart
287
                return false;
288
                // @codeCoverageIgnoreEnd
289
            }
290 1
            return mysqli_num_fields($result);
291
        }
292
293
        function mysql_fetch_row($result)
294
        {
295 6
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
296
                // @codeCoverageIgnoreStart
297
                return false;
298
                // @codeCoverageIgnoreEnd
299
            }
300 5
            return mysqli_fetch_row($result) ?: false;
301
        }
302
303
        function mysql_fetch_array($result)
304
        {
305 8
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
306
                // @codeCoverageIgnoreStart
307
                return false;
308
                // @codeCoverageIgnoreEnd
309
            }
310 7
            return mysqli_fetch_array($result) ?: false;
311
        }
312
313
        function mysql_fetch_assoc($result) /* : array|null */
314
        {
315 7
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
316
                // @codeCoverageIgnoreStart
317
                return false;
318
                // @codeCoverageIgnoreEnd
319
            }
320
321 6
            return mysqli_fetch_assoc($result) ?: false;
322
        }
323
324
        function mysql_fetch_object($result, $class = null, array $params = []) /* : object|null */
325
        {
326 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
327
                // @codeCoverageIgnoreStart
328
                return false;
329
                // @codeCoverageIgnoreEnd
330
            }
331
332 2
            if ($class == null) {
333 2
                $object = mysqli_fetch_object($result);
334
            } else {
335
                $object = mysqli_fetch_object($result, $class, $params);
336
            }
337
338 2
            return $object ?: false;
339
        }
340
341
        function mysql_data_seek($result, $offset)
342
        {
343 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
344
                // @codeCoverageIgnoreStart
345
                return false;
346
                // @codeCoverageIgnoreEnd
347
            }
348
            return mysqli_data_seek($result, $offset);
349
        }
350
351
        function mysql_fetch_lengths($result) /* : array|*/
352
        {
353 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
354
                // @codeCoverageIgnoreStart
355
                return false;
356
                // @codeCoverageIgnoreEnd
357
            }
358
            return mysqli_fetch_lengths($result);
359
        }
360
361
        function mysql_fetch_field($result) /* : object|*/
362
        {
363 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
364
                // @codeCoverageIgnoreStart
365
                return false;
366
                // @codeCoverageIgnoreEnd
367
            }
368
            return mysqli_fetch_field($result);
369
        }
370
371
        function mysql_field_seek($result, $field)
372
        {
373 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
374
                // @codeCoverageIgnoreStart
375
                return false;
376
                // @codeCoverageIgnoreEnd
377
            }
378
            return mysqli_field_seek($result, $field);
379
        }
380
381
        function mysql_free_result($result)
382
        {
383 2
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
384
                // @codeCoverageIgnoreStart
385
                return false;
386
                // @codeCoverageIgnoreEnd
387
            }
388 1
            return mysqli_free_result($result);
389
        }
390
391
        function mysql_field_name($result, $field)
392
        {
393 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
394
                // @codeCoverageIgnoreStart
395
                return false;
396
                // @codeCoverageIgnoreEnd
397
            }
398 2
            return \Dshafik\MySQL::mysqlFieldInfo($result, $field, 'name');
399
        }
400
401
        function mysql_field_table($result, $field)
402
        {
403 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
404
                // @codeCoverageIgnoreStart
405
                return false;
406
                // @codeCoverageIgnoreEnd
407
            }
408 2
            return \Dshafik\MySQL::mysqlFieldInfo($result, $field, 'table');
409
        }
410
411
        function mysql_field_len($result, $field)
412
        {
413 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
414
                // @codeCoverageIgnoreStart
415
                return false;
416
                // @codeCoverageIgnoreEnd
417
            }
418 2
            return \Dshafik\MySQL::mysqlFieldInfo($result, $field, 'len');
419
        }
420
421
        function mysql_field_type($result, $field)
422
        {
423 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
424
                // @codeCoverageIgnoreStart
425
                return false;
426
                // @codeCoverageIgnoreEnd
427
            }
428 2
            return \Dshafik\MySQL::mysqlFieldInfo($result, $field, 'type');
429
        }
430
431
        function mysql_field_flags($result, $field)
432
        {
433 3
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
434
                // @codeCoverageIgnoreStart
435
                return false;
436
                // @codeCoverageIgnoreEnd
437
            }
438 2
            return \Dshafik\MySQL::mysqlFieldInfo($result, $field, 'flags');
439
        }
440
441
        function mysql_escape_string($unescapedString)
442
        {
443 2
            if (\Dshafik\MySQL::$last_connection == null) {
444 2
                trigger_error(
445
                    sprintf(
446 2
                        "%s() is insecure; use mysql_real_escape_string() instead!",
447 2
                        __FUNCTION__
448
                    ),
449 2
                    E_USER_NOTICE
450
                );
451
452 1
                return \Dshafik\MySQL::escapeString($unescapedString);
453
            }
454
            return mysql_real_escape_string($unescapedString, null);
455
        }
456
457
        function mysql_real_escape_string($unescapedString, \mysqli $link = null)
458
        {
459 2
            return mysqli_escape_string(\Dshafik\MySQL::getConnection($link), $unescapedString);
460
        }
461
462
        function mysql_stat(\mysqli $link = null)
463
        {
464
            return mysqli_stat(\Dshafik\MySQL::getConnection($link));
465
        }
466
467
        function mysql_thread_id(\mysqli $link = null)
468
        {
469
            return mysqli_thread_id(\Dshafik\MySQL::getConnection($link));
470
        }
471
472
        function mysql_client_encoding(\mysqli $link = null)
473
        {
474
            return mysqli_character_set_name(\Dshafik\MySQL::getConnection($link));
475
        }
476
477
        function mysql_ping(\mysqli $link = null)
478
        {
479
            return mysqli_ping($link);
480
        }
481
482
        function mysql_get_client_info(\mysqli $link = null)
483
        {
484
            return mysqli_get_client_info(\Dshafik\MySQL::getConnection($link));
485
        }
486
487
        function mysql_get_host_info(\mysqli $link = null)
488
        {
489
            return mysqli_get_host_info(\Dshafik\MySQL::getConnection($link));
490
        }
491
492
        function mysql_get_proto_info(\mysqli $link = null)
493
        {
494
            return mysqli_get_proto_info(\Dshafik\MySQL::getConnection($link));
495
        }
496
497
        function mysql_get_server_info(\mysqli $link = null)
498
        {
499
            return mysqli_get_server_info(\Dshafik\MySQL::getConnection($link));
500
        }
501
502
        function mysql_info(\mysqli $link = null)
503
        {
504
            return mysqli_info(\Dshafik\MySQL::getConnection($link));
505
        }
506
507
        function mysql_set_charset($charset, \mysqli $link = null)
508
        {
509
            return mysqli_set_charset(\Dshafik\MySQL::getConnection($link), $charset);
510
        }
511
512
        function mysql_db_name($result, $row)
513
        {
514 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
515
                // @codeCoverageIgnoreStart
516
                return false;
517
                // @codeCoverageIgnoreEnd
518
            }
519
520
            // Alias as per http://lxr.php.net/xref/PHP_5_6/ext/mysql/php_mysql.c#319
521
            return mysql_result($result, $row, 'Database');
522
        }
523
524
        function mysql_tablename($result, $row)
525
        {
526 1
            if (\Dshafik\MySQL::checkValidResult($result, __FUNCTION__)) {
527
                // @codeCoverageIgnoreStart
528
                return false;
529
                // @codeCoverageIgnoreEnd
530
            }
531
532
            // Alias as per http://lxr.php.net/xref/PHP_5_6/ext/mysql/php_mysql.c#321
533
            return mysql_result($result, $row, 'Table');
534
        }
535
536
        /* Aliases */
537
538
        function mysql_fieldname(... $args)
539
        {
540
            return mysql_field_name(... $args);
541
        }
542
543
        function mysql_fieldtable(... $args)
544
        {
545
            return mysql_field_table(... $args);
546
        }
547
548
        function mysql_fieldlen(... $args)
549
        {
550
            return mysql_field_len(... $args);
551
        }
552
553
        function mysql_fieldtype(... $args)
554
        {
555
            return mysql_field_type(... $args);
556
        }
557
558
        function mysql_fieldflags(... $args)
559
        {
560
            return mysql_field_flags(... $args);
561
        }
562
563
        function mysql_selectdb(... $args)
564
        {
565
            return mysql_select_db(... $args);
566
        }
567
568
        function mysql_freeresult(... $args)
569
        {
570
            return mysql_free_result(... $args);
571
        }
572
573
        function mysql_numfields(... $args)
574
        {
575
            return mysql_num_fields(... $args);
576
        }
577
578
        function mysql_numrows(... $args)
579
        {
580
            return mysql_num_rows(... $args);
581
        }
582
583
        function mysql_listdbs(... $args)
584
        {
585
            return mysql_list_dbs(... $args);
586
        }
587
588
        function mysql_listtables(... $args)
589
        {
590
            return mysql_list_tables(... $args);
591
        }
592
593
        function mysql_listfields(... $args)
594
        {
595
            return mysql_list_fields(... $args);
596
        }
597
598
        function mysql_dbname(... $args)
599
        {
600
            return mysql_db_name(... $args);
601
        }
602
603
        function mysql_table_name(... $args)
604
        {
605
            return mysql_tablename(... $args);
606
        }
607
    }
608
}
609
610
namespace Dshafik {
611
612
    class MySQL
613
    {
614
        public static $last_connection = null;
615
        public static $connections = [];
616
617 75
        public static function getConnection($link = null, $func = null)
618
        {
619 75
            if ($link !== null) {
620 7
                return $link;
621
            }
622
623 75
            if (static::$last_connection === null) {
624 26
                $err = "A link to the server could not be established";
625 26
                if ($func !== null) {
626 26
                    $err = $func . "(): no MySQL-Link resource supplied";
627
                }
628 26
                trigger_error($err, E_USER_WARNING);
629 26
                return false;
630
            }
631
632 50
            return static::$last_connection;
633
        }
634
635 6
        public static function mysqlFieldInfo(\mysqli_result $result, $field, $what)
636
        {
637
            try {
638 6
                $field = mysqli_fetch_field_direct($result, $field);
639 5
            } catch (\Exception $e) {
640 5
                trigger_error(
641
                    sprintf(
642 5
                        "mysql_field_%s(): Field %d is invalid for MySQL result index %s",
643
                        $what,
644
                        $field,
645
                        spl_object_hash($result)
646
                    ),
647 5
                    E_USER_WARNING
648
                );
649
                // @codeCoverageIgnoreStart
650
                // PHPUnit turns the warning into an exception, so this never runs
651
                return false;
652
                // @codeCoverageIgnoreEnd
653
            }
654
655 1
            if ($what == 'name' || $what == 'table') {
656 1
                return $field->{$what};
657
            }
658
659 1
            if ($what == 'len') {
660 1
                return $field->length;
661
            }
662
663 1
            if ($what == 'type') {
664 1
                return static::getFieldType($field->type);
665
            }
666
667 1
            if ($what == 'flags') {
668 1
                return static::getFieldFlags($field->flags);
669
            }
670
671
            return false;
672
        }
673
674 50
        public static function checkValidResult($result, $function)
675
        {
676 50
            if (!($result instanceof \mysqli_result)) {
677 20
                if ($function != "mysql_fetch_object") {
678 19
                    trigger_error(
679 19
                        $function . "() expects parameter 1 to be resource, " . strtolower(gettype($result)) . " given",
680 19
                        E_USER_WARNING
681
                    );
682
                }
683
684 1
                if ($function == "mysql_fetch_object") {
685 1
                    trigger_error(
686 1
                        $function . "(): supplied argument is not a valid MySQL result resource",
687 1
                        E_USER_WARNING
688
                    );
689
                }
690
                return false;
691
            }
692
693 30
        }
694
695 1
        public static function escapeString($unescapedString)
696
        {
697 1
            $escapedString = "";
698 1
            for ($i = 0; $i < strlen($unescapedString); $i++) {
699 1
                $escapedString .= self::escapeChar($unescapedString{$i});
700
            }
701
702 1
            return $escapedString;
703
        }
704
705 1
        protected static function getFieldFlags($what)
706
        {
707
            // Order of flags taken from http://lxr.php.net/xref/PHP_5_6/ext/mysql/php_mysql.c#2507
708
            $flags = [
709 1
                MYSQLI_NOT_NULL_FLAG => "not_null",
710 1
                MYSQLI_PRI_KEY_FLAG => "primary_key",
711 1
                MYSQLI_UNIQUE_KEY_FLAG => "unique_key",
712 1
                MYSQLI_MULTIPLE_KEY_FLAG => "multiple_key",
713 1
                MYSQLI_BLOB_FLAG => "blob",
714 1
                MYSQLI_UNSIGNED_FLAG => "unsigned",
715 1
                MYSQLI_ZEROFILL_FLAG => "zerofill",
716 1
                MYSQLI_BINARY_FLAG => "binary",
717 1
                MYSQLI_ENUM_FLAG => "enum",
718 1
                MYSQLI_SET_FLAG => "set",
719 1
                MYSQLI_AUTO_INCREMENT_FLAG => "auto_increment",
720 1
                MYSQLI_TIMESTAMP_FLAG => "timestamp",
721
            ];
722
723 1
            $fieldFlags = [];
724 1
            foreach ($flags as $flag => $value) {
725 1
                if ($what & $flag) {
726 1
                    $fieldFlags[] = $value;
727
                }
728
            }
729
730 1
            return implode(" ", $fieldFlags);
731
        }
732
733 1
        protected static function getFieldType($what)
734
        {
735
            $types = [
736 1
                MYSQLI_TYPE_STRING => 'string',
737 1
                MYSQLI_TYPE_VAR_STRING => 'string',
738 1
                MYSQLI_TYPE_ENUM => 'string',
739 1
                MYSQLI_TYPE_SET => 'string',
740
741 1
                MYSQLI_TYPE_LONG => 'int',
742 1
                MYSQLI_TYPE_TINY => 'int',
743 1
                MYSQLI_TYPE_SHORT => 'int',
744 1
                MYSQLI_TYPE_INT24 => 'int',
745 1
                MYSQLI_TYPE_CHAR => 'int',
746 1
                MYSQLI_TYPE_LONGLONG => 'int',
747
748 1
                MYSQLI_TYPE_DECIMAL => 'real',
749 1
                MYSQLI_TYPE_FLOAT => 'real',
750 1
                MYSQLI_TYPE_DOUBLE => 'real',
751 1
                MYSQLI_TYPE_NEWDECIMAL => 'real',
752
753 1
                MYSQLI_TYPE_TINY_BLOB => 'blob',
754 1
                MYSQLI_TYPE_MEDIUM_BLOB => 'blob',
755 1
                MYSQLI_TYPE_LONG_BLOB => 'blob',
756 1
                MYSQLI_TYPE_BLOB => 'blob',
757
758 1
                MYSQLI_TYPE_NEWDATE => 'date',
759 1
                MYSQLI_TYPE_DATE => 'date',
760 1
                MYSQLI_TYPE_TIME => 'time',
761 1
                MYSQLI_TYPE_YEAR => 'year',
762 1
                MYSQLI_TYPE_DATETIME => 'datetime',
763 1
                MYSQLI_TYPE_TIMESTAMP => 'timestamp',
764
765 1
                MYSQLI_TYPE_NULL => 'null',
766
767 1
                MYSQLI_TYPE_GEOMETRY => 'geometry',
768
            ];
769
770 1
            return isset($types[$what]) ? $types[$what] : "unknown";
771
        }
772
773 1
        protected static function escapeChar($char)
774
        {
775
            switch ($char) {
776 1
                case "\0":
777 1
                    $esc = "\\0";
778 1
                    break;
779 1
                case "\n":
780 1
                    $esc = "\\n";
781 1
                    break;
782 1
                case "\r":
783 1
                    $esc = "\\r";
784 1
                    break;
785 1
                case '\\':
786 1
                case '\'':
787 1
                case '"':
788 1
                    $esc = "\\{$char}";
789 1
                    break;
790 1
                case "\032":
791 1
                    $esc = "\\Z";
792 1
                    break;
793
                default:
794 1
                    $esc = $char;
795 1
                    break;
796
            }
797
            
798 1
            return $esc;
799
        }
800
    }
801
}
802