if(! mysqli_connect_errno()) {
$this->connected = true;
}
+ if (isset($a->config["system"]["db_charset"]))
+ $this->db->set_charset($a->config["system"]["db_charset"]);
}
else {
$this->mysqli = false;
if($this->db && mysql_select_db($db,$this->db)) {
$this->connected = true;
}
+ if (isset($a->config["system"]["db_charset"]))
+ mysql_set_charset($a->config["system"]["db_charset"], $this->db);
}
if(! $this->connected) {
$this->db = null;
return $this->db;
}
+ /**
+ * @brief Returns the MySQL server version string
+ *
+ * This function discriminate between the deprecated mysql API and the current
+ * object-oriented mysqli API. Example of returned string: 5.5.46-0+deb8u1
+ *
+ * @return string
+ */
+ public function server_info() {
+ if ($this->mysqli) {
+ $return = $this->db->server_info;
+ } else {
+ $return = mysql_get_server_info($this->db);
+ }
+ return $return;
+ }
+
+ /**
+ * @brief Returns the number of rows
+ *
+ * @return string
+ */
+ public function num_rows() {
+ if (!$this->result)
+ return 0;
+
+ if ($this->mysqli) {
+ $return = $this->result->num_rows;
+ } else {
+ $return = mysql_num_rows($this->result);
+ }
+ return $return;
+ }
+
public function q($sql, $onlyquery = false) {
global $a;
$this->error = '';
+ // Check the connection (This can reconnect the connection - if configured)
+ if ($this->mysqli)
+ $connected = $this->db->ping();
+ else
+ $connected = mysql_ping($this->db);
+
+ $connstr = ($connected ? "Connected": "Disonnected");
+
$stamp1 = microtime(true);
+ $sql = "/*".$a->callstack()." */ ".$sql;
+
if($this->mysqli)
$result = @$this->db->query($sql);
else
}
if($this->mysqli) {
- if($this->db->errno)
+ if($this->db->errno) {
$this->error = $this->db->error;
+ $this->errorno = $this->db->errno;
+ }
+ } elseif(mysql_errno($this->db)) {
+ $this->error = mysql_error($this->db);
+ $this->errorno = mysql_errno($this->db);
}
- elseif(mysql_errno($this->db))
- $this->error = mysql_error($this->db);
if(strlen($this->error)) {
- logger('dba: ' . $this->error);
+ logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error);
}
if($this->debug) {
}
}
+ function connected() {
+ if ($this->mysqli)
+ $connected = $this->db->ping();
+ else
+ $connected = mysql_ping($this->db);
+
+ return $connected;
+ }
+
function __destruct() {
if ($this->db)
if($this->mysqli)
}}
+/**
+ * @brief Performs a query with "dirty reads"
+ *
+ * By doing dirty reads (reading uncommitted data) no locks are performed
+ * This function can be used to fetch data that doesn't need to be reliable.
+ *
+ * @param $args Query parameters (1 to N parameters of different types)
+ * @return array Query array
+ */
+function qu($sql) {
+
+ global $db;
+ $args = func_get_args();
+ unset($args[0]);
+
+ if($db && $db->connected) {
+ $stmt = @vsprintf($sql,$args); // Disabled warnings
+ if($stmt === false)
+ logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);
+ $db->q("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
+ $retval = $db->q($stmt);
+ $db->q("COMMIT;");
+ return $retval;
+ }
+
+ /**
+ *
+ * This will happen occasionally trying to store the
+ * session data after abnormal program termination
+ *
+ */
+ logger('dba: no database: ' . print_r($args,true));
+ return false;
+
+}
+
/**
*
* Raw db query, no arguments