23
// DATABASE CONFIGURATION
25
// $DB_TYPE ="ORACLE";
26
// $DB_TYPE ="POSTGRESQL";
28
$DB_SERVER ="localhost";
29
$DB_DATABASE ="zabbix";
32
// END OF DATABASE CONFIGURATION
36
if($DB_TYPE == "MYSQL")
38
$DB=mysql_pconnect($DB_SERVER,$DB_USER,$DB_PASSWORD);
39
if(!mysql_select_db($DB_DATABASE))
41
echo "Error connecting to database [".mysql_error()."]";
44
mysql_select_db($DB_DATABASE);
46
if($DB_TYPE == "POSTGRESQL")
48
$DB=pg_pconnect("host='$DB_SERVER' dbname='$DB_DATABASE' user='$DB_USER' password='$DB_PASSWORD'");
51
echo "Error connecting to database";
56
if($DB_TYPE == "ORACLE")
58
$DB = ocilogon($DB_USER, $DB_PASSWORD, "");
59
// $DB = ocilogon($DB_USER, $DB_PASSWORD, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_SERVER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=$DB_DATABASE)))");
62
echo "Error connecting to database";
22
global $DB, $DB_TYPE, $DB_SERVER, $DB_PORT, $DB_DATABASE, $DB_USER, $DB_PASSWORD;
24
function DBconnect(&$error)
28
global $DB, $DB_TYPE, $DB_SERVER, $DB_PORT, $DB_DATABASE, $DB_USER, $DB_PASSWORD;
32
//SDI('type: '.$DB_TYPE.'; server: '.$DB_SERVER.'; port: '.$DB_PORT.'; db: '.$DB_DATABASE.'; usr: '.$DB_USER.'; pass: '.$DB_PASSWORD);
36
$error = "Unknown database type.";
44
$mysql_server = $DB_SERVER.( !empty($DB_PORT) ? ':'.$DB_PORT : '');
46
if ( !($DB = mysql_pconnect($mysql_server,$DB_USER,$DB_PASSWORD)))
48
$error = "Error connecting to database [".mysql_error()."]";
53
if ( !mysql_select_db($DB_DATABASE) )
55
$error = 'Error database selection ['.mysql_error().']';
61
$pg_connection_string =
62
( !empty($DB_SERVER) ? 'host=\''.$DB_SERVER.'\' ' : '').
63
'dbname=\''.$DB_DATABASE.'\' '.
64
( !empty($DB_USER) ? 'user=\''.$DB_USER.'\' ' : '').
65
( !empty($DB_PASSWORD) ? 'password=\''.$DB_PASSWORD.'\' ' : '').
66
( !empty($DB_PORT) ? 'port='.$DB_PORT : '');
67
SDI($pg_connection_string);
68
$DB=pg_pconnect($pg_connection_string);
71
$error = 'Error connecting to database';
76
$DB = ocilogon($DB_USER, $DB_PASSWORD, $DB_DATABASE);
77
//$DB = ocilogon($DB_USER, $DB_PASSWORD, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$DB_SERVER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=$DB_DATABASE)))");
80
$error = "Error connecting to database";
85
if(!function_exists('init_db_access'))
87
function init_db_access()
89
global $DB_DATABASE, $ZBX_SEM_ID;
92
if(function_exists('ftok') && function_exists('sem_get') &&
93
file_exists($DB_DATABASE))
95
$ZBX_SEM_ID = sem_get(ftok($DB_DATABASE, 'z'), 1);
100
if(!function_exists('lock_db_access'))
102
function lock_db_access()
106
if($ZBX_SEM_ID && function_exists('sem_acquire'))
108
sem_acquire($ZBX_SEM_ID);
113
if(!function_exists('unlock_db_access'))
115
function unlock_db_access()
119
if($ZBX_SEM_ID && function_exists('sem_release'))
120
sem_release($ZBX_SEM_ID);
124
if(!function_exists('free_db_access'))
126
function free_db_access()
130
if($ZBX_SEM_ID && function_exists('sem_remove'))
131
sem_remove($ZBX_SEM_ID);
138
if(file_exists($DB_DATABASE))
140
$DB = sqlite3_open($DB_DATABASE);
143
$error = "Error connecting to database";
149
$error = "Missed database";
156
$error = "Unsupported database";
160
if( false == $result )
168
global $DB, $DB_TYPE, $DB_SERVER, $DB_PORT, $DB_DATABASE, $DB_USER, $DB_PASSWORD;
172
if( isset($DB) && !empty($DB) )
176
case "MYSQL": $result = mysql_close($DB); break;
177
case "POSTGRESQL": $result = pg_close($DB); break;
178
case "ORACLE": $result = ocilogoff($DB); break;
191
$GLOBALS['DB_SERVER'],
193
$GLOBALS['DB_DATABASE'],
195
$GLOBALS['DB_PASSWORD']
201
function DBloadfile($file, &$error)
205
if(!file_exists($file))
207
$error = 'DBloadfile. Missing file['.$file.']';
213
foreach($fl as $n => $l) if(substr($l,0,2)=='--') unset($fl[$n]);
215
$fl = explode(";\n", implode("\n",$fl));
216
unset($fl[count($fl)-1]);
220
if(empty($sql)) continue;
222
if(!DBexecute($sql,0))
233
/* TODO *//* start transaction */
234
// lock_db_access(); /* check DBselect & DBexecute */
237
function DBend($result)
239
/* end transaction *//* TODO */
249
// unlock_db_access(); /* check DBselect & DBexecute */
79
264
SELECT * FROM (SELECT ROWNUM as RN, * FROM tbl) WHERE RN BETWEEN 6 AND 15
82
function DBselect($query, $limit='NO')
267
function &DBselect($query, $limit='NO')
86
//SDI('DBselect: ['.$query.']');
269
global $DB, $DB_TYPE;
88
271
COpt::savesqlrequest($query);
92
if($DB_TYPE == "MYSQL")
94
if(is_numeric($limit))
96
$query .= ' limit '.intval($limit);
98
$result=mysql_query($query,$DB);
101
echo "Error in query [$query] [".mysql_error()."]";
104
if($DB_TYPE == "POSTGRESQL")
106
if(is_numeric($limit))
108
$query .= ' limit '.intval($limit);
110
if(!($result=pg_exec($DB,$query)))
112
echo "Error in query [$query] [".pg_errormessage()."]";
115
if($DB_TYPE == "ORACLE")
117
if(is_numeric($limit))
119
$query = 'select * from ('.$query.') where rownum<'.intval($limit);
122
$stid=OCIParse($DB,$query);
126
error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]");
128
$result=OCIExecute($stid);
132
error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]");
137
//SDI("DBselect: result = '".$result."'");
274
if( isset($DB) && !empty($DB) )
278
if(is_numeric($limit))
280
$query .= ' limit '.intval($limit);
282
$result=mysql_query($query,$DB);
285
error("Error in query [$query] [".mysql_error()."]");
289
if(is_numeric($limit))
291
$query .= ' limit '.intval($limit);
293
if(!($result = pg_query($DB,$query)))
295
error("Error in query [$query] [".pg_last_error()."]");
299
if(is_numeric($limit))
301
$query = 'select * from ('.$query.') where rownum<'.intval($limit);
304
$stid=OCIParse($DB,$query);
308
error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]");
310
$result=@OCIExecute($stid);
314
error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]");
323
if(!($result = sqlite3_query($DB,$query)))
325
error("Error in query [$query] [".sqlite3_error($DB)."]");
331
while($row = sqlite3_fetch_array($result))
333
foreach($row as $id => $name)
335
if(!strstr($id,'.')) continue;
336
$ids = explode('.',$id);
337
$row[array_pop($ids)] = $row[$id];
343
sqlite3_query_close($result);
143
356
global $DB,$DB_TYPE;
145
//SDI('DBexecute: ['.$query.']');
147
358
COpt::savesqlrequest($query);
151
if($DB_TYPE == "MYSQL")
153
$result=mysql_query($query,$DB);
155
if(!$result && $skip_error_messages==0)
157
error("SQL error: ".mysql_error());
158
error("Query: $query");
161
if($DB_TYPE == "POSTGRESQL")
163
if(!($result=pg_exec($DB,$query)))
165
echo "Error in query [$query] [".pg_errormessage()."]";
168
if($DB_TYPE == "ORACLE")
171
$result = DBselect($query);
174
//SDI("DBexecute: result = '".$result."'");
179
function DBfetch($cursor)
183
if($DB_TYPE == "MYSQL")
185
$row=mysql_fetch_array($cursor);
188
if($DB_TYPE == "POSTGRESQL")
190
$row=pg_fetch_array($cursor);
193
if($DB_TYPE == "ORACLE")
195
// echo "DBfetch<br>";
196
if(!ocifetchinto($cursor, $row, OCI_ASSOC+OCI_NUM+OCI_RETURN_NULLS))
203
$keys = (array_keys($row));
204
foreach ($keys as $k)
206
$result[strtolower($k)]=$row[$k];
214
function get_field($result,$rownum,$fieldnum)
218
if($DB_TYPE == "MYSQL")
220
mysql_data_seek($result,$rownum);
221
$row=mysql_fetch_row($result);
222
return $row[$fieldnum];
224
if($DB_TYPE == "POSTGRESQL")
226
$row=pg_fetch_row($result,$rownum);
229
echo "Error getting row";
232
return $row[$fieldnum];
234
if($DB_TYPE == "ORACLE")
240
function DBinsert_id($result,$table,$field)
244
if($DB_TYPE == "MYSQL")
246
return mysql_insert_id($DB);
249
if($DB_TYPE == "POSTGRESQL")
251
// $oid=pg_getlastoid($result);
252
$oid=pg_last_oid($result);
253
// echo "OID:$oid<br>";
254
$sql="select $field from $table where oid=$oid";
255
$result=DBselect($sql);
256
return get_field($result,0,0);
258
if($DB_TYPE == "ORACLE")
260
/* $sql="select max($field) from $table";
261
$parse=DBexecute($sql);
262
while(OCIFetch($parse))
264
$colvalue = OCIResult($parse, 1);
268
$res = DBfetch(DBselect('select '.$table.'_'.$field.'.currval from dual'));
362
if( isset($DB) && !empty($DB) )
366
$result=mysql_query($query,$DB);
370
error("Error in query [$query] [".mysql_error()."]");
374
if(!($result = pg_query($DB,$query)))
376
error("Error in query [$query] [".pg_last_error()."]");
380
$result = DBselect($query);
383
$e = ocierror($stid);
384
error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]");
389
$result = sqlite3_exec($DB, $query);
392
error("Error in query [$query] [".sqlite3_error($DB)."]");
401
function DBfetch(&$cursor)
403
global $DB, $DB_TYPE;
407
if( isset($DB) && !empty($DB) )
411
$result = mysql_fetch_array($cursor);
414
$result = pg_fetch_array($cursor);
417
if(ocifetchinto($cursor, $row, OCI_ASSOC+OCI_NUM+OCI_RETURN_NULLS))
420
$keys = (array_keys($row));
421
foreach ($keys as $k) $result[strtolower($k)] = $row[$k];
427
$result = array_shift($cursor);
429
if(is_null($result)) $result = false;
273
439
/* string value prepearing */
274
if($DB_TYPE == "ORACLE") {
440
if(isset($DB_TYPE) && $DB_TYPE == "ORACLE") {
275
441
function zbx_dbstr($var) {
276
442
return "'".ereg_replace('\'','\'\'',$var)."'";
280
446
return "'".addslashes($var)."'";
450
function zbx_dbconcat($params)
457
return implode(' || ',$params);
459
return 'CONCAT('.implode(',',$params).')';
463
function DBid2nodeid($id_name)
470
$result = '('.$id_name.' div 100000000000000)';
473
$result = 'round('.$id_name.'/100000000000000)';
476
$result = '('.$id_name.'/100000000000000)';
481
function id2nodeid($id_var)
483
return (int)bcdiv("$id_var","100000000000000");
486
function get_dbid($table,$field)
488
global $ZBX_CURNODEID;
490
if(!isset($ZBX_CURNODEID)) init_nodes();
492
/* $row=DBfetch(DBselect("select max($field) as id from $table where ".DBid2nodeid($field)." in (".$ZBX_CURNODEID.")"));
493
if($row && !is_null($row["id"]))
495
return bcadd($row["id"],1);
499
return bcadd(bcmul($ZBX_CURNODEID,"100000000000000"),1);
506
$row = DBfetch(DBselect("select nextid from ids where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'"));
507
if(!$row || is_null($row["nextid"]))
509
$row=DBfetch(DBselect("select max($field) as id from $table where ".DBid2nodeid($field)." in (".$ZBX_CURNODEID.")"));
510
if(!$row || is_null($row["id"]))
512
DBexecute("insert into ids (nodeid,table_name,field_name,nextid) values ($ZBX_CURNODEID,'$table','$field',".bcadd(bcmul($ZBX_CURNODEID,"100000000000000"),1).")");
516
DBexecute("insert into ids (nodeid,table_name,field_name,nextid) values ($ZBX_CURNODEID,'$table','$field',".$row["id"].")");
522
$ret1 = $row["nextid"];
524
DBexecute("update ids set nextid=nextid+1 where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'");
526
$row = DBfetch(DBselect("select nextid from ids where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'"));
527
if(!$row || is_null($row["nextid"]))
529
/* Should never be here */
534
$ret2 = $row["nextid"];
535
if(bccomp(bcadd($ret1,1),$ret2) ==0)
542
while(false == $found);