我试图像这样向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
个编码。
答案 0 :(得分:0)
mysql中的php模块无法根据配置自动设置为utf8。可能没有人知道,为什么。解决方法是
SET NAMES 'utf8';
在每个mysql连接的开头查询。
我在你的问题中看到,你已经在玩这个bug了。不,在你设置之后你不需要utf8_encode
和这些技巧。
替代事物($something->connect
等)不起作用,它们都基于php的mysql模块,这是apache的一个模块。这是一个老虫,可能永远不会被修复。祝你好运!