webtech
webtech

Reputation: 329

MySQLi set characters to utf-8

I have the following mysqli connection. How can I change the query encoding to uft-8. When visualising cyrillic results they show like ???????.

I need something like mysql_query("SET NAMES UTF8"); but I'm not sure for the right syntax.

Any ideas? Thanks.

<?php
class db_result
{
    private $handler;

    public function __construct($query, $data)
    {
        foreach($data as $value)
        {
            $query = preg_replace('/\?/', '"'.db::quote($value).'"', $query, 1);
        }

        $this->handler = db::$handler->query($query);
    }

    public function fetch()
    {
        return $this->handler->fetch_assoc();
    }

    public function fetchColumn()
    {
        $row = $this->handler->fetch_array();

        return $row?$row[0]:false;
    }
}

abstract class db
{
    public static $handler;

    public static function init($settings)
    {
        self::$handler = new mysqli($settings['host'], $settings['user'], $settings['password'], $settings['db_name']);

        return !self::$handler->connect_errno;
    }

    public static function query($query, $data=array())
    {
        return new db_result($query, (array) $data);
    }

    public static function last_id()
    {
        return self::$handler->insert_id;
    }

    public static function quote($string)
    {
        return self::$handler->escape_string($string);
    }
}

Upvotes: 1

Views: 670

Answers (1)

Ruby
Ruby

Reputation: 529

You can use mysqli::set_charset like this:

self::$handler->set_charset("utf8");

http://www.php.net/manual/en/mysqli.set-charset.php

Upvotes: 3

Related Questions