Как заменить id на username?

Рейтинг: 0Ответов: 1Опубликовано: 13.02.2015

Помогите, как заменить id на username?

Например:

id     | username
1        Andrei
2        Nikolai
3        Pavel

и например:

Имя: <?php $userdata(id_1); ?> =>   Имя: Andrei
Имя: <?php $userdata(id_2); ?> =>   Имя: Nikolai
Имя: <?php $userdata(id_3); ?> =>   Имя: Pavel.

Помогите, я новичок, как можно сделать? Мне очень нужно! Пожалуйста, если можно, расскажите подробно...

Ответы

▲ 2Принят

Вот небольшой пример класса-обертки для 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"); // выполнится нормально