PHP正在向MySQL插入问号

时间:2014-04-07 13:40:58

标签: php mysql sql utf-8

我试图像这样向MySQL数据库插入一行:

function insertUserRating($username, $eventid, $ratingval, $ratingtext) {
        mysqli_query($this -> db -> connect(), "SET NAMES 'utf8';");
        $datetime = date("Y-m-d H:i:s");
        $query = mysqli_query($this -> db -> connect(), "   INSERT INTO  `rating` ( `id_user` ,`id_event` ,`rating_value` ,`rating_text` ,`rating_date`) 
            VALUES ((SELECT id_user FROM user WHERE username=  '$username' ),  '$eventid',  '$ratingval',  '$ratingtext',  '$datetime' )");
        if ($query) {
            return true;
        } else {
            return false;
        }
    }

connect函数是这样的:

public function connect() {
        require_once 'config.php';
        $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
        $con -> set_charset("utf8");
        if (mysqli_connect_errno()) {
         throw new Exception(mysqli_connect_error(), mysqli_connect_errno());}
        return $con;
    }

但是如果我尝试插入带有$ratingtext行的行,例如:Lepšišie我只在表中获得Lepieie。表格有utf8_slovak_ci个编码。

1 个答案:

答案 0 :(得分:0)

mysql中的php模块无法根据配置自动设置为utf8。可能没有人知道,为什么。解决方法是

SET NAMES 'utf8';

在每个mysql连接的开头查询。

我在你的问题中看到,你已经在玩这个bug了。不,在你设置之后你不需要utf8_encode和这些技巧。

替代事物($something->connect等)不起作用,它们都基于php的mysql模块,这是apache的一个模块。这是一个老虫,可能永远不会被修复。祝你好运!