【问题标题】:PHP is inserting question marks to MySQLPHP 正在向 MySQL 插入问号
【发布时间】: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");如果您将表格的字符集类型设置为您需要的字符集,则不需要它们

标签: php mysql sql utf-8


【解决方案1】:

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

SET NAMES 'utf8';

在每个 mysql 连接开始时查询。

我在你的问题中看到,你已经在玩这个错误了。不,设置好之后就不需要utf8_encode 之类的技巧了。

替代的东西($something->connect 之类的)不起作用,它们都是基于 php 的 mysql 模块,它是 apache 的一个模块。这是一个老错误,可能永远无法修复。祝你好运!

【讨论】:

  • 设置名称'utf8';进入mysql查询?喜欢mysqli_query("SET NAMES 'utf8';"); ?是的,我通过 connect() 调用找到了那些东西,但是 nwm,我现在在很多地方都有它来重建它
  • 是的。它不获取任何数据,它仅指示 mysql 以 utf8 编码的数据连接进行通信。正常应该是自动处理,只有php中的mysql模块做不到。
  • 连接前?我应该把这个放在哪里......我现在有点困惑
  • @XOOLOOO 没有。刚连接后!但在第一次查询之前。
  • mysqli_query( set names 'utf8' )$con = mysqli_之后
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2012-10-25
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多