Example #1
0
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;
}
Example #2
0
 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;
 }