PHP 正在向 MySQL 插入问号

标签 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;
        }
    }

连接函数是这样的:

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/

相关文章:

javascript - 对 JSON 数据运行 jQuery

php - 从 php 调用外部 Web API 的最佳方式

php - 如何查看 Ajax 传递给 PHP 的数据以及 PHP 使用数据 - 下拉菜单选项执行的操作

mysql - 如何忽略下一个重复行?

mysql - INNER JOIN 之后的 SQL PIVOT

mysql - SQL 查询以根据组中缺少值来过滤记录

php - 使用 PHP $_POST 插入

php - 仅退回 1 件商品

MYSQL - 语法错误

mysql - 获取每组中除最大值之外的所有项目 - mysql