Completed
Pull Request — master (#13)
by
unknown
02:31
created

mysql.php ➔ mysql_result()   B

Complexity

Conditions 9
Paths 8

Size

Total Lines 56
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 24
CRAP Score 9

Importance

Changes 0
Metric Value
cc 9
eloc 34
nc 8
nop 3
dl 0
loc 56
ccs 24
cts 24
cp 1
crap 9
rs 7.1584
c 0
b 0
f 0

How to fix   Long Method   

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