【发布时间】:2014-04-07 13:40:58
【问题描述】:
我正在尝试像这样向 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 编码。
【问题讨论】:
-
首先将 '$this -> db -> connect()' 放入一个变量中,并使用该变量避免不必要的混淆
-
他确实把它放在了一个变量中。 'db' 是他的主类中的一个实例字段,而 connect() 是他的 db 类中的一个函数
-
小心 SQL 注入...使用准备好的语句或参数化查询
-
@XOOLOOO - 您是否已将 $ratingtext 打印到屏幕上以查看它在插入数据库之前包含的内容?我认为您的问题是在您进行编码之前字符串变得混乱(我的意思是参数已经替换了外来字符
-
尽量不要这样做 $ratingtext = utf8_encode($ratingtext);而不是这样做 $con -> set_charset("utf8");如果您将表格的字符集类型设置为您需要的字符集,则不需要它们