function connectWithParams($p) { @($newParams = array('host' => $p['db_host'], 'user' => $p['db_user'], 'pass' => $p['db_pass'], 'name' => $p['db_name'], 'port' => $p['db_port'], 'initsql' => $p['initsql'])); $dbh = \CB\Cache::get('dbh'); $lastParams = array(); if (!empty($dbh)) { $lastParams = $dbh->lastParams; } //check if new params are different from last params if (@$lastParams['host'] != $newParams['host'] || @$lastParams['user'] != $newParams['user'] || @$lastParams['pass'] != $newParams['pass'] || @$lastParams['port'] != $newParams['port']) { //close previous connection if (!empty($dbh)) { $dbh->close(); } // connect with new params try { $dbh = new \mysqli($newParams['host'], $newParams['user'], $newParams['pass'] ? $newParams['pass'] : null, $newParams['name'] ? $newParams['name'] : null, $newParams['port']); } catch (\Exception $e) { if (\mysqli_connect_errno()) { throw new \Exception('Unable to connect to DB: ' . \mysqli_connect_error()); exit; } } } // if database changed then apply initsql if set if (!array_key_exists('name', $lastParams) || $lastParams['name'] != $newParams['name']) { $newParams['name'] = $dbh->real_escape_string($newParams['name']); if (!empty($newParams['name'])) { $dbh->query('USE `' . $newParams['name'] . '`') or die('Cannot access database "' . $newParams['name'] . '"'); } $dbh->set_charset('utf8'); // set time zone for database to 00:00 $dbh->query('SET @@session.time_zone = "+00:00"') or die(dbQueryError()); if (!empty($newParams['initsql'])) { $dbh->query($newParams['initsql']); } } $dbh->lastParams = $newParams; \CB\Cache::set('dbh', $dbh); return $dbh; }
function dbQuery($query, $parameters = array(), $dbh = false) { if (empty($dbh)) { $dbh = \CB\Cache::get('dbh'); if (empty($dbh)) { trigger_error('Error Database connections:' . __DIR__ . ' ' . __FILE__ . '(' . __LINE__ . ')', E_USER_ERROR); } } // Escape parameters as required & build parameters for callback function if (!is_array($parameters)) { $parameters = array($parameters); } foreach ($parameters as $k => $v) { if (!is_scalar($v) && !is_null($v)) { throw new \Exception("param error: " . print_r($parameters, 1) . "\n For SQL: {$query}", 1); } $parameters[$k] = is_int($v) ? $v : (null === $v ? 'NULL' : ($v == 'CURRENT_TIMESTAMP' ? $v : "'" . $dbh->real_escape_string($v) . "'")); } \CB\Cache::set('queryParameters', $parameters); // Call using mysqli_query $sql = preg_replace_callback('/\\$([0-9]+)/', __NAMESPACE__ . '\\dbQueryCallback', $query); \CB\Cache::set('lastSql', $sql); $rez = $dbh->query($sql); if ($rez === false && empty($parameters['hideErrors'])) { dbQueryError(); } return $rez; }