我正在尝试像这样向 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;
}
}
连接函数是这样的:
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;
}
但是,如果我尝试插入具有一些 unicode 字符的 $ratingtext
行,例如:Lepšišie,我只会在表中得到 Lepieie
。表有 utf8_slovak_ci
编码。
最佳答案
mysql 中的php 模块无法根据配置自动将自身设置为utf8。可能没有人知道,为什么。解决方法是
SET NAMES 'utf8';
在每个 mysql 连接开始时查询。
我在你的问题中看到,你已经在解决这个问题了。不,设置好之后就不需要 utf8_encode
之类的技巧了。
替代的东西($something->connect
之类的)是行不通的,它们都是基于 php 的 mysql 模块,它是 apache 的一个模块。这是一个老错误,可能永远不会修复。祝你好运!
关于PHP 正在向 MySQL 插入问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914222/