Вот небольшой пример класса-обертки для mysqli:
class MysqliWrapper
{
protected static $instance = null;
protected $mysqli = null;
protected function __construct()
{
$host = "Localhost";
$user = "language";
$password = "language";
$db = "language";
$connect_error = "MySQL сервер недоступен!";
$this->mysqli = new mysqli($host, $user, $password, $db);
if ($this->mysqli->connect_errno) {
throw new Exception($connect_error);
}
}
public static function getInstance()
{
if (!static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
public function __call($name, $arguments)
{
return call_user_func_array(array($this->mysqli, $name), $arguments);
}
}
Сначала получаете экземпляр класса, а затем работаете с ним так же, как и с mysqli. Например, функцию из моего комментария можно переписать в виде:
function function nameById($id)
{
$id = intval($id);
$query = "SELECT username FROM users WHERE id = {$id}";
$db = MysqliWrapper::getInstance();
$queryResult = $db->query($query);
if (!$queryResult) {
return 'Error';
}
$userRow = $queryResult->fetch_assoc();
return $userRow['username'];
}
Если надо будет изменить используемую БД, то можно сделать так же, как и для mysqli:
$db = MysqliWrapper::getInstance();
if (!$db->select_db('new_db_name')) {
die('Ошибка при смене БД');
}
Только в данном случае надо помнить следующее: поскольку используется один экземпляр, то после смены БД она сменится везде. Например, здесь будет ошибка:
$db1 = MysqliWrapper::getInstance();
$db1->select_db('db_with_users');
$db1->query("SELECT * FROM users"); // выполнится нормально
...
$db2 = MysqliWrapper::getInstance();
$db2->select_db('db_without_users');
$db2->query("SELECT * FROM goods"); // выполнится нормально
...
$db1->query("SELECT * FROM users"); // БД сменили, поэтому не выполнится
...
Избежать этого можно, например, так:
$db = MysqliWrapper::getInstance();
$db->query("SELECT * FROM db_with_users.users"); // выполнится нормально
$db->query("SELECT * FROM db_without_users.goods"); // выполнится нормально
$db->query("SELECT * FROM db_with_users.users"); // выполнится нормально