Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 require_once ("DB.php");
00028
00042 class ilDBx extends PEAR
00043 {
00049 var $error_class;
00050
00055 var $db;
00056
00061 var $result;
00062
00067 var $max_allowed_packet_size;
00068
00069
00077 function ilDBx($dsn)
00078 {
00079
00080 $parent = get_parent_class($this);
00081 $this->$parent();
00082
00083
00084 $this->error_class = new ilErrorHandling();
00085 $this->setErrorHandling(PEAR_ERROR_CALLBACK, array($this->error_class,'errorHandler'));
00086
00087
00088 if ($dsn=="")
00089 $this->raiseError("no DSN given", $this->error_class->FATAL);
00090
00091 $this->dsn = $dsn;
00092
00093
00094 $this->db = DB::connect($this->dsn, true);
00095
00096
00097 if (DB::isError($this->db)) {
00098 $this->raiseError($this->db->getMessage(), $this->error_class->FATAL);
00099 }
00100
00101
00102 $this->setMaxAllowedPacket();
00103
00104
00105
00106
00107
00108 if ($this->isMysql4_1OrHigher())
00109 {
00110 $this->query("SET NAMES utf8");
00111 $this->query("SET SESSION SQL_MODE = ''");
00112 }
00113
00114 return true;
00115 }
00116
00120 function _ilDBx(){
00121
00122 }
00123
00127 function disconnect()
00128 {
00129
00130 }
00131
00141 function query($sql)
00142 {
00143 $r = $this->db->query($sql);
00144
00145 if (DB::isError($r))
00146 {
00147 $err = "<br>Details: ".mysql_error();
00148 $this->raiseError($r->getMessage()."<br><font size=-1>SQL: ".$sql.$err."</font>", $this->error_class->FATAL);
00149 }
00150 else
00151 {
00152 return $r;
00153 }
00154 }
00155
00156
00166 function getOne($sql)
00167 {
00168 $r = $this->db->getOne($sql);
00169
00170 if (DB::isError($r))
00171 {
00172 $this->raiseError($r->getMessage()."<br><font size=-1>SQL: ".$sql."</font>", $this->error_class->FATAL);
00173 }
00174 else
00175 {
00176 return $r;
00177 }
00178 }
00179
00180
00184 function quote($a_query, $null_as_empty_string = true)
00185 {
00186 if ($null_as_empty_string)
00187 {
00188 if ($a_query == "")
00189 {
00190 $a_query = "";
00191 }
00192 }
00193
00194
00195 return $this->db->quote($a_query);
00196 }
00197
00198
00208 function getRow($sql,$mode = DB_FETCHMODE_OBJECT)
00209 {
00210 $r = $this->db->getrow($sql,$mode);
00211
00212 if (DB::isError($r))
00213 {
00214 $this->raiseError($r->getMessage()."<br><font size=-1>SQL: ".$sql."</font>", $this->error_class->FATAL);
00215 }
00216 else
00217 {
00218 return $r;
00219 }
00220 }
00221
00222
00226 function getLastInsertId()
00227 {
00228 $r = $this->query("SELECT LAST_INSERT_ID()");
00229 $row = $r->fetchRow();
00230
00231 return $row[0] ? $row[0] : false;
00232 }
00233
00239 function prepare($query)
00240 {
00241 return $this->db->prepare($query);
00242 }
00243
00250 function executeMultiple($stmt,$data)
00251 {
00252 $res = $this->db->executeMultiple($stmt,$data);
00253
00254 if (DB::isError($res))
00255 {
00256 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$data."</font>", $this->error_class->FATAL);
00257 }
00258 else
00259 {
00260 return $res;
00261 }
00262 }
00263
00270 function execute($stmt,$data)
00271 {
00272 $res = $this->db->execute($stmt,$data);
00273
00274 if (DB::isError($res))
00275 {
00276 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$data."</font>", $this->error_class->FATAL);
00277 }
00278 else
00279 {
00280 return $res;
00281 }
00282 }
00283
00292 function autoExecute($a_tablename,$a_fields,$a_mode = DB_AUTOQUERY_INSERT,$a_where = false)
00293 {
00294 $res = $this->db->autoExecute($a_tablename,$a_fields,$a_mode,$a_where);
00295
00296 if (DB::isError($res))
00297 {
00298 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$data."</font>", $this->error_class->FATAL);
00299 }
00300 else
00301 {
00302 return $res;
00303 }
00304 }
00305 function checkQuerySize($a_query)
00306 {
00307 global $lang;
00308
00309 if(strlen($a_query) >= $this->max_allowed_packet_size)
00310 {
00311 return false;
00312 }
00313 else
00314 {
00315 return true;
00316 }
00317 }
00318
00319
00320
00321
00322
00323 function setMaxAllowedPacket()
00324 {
00325
00326
00327 $query = "SHOW VARIABLES LIKE 'version'";
00328 $res = $this->db->query($query);
00329 if(DB::isError($res))
00330 {
00331 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$query."</font>", $this->error_class->FATAL);
00332 }
00333 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00334 {
00335 $version = $row->Value;
00336 }
00337
00338
00339 if(substr($version,0,1) == "4")
00340 {
00341 ini_get("post_max_size");
00342 $query = "SET GLOBAL max_allowed_packet = ".(int) ini_get("post_max_size") * 1024 * 1024;
00343 $this->db->query($query);
00344 if(DB::isError($res))
00345 {
00346 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$query."</font>", $this->error_class->FATAL);
00347 }
00348 }
00349
00350 $query = "SHOW VARIABLES LIKE 'max_allowed_packet'";
00351 if(DB::isError($res))
00352 {
00353 $this->raiseError($res->getMessage()."<br><font size=-1>SQL: ".$query."</font>", $this->error_class->FATAL);
00354 }
00355 $res = $this->db->query($query);
00356 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00357 {
00358 $this->max_allowed_packet_size = $row->Value;
00359 }
00360 #var_dump("<pre>",$this->max_allowed_packet_size,"<pre>");
00361 return true;
00362 }
00363
00369 function _lockTables($a_table_params)
00370 {
00371 global $ilDB;
00372
00373 $lock_str = 'LOCK TABLES ';
00374 $counter = 0;
00375 foreach($a_table_params as $table_name => $type)
00376 {
00377 $lock_str .= $counter++ ? ',' : '';
00378 $lock_str .= $table_name.' '.$type;
00379 }
00380
00381 $ilDB->query($lock_str);
00382
00383 return true;
00384 }
00385 function _unlockTables()
00386 {
00387 global $ilDB;
00388
00389 $ilDB->query('UNLOCK TABLES');
00390
00391 return true;
00392 }
00393
00397 function getMySQLVersion()
00398 {
00399 return mysql_get_server_info();
00400 }
00401
00405 function isMysql4_1()
00406 {
00407 $version = explode(".", $this->getMysqlVersion());
00408 if ($version[0] == "4" && $version[1] == "1")
00409 {
00410 return true;
00411 }
00412
00413 return false;
00414 }
00415
00424 function isMysql4_1OrHigher()
00425 {
00426 $version = explode(".", $this->getMysqlVersion());
00427 if ((int)$version[0] >= 5 ||
00428 ((int)$version[0] == 4 && (int)$version[1] >= 1))
00429 {
00430 return true;
00431 }
00432
00433 return false;
00434 }
00435
00439 function isMysql4_0OrHigher()
00440 {
00441 $version = explode(".", $this->getMysqlVersion());
00442 if((int) $version[0] >= 4)
00443 {
00444 return true;
00445 }
00446 return false;
00447 }
00448
00456 function tableColumnExists($a_table, $a_column_name)
00457 {
00458 $column_visibility = FALSE;
00459 $query = "SHOW COLUMNS FROM `$a_table`";
00460 $res = $this->db->query($query);
00461 if ($res->numRows())
00462 {
00463 while ($data = $res->fetchRow(DB_FETCHMODE_ASSOC))
00464 {
00465 if (strcmp($data["Field"], $a_column_name) == 0)
00466 {
00467 $column_visibility = TRUE;
00468 }
00469 }
00470 }
00471 return $column_visibility;
00472 }
00473 }
00474 ?>