Bearsampp 2025.8.29
Loading...
Searching...
No Matches
db_common.inc.php
Go to the documentation of this file.
1<?php
2
12// ------------------------------------------------------------ DATABASE-SPECIFIC
13// You may define APPPREFIX and DB_DATABASE in the application
14// APPPREFIX can be used to separate applications within one database
15// allowed chars are A_Z,a-z,_ ( e.g.: "myAPP_" )
16// for direct SQL use raw_db_query, keep in mind to handle APPPREFIX in your SQL
17// for tablenames and possible prefixes to fieldnames in returned records
18define("DB_WRAPVERSION", "db_v2b");
19
20if (!defined("APPPREFIX")) define("APPPREFIX", "");
21if (!defined("DB_DATABASE")) define("DB_DATABASE", "SQLite");
22
23$_mainpath = pathinfo(__FILE__);
24$_mainpath = $_mainpath["dirname"] . "/";
25
26include $_mainpath . "db_" . strtolower(DB_DATABASE) . ".inc.php";
27
35function db_get_info($info = "")
36{
37 switch (strtolower($info)) {
38 case "version":
39 return DB_DATABASE . " " . raw_get_db_version() . " with Database Wrapper " . DB_WRAPVERSION;
40
41 case "dbtype":
42 return DB_DATABASE;
43
44 case "dbversion":
45 return raw_get_db_version();
46
47 case "wrapversion":
48 return DB_WRAPVERSION;
49 }
50}
51// -----------------------wrapper for APPPREFIX----- DATABASE FUNCTIONS
62function db_open_database($database, $server = "", $username = "", $password = "")
63{
64 return raw_db_open_database($database, $server, $username , $password);
65}
66
77function db_create_database($database, $server = "", $username = "", $password = "")
78{
79 return raw_db_create_database($database, $server, $username , $password);
80}
81
89{
91 if (!$tables) {
92 return false;
93 }
94 $tmp_tabs = "";
95 $prefixlen = strlen(trim(APPPREFIX));
96 if ($prefixlen > 0) {
97 foreach($tables as $table) {
98 if (!(stristr(substr($table, 0, $prefixlen), APPPREFIX) === false)) {
99 $tmp_tabs[] = substr($table, strlen(APPPREFIX));
100 }
101 }
102 if ($tmp_tabs == "") {
103 return false;
104 }
105 return $tmp_tabs;
106 } else return $tables;
107}
108
114{
115 return raw_db_close_database();
116}
117// -------------------------------------------------------------- TABLE FUNCTIONS
124function db_table_exists($tablename)
125{
126 global $g_lasttable;
127
128 if (!$tablename)
129 $tablename = $g_lasttable;
130 $g_lasttable = $tablename;
131 return raw_db_table_exists(APPPREFIX . $tablename);
132}
133
144function db_create_table($tablename, $fieldnames, $fieldattrib, $idfield = "id", $valarray = null)
145{
146 global $g_lasttable;
147
148 if ($tablename == null || $tablename == "")
149 $tablename = $g_lasttable;
150 $g_lasttable = $tablename;
151
152 if (db_table_exists($tablename))
153 return false;
154
155 if (is_string($fieldnames))
156 $fieldnames = preg_split("/[\r\n,]/", $fieldnames);
157 if (is_string($fieldattrib))
158 $fieldattrib = preg_split("/[\r\n,]/", $fieldattrib);
159 $attribs = count($fieldattrib);
160 if (count($fieldnames) != $attribs) {
161 trigger_error(__FUNCTION__ . ": both arrays must be same length.");
162 return false;
163 }
164 $sql = "CREATE TABLE " . APPPREFIX . "$tablename (";
165 $sql .= "$idfield int(11) NOT NULL PRIMARY KEY ";
166 if ($attribs != 0) {
167 $sql .= ", ";
168
169 for($i = 0; $i < $attribs; $i++)
170 $sql .= $fieldnames[$i] . " " . $fieldattrib[$i] . ($i < $attribs - 1 ? ", " : "");
171 }
172 $sql .= ")";
173 // Send the sql command
174 $result = raw_db_query($sql);
175 if (!$result) {
176 trigger_error(__FUNCTION__ . ": could not create table $tablename.");
177 return false;
178 }
179
180 if ($valarray)
181 foreach($valarray as $values) {
182 $result = db_create_record($tablename, $fieldnames, $values, $idfield);
183 if ($result === false) {
184 return false;
185 }
186 }
187 return $result;
188}
189
196function db_delete_table($tablename)
197{
198 global $g_lasttable;
199
200 if (!$tablename)
201 $tablename = $g_lasttable;
202 $g_lasttable = $tablename;
203
204 if ($tablename == null || $tablename == "")
205 return false;
206 if (db_table_exists($tablename))
207 $result = raw_db_query("DROP table " . APPPREFIX . $tablename);
208 return $result;
209}
210
218function db_rename_table($tablename, $newname)
219{
220 return raw_db_rename_table(APPPREFIX . $tablename, APPPREFIX . $newname);
221}
222
228function db_list_table_fields($tablename, $type = false)
229{
230 global $g_lasttable;
231
232 if (!$tablename)
233 $tablename = $g_lasttable;
234 $g_lasttable = $tablename;
235
236 $result = raw_db_list_table_fields_def(APPPREFIX . $tablename, $type);
237 return $result;
238}
239// -------------------------------------------------------------- FIELD FUNCTIONS
248function db_create_field($tablename, $field, $type)
249{
250 return raw_db_create_field(APPPREFIX . $tablename, $field, $type);
251}
252
260function db_delete_field($tablename, $field)
261{
262 return raw_db_delete_field(APPPREFIX . $tablename, $field);
263}
264
274function db_rename_field($tablename, $field, $newname, $type)
275{
276 return raw_db_rename_field(APPPREFIX . $tablename, $field, $newname, $type);
277}
278
288function db_edit_field($tablename, $field, $type)
289{
290 return raw_db_edit_field(APPPREFIX . $tablename, $field, $type);
291}
292// ------------------------------------------------------------- RECORD FUNCTIONS
304function db_create_record($tablename, $fieldnames = null, $fieldvalues = null, $idfield = "id")
305{
306 global $g_lasttable;
307
308 if (!$tablename)
309 $tablename = $g_lasttable;
310 $g_lasttable = $tablename;
311
312 if (!$fieldnames) {
313 $fieldnames = db_list_table_fields($tablename);
314 array_shift($fieldnames);
315 }
316 if (!$fieldvalues) {
317 $fieldvalues = array_fill(0, count($fieldnames), 0);
318
319 }
320 // Get next available index
321 $sql = "SELECT max($idfield) FROM " . APPPREFIX . $tablename;
322 $result = raw_db_query($sql);
323 if ($result === false) {
324 return false;
325 }
326 $newid = (db_fetch_array($result, FETCH_NUM)) ;
327 $newid = $newid[0] + 1;
328 // Build the two arrays
329 $names = is_string($fieldnames) ? preg_split("/[\r\n]/", $fieldnames) : $fieldnames;
330 $values = is_string($fieldvalues) ? preg_split("/[\r\n]/", $fieldvalues) : $fieldvalues;
331 if (count($names) != count($values)) {
332 trigger_error(__FUNCTION__ . ": both arrays must be same length.\n");
333 return false;
334 }
335 // Build the SQL query
336 $nfields = count($names);
337 $fieldnames = $names;
338 $fieldvalues = $values;
339 for($i = 0, $names = ""; $i < $nfields; $i++)
340 $names .= $fieldnames[$i] . ($i < $nfields - 1 ? ", " : "");
341 for($i = 0, $values = ""; $i < $nfields; $i++)
342 $values .= "'" . db_escape_string($fieldvalues[$i]) . "'" . ($i < $nfields - 1 ? ", " : "");
343
344 $sql = "INSERT INTO " . APPPREFIX . $tablename . " ($idfield, $names) VALUES ($newid, $values)";
345
346 $result = raw_db_query($sql);
347 if (!$result) {
348 trigger_error(__FUNCTION__ . ": could not create new record in table $tablename.");
349 return false;
350 }
351 return $newid;
352}
353
363function db_delete_records($tablename, $idarray, $idfield = "id")
364{
365 global $g_lasttable;
366
367 if ($idarray == null || $idarray <= 0)
368 return false;
369 if (!is_array($idarray))
370 $idarray = array($idarray);
371
372 if (!$tablename)
373 $tablename = $g_lasttable;
374 $g_lasttable = $tablename;
375
376 foreach($idarray as $item) {
377 // Send the SQL command
378 $sql = "DELETE FROM " . APPPREFIX . $tablename . " WHERE $idfield = " . $item;
379 $result = raw_db_query($sql);
380 if (!$result) {
381 trigger_error(__FUNCTION__ . ": could not delete record $id in table $tablename.");
382 return false;
383 }
384 }
385 return true;
386}
387
400function db_edit_record($tablename, $id = 0, $fieldnames = null, $fieldvalues = null, $idfield = "id")
401{
402 global $g_lasttable;
403
404 if ($id == null || $id <= 0) { // Create a new record
405 return db_create_record($tablename, $fieldnames, $fieldvalues, $idfield);
406 } else { // Edit existing record
407 if (!$tablename)
408 $tablename = $g_lasttable;
409 $g_lasttable = $tablename;
410 // Build the two arrays
411 if (!$fieldnames) {
412 $fieldnames = db_list_table_fields($tablename);
413 array_shift($fieldnames);
414 }
415 if (!$fieldvalues) {
416 $fieldvalues = array_fill(0, count($fieldnames), 0);
417
418 }
419
420 $names = is_string($fieldnames) ? preg_split("/[\r\n]/", $fieldnames) : $fieldnames;
421 $values = is_string($fieldvalues) ? preg_split("/[\r\n]/", $fieldvalues) : $fieldvalues;
422
423 if (count($names) != count($values)) {
424 trigger_error(__FUNCTION__ . ": both arrays must be same length.\n");
425 return false;
426 }
427 // Build the SQL query
428 $nfields = count($names);
429 for($i = 0, $str = ""; $i < $nfields; $i++) {
430 $str .= $names[$i] . "='" . db_escape_string($values[$i]) . "'" .
431 ($i < $nfields - 1 ? ", " : "");
432 }
433
434 $sql = "UPDATE " . APPPREFIX . "$tablename SET $str WHERE $idfield=$id";
435 // Send the SQL command
436 $result = raw_db_query($sql);
437 if (!$result) {
438 trigger_error(__FUNCTION__ . ": could not edit record $id in table $tablename.");
439 return false;
440 }
441 return $id;
442 }
443}
444
457function db_swap_records($tablename, $id1, $id2, $idfield = "id", $xchangeid = true)
458{
459 global $g_lasttable;
460 // Table name
461 if (!$tablename)
462 $tablename = $g_lasttable;
463 $g_lasttable = $tablename;
464 $table = APPPREFIX . "$tablename";
465 // Build SQL strings
466 $result = raw_db_query("SELECT * FROM $table WHERE $idfield = $id1");
467 if (!$result) {
468 trigger_error(__FUNCTION__ . ": could not read record $id1 in table $tablename.");
469 return false;
470 }
472 $fieldvalues1 = array_values($a);
473 $fieldnames1 = array_keys($a);
474 array_shift($fieldvalues1);
475 array_shift($fieldnames1);
476
477 $result = raw_db_query("SELECT * FROM $table WHERE $idfield = $id2");
478 if (!$result) {
479 trigger_error(__FUNCTION__ . ": could not read record $id2 in table $tablename.");
480 return false;
481 }
483 $fieldvalues2 = array_values($a);
484 $fieldnames2 = array_keys($a);
485 array_shift($fieldvalues2);
486 array_shift($fieldnames2);
487 // Exchange values
488 if (db_edit_record($tablename, $id1, $fieldnames2, $fieldvalues2, $idfield) === false) return false;
489 if (db_edit_record($tablename, $id2, $fieldnames1, $fieldvalues1, $idfield) === false) return false;
490 // Exchange id's
491 if ($xchangeid) {
492 $unique = db_get_next_free_id($tablename);
493 if (db_edit_record($tablename, $id1, array($idfield), array($unique), $idfield) === false) return false;
494 if (db_edit_record($tablename, $id2, array($idfield), array($id1), $idfield) === false) return false;
495 if (db_edit_record($tablename, $unique, array($idfield), array($id2), $idfield) === false) return false;
496 }
497 return true;
498}
499
535function db_get_data($tablename, $id = null, $col = null, $where = "", $result_type = FETCH_NUM, $idfield = "id", $orderby = "")
536{
537 global $g_lasttable;
538
539 if (!$tablename)
540 $tablename = $g_lasttable;
541 $g_lasttable = $tablename;
542
543 if (is_array($col))
544 $col = implode(",", $col);
545 if ($col === null || $col === "")
546 $col = "*";
547 // Build the WHERE clause
548 if ($id !== null) {
549 if (is_string($id) && strstr($id, ",")) {
550 $id = explode(",", $id);
551 }
552 if (is_array($id)) {
553 $idcond = "";
554 for($i = 0; $i < count($id); $i++)
555 $idcond .= "$idfield = '{$id[$i]}'" . ($i < count($id) - 1 ? " OR " : "");
556 } else
557 $idcond = "$idfield = '$id'";
558
559 $condition = $where ? " WHERE ($where) AND ($idcond)" : " WHERE ($idcond)";
560 } else
561 $condition = $where ? " WHERE ($where)" : "";
562
563 $orderby = $orderby ? " ORDER BY $orderby" : "";
564 // Do the query
565 $sql = "SELECT $col FROM " . APPPREFIX . $tablename . $condition . $orderby;
566
567 $result = raw_db_query($sql);
568 if (!$result)
569 return false;
570 // Loop to build the return array
571 $array = array();
572 while ($row = db_fetch_array($result, $result_type)) {
573 if (count($row) == 1)
574 $row = array_shift($row);
575 $array[] = $row;
576 }
577 if (db_free_result($result) === false) return false;
578 // Return the result
579 if (!is_array($array))
580 return $array;
581
582 switch (count($array)) {
583 case 0:
584 return false;
585
586 case 1:
587
588 $test = $array; // Copy array
589 $elem = array_shift($test); // 1st element of array...
590 if (is_null($elem)) // ...is it null?
591 return false; // Yes: return null
592 if (is_scalar($elem)) // ...is it a scalar?
593 return $elem; // Yes: return the element alone
594 else
595 return $array; // No: return the whole array
596 default:
597 return $array;
598 }
599}
600
611
612function db_get_index($tablename, $id, $idfield = "id")
613{
614 $data = db_get_data($tablename, null, $idfield);
615 return array_search($id, $data);
616}
617
628
629function db_get_id($tablename, $index, $idfield = "id")
630{
631 global $g_lasttable;
632
633 if (!is_scalar($index)) {
634 trigger_error(__FUNCTION__ . ": index must be an integer");
635 return false;
636 } else
637 $index = (int)$index;
638
639 if (!$tablename)
640 $tablename = $g_lasttable;
641 $g_lasttable = $tablename;
642
643 // Do the query
644 $sql = "SELECT $idfield FROM " . APPPREFIX . $tablename . " LIMIT 1 OFFSET $index";
645
646 $result = raw_db_query($sql);
647 if (!$result)
648 return false;
649
651
652 if (db_free_result($result) === false)
653 return false;
654
655 return $ret[0];
656}
657
667function db_get_next_free_id($tablename, $idfield = "id")
668{
669 global $g_current_db;
670 global $g_lasttable;
671
672 if (!$tablename)
673 $tablename = $g_lasttable;
674 $g_lasttable = $tablename;
675
676 $sql = "SELECT max($idfield) FROM " . APPPREFIX . $tablename;
677 $result = raw_db_query($sql);
678 if (!$result) {
679 return false;
680 }
681 $maxid = (db_fetch_array($result, FETCH_NUM)) ;
682
683 return $maxid[0] + 1;
684}
685// ---------------------------------------------------------------- SQL FUNCTIONS
692
693function db_query($query)
694{
695 return raw_db_query($query);
696}
697
706{
711
712 return raw_db_fetch_array($result, $type);
713}
714
722{
724}
725
732function db_escape_string($str)
733{
737
738 return raw_db_escape_string($str);
739}
740// ------------------------------------------------------------------ END OF FILE
741
742?>
$result
db_get_id($tablename, $index, $idfield="id")
db_escape_string($str)
db_swap_records($tablename, $id1, $id2, $idfield="id", $xchangeid=true)
db_get_next_free_id($tablename, $idfield="id")
db_rename_table($tablename, $newname)
db_delete_field($tablename, $field)
$_mainpath
db_get_info($info="")
db_edit_record($tablename, $id=0, $fieldnames=null, $fieldvalues=null, $idfield="id")
const DB_WRAPVERSION
db_free_result($result)
db_list_database_tables()
db_get_data($tablename, $id=null, $col=null, $where="", $result_type=FETCH_NUM, $idfield="id", $orderby="")
db_table_exists($tablename)
db_list_table_fields($tablename, $type=false)
db_create_record($tablename, $fieldnames=null, $fieldvalues=null, $idfield="id")
db_create_table($tablename, $fieldnames, $fieldattrib, $idfield="id", $valarray=null)
db_query($query)
db_open_database($database, $server="", $username="", $password="")
db_create_database($database, $server="", $username="", $password="")
db_close_database()
db_edit_field($tablename, $field, $type)
db_rename_field($tablename, $field, $newname, $type)
db_delete_table($tablename)
db_fetch_array($result, $type=FETCH_NUM)
db_delete_records($tablename, $idarray, $idfield="id")
db_get_index($tablename, $id, $idfield="id")
db_create_field($tablename, $field, $type)
raw_db_edit_field($tablename, $field, $type)
if(DB_WRAPVERSION !=DB_MYSQL_WRAP) raw_db_open_database($database, $server="", $username="", $password="")
raw_db_create_database($database, $server="", $username="", $password="")
raw_db_delete_field($tablename, $field)
raw_db_close_database()
raw_db_list_table_fields_def($tablename, $type=false)
raw_db_rename_field($tablename, $field, $newname, $type)
raw_db_list_database_tables()
const FETCH_NUM
raw_db_create_field($tablename, $field, $type)
const FETCH_ASSOC
raw_get_db_version()
raw_db_table_exists($tablename)
raw_db_fetch_array($result, $type=FETCH_BOTH)
raw_db_rename_table($tablename, $newname)
raw_db_query($query)
raw_db_free_result($result)
raw_db_escape_string($str)