php从表单中插入到数据库的内容在数据库显示为乱码但是将

classMysql{private$host;private$uname;private$pwd;private$dbname;private$ecoding;publ... class Mysql
{
private $host;
private $uname;
private $pwd;
private $dbname;
private $ecoding;

public function __construct($host="localhost",$uanme="root",$pwd="123456",$dbname="Staticize",$ecoding="utf8")
{
$this->host = $host;
$this->uname = $uanme;
$this->pwd = $pwd;
$this->dbname = $dbname;
$this->ecoding = $ecoding;

$conn = @mysql_connect($this->host,$this->uname,$this->pwd) or die("连接数据库异常");

@mysql_select_db($this->dbname) or die("选择数据库异常");

mysql_query("set names" . '$this->ecoding');

}
但是将mysql_query("set names" . '$this->ecoding');改成mysql_query("set names utf8" );就可以了。为什么呢
展开
 我来答
biglern
2011-11-25
知道答主
回答量:12
采纳率:0%
帮助的人:9.5万
展开全部
单双引号的问题
将 '$this->ecoding' 改成 "$this->ecoding" 就可以了。在php中,单引号中的内容不会被转义,也就是说 ‘$this->ecoding' 只是字符串$this->ecoding,并不是变量; 双引号中的变量会被转义。
追问
这样的话,插入到数据是乱码,查询到前台是正常的,为什么
追答
这是因为你的数据库内部编码与你使用PHP操作数据库的编码不统一造成的。
mysql_query("set names utf8" ),这一句是说,你将内容写入或者读出数据库的时候将内容用uft8编码进行存储,但数据库有自己的存储编码。例如你的数据库的编码是latin1,你将一个字符是通过utf8写进去的,在数据库中查看的时候,是通过latin1码查看的,当然是乱码了。但是当你查询读出到前台时,用的又是utf8编码,所以又正常了。有点负负得正的意思。
建议你把编码统一下,用show variables like '%char%' 查看你的数据库编码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
912023630
2017-12-20 · TA获得超过2182个赞
知道小有建树答主
回答量:820
采纳率:76%
帮助的人:161万
展开全部
                          ↓              ↓去掉这两个单引号
mysql_query("set names" . '$this->ecoding'); 
                      ↑这里少了个空格哦
  • PHP 原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。

  • PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

  • PHP 是免费的,并且使用广泛。对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
foxaobe
2011-11-24 · TA获得超过331个赞
知道小有建树答主
回答量:897
采纳率:0%
帮助的人:613万
展开全部
这是因为你的数据库建立的时候选择的是UTF8编码!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式