微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHPstorm操作mysql数据库及phpmyadmin的乱码问题解决

前言

也不能说是完全理解了里面的逻辑和问题吧,只是目前所掌握的方法可以使得在浏览器输出PHPmyadmin里面的查看都不会产生乱码。

具体操作

通过PHP代码链接数据库后创建一个表Worker

<?PHP
$MysqL=MysqLi_connect("localhost","root","123456","MysqLdb");
if(empty($MysqL)){
    die("MysqL_connet Failed:".MysqLi_connect_error());
}
echo ("connect to ".MysqLi_get_host_info($MysqL));

$sql="CREATE TABLE Worker ( EmpID INT AUTO_INCREMENT PRIMARY KEY ,EmpName varchar(50) NOT NULL ,
        DeID INT,Title varchar(50),Salary INT)";
echo "<br/>";
if($MysqL->query($sql)===TRUE)
{
    echo "table create sucessful";
}
else
{
    echo "table create 错误".$MysqL->error;
}
//1向表中插入数据

//2向表中插入数据

MysqLi_close($MysqL);
echo ("<br/>关闭数据库链接");

浏览器运行结果

在这里插入图片描述

PHPmyadmin截图

在这里插入图片描述

向表中插入数据

$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)";
if ($MysqL->multi_query($exec) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: "."<br>" . $MysqL->error;
}

报错,原因是字符串不匹配(我也不知道为啥,这个PHPstorm里面我的字符串就是utf8格式的啊)

在这里插入图片描述

添加一行代码,插入成功了

MysqLi_query($MysqL,"SET NAMES utf8");
$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)";

在这里插入图片描述

PHPmyadmin里面也是没有乱码的

在这里插入图片描述


输出插入的数据到浏览器看一下,也是没有乱码的

echo "<br/>";
$sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧
$result=$MysqL->query($sql);
//循环处理表中的记录
while ($row=$result->fetch_row())
{
    print ($row[0]." ".$row[1]." ".$row[2]."<br/>");
}
$result->free();

在这里插入图片描述


现在查看一下PHPmyadmin里面这个Worker表的编码格式,其实是gb2312的

在这里插入图片描述


通过上述方法创建了表之后,如果只是需要查找表中的数据需要在查找前添加一行代码

MysqLi_query($MysqL,"SET NAMES utf9");

否则无法显示中文

在这里插入图片描述

其他

我觉得上面的方法我没有完全搞明白吧,这相当于通过PHP往表中插入的数据编码格式是utf8但,数据表的格式又是gb2312,但是可以正常显示
我尝试了在PHPmyadmin里面把gb2312改成utf8,这样的情况下,在PHP编辑器中不添加格式转换代码就可以直接插入中文到数据表中,但是在PHPmyadmin中显示的是中文乱码。

在这里插入图片描述


在这里插入图片描述


通过下面代码给表中添加数据,会导致在PHPmyadmin中出现中文乱码,但浏览器中不会出现乱码

$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)";
$sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧
$result=$MysqL->query($sql);
//循环处理表中的记录
while ($row=$result->fetch_row())
{
    print ($row[0]." ".$row[1]." ".$row[2]."<br/>");
}
$result->free();

在这里插入图片描述

后记

有很多方法是操作MysqL文件配置什么的,以及操作数据库的,感觉这样会是一劳永逸的方法吧,但是我也不是太感轻易尝试修改文件什么的,经过探索和尝试,上面的方法就不要修改数据库或者表的属性什么的了,直接在插入数据之前声明插入数据的编码格式就好了,感觉也算是比较方便的做法了吧。
我把代码改成了函数风格,感觉操作方便多了,不用每次都要去搞一大段的注释什么的了。

<?PHP
$MysqL=MysqLi_connect("localhost","root","123456","MysqLdb");
if(empty($MysqL)){
    die("MysqL_connet Failed:".MysqLi_connect_error());
}
echo ("connect to ".MysqLi_get_host_info($MysqL));
//

function droptable($MysqL)
{
    $sql="DROP TABLE Worker";
    if($MysqL->query($sql)===TRUE)
{
    echo "<br/>drop tabble sucessful";
}
else
{
    echo "table drop 失败".$MysqL->error;
}
}
function creattable($MysqL)
{
    $sql="CREATE TABLE Worker ( EmpID INT AUTO_INCREMENT PRIMARY KEY ,EmpName varchar(50) NOT NULL ,
        DeID INT,Title varchar(50),Salary INT)";
echo "<br/>";
if($MysqL->query($sql)===TRUE)
{
    echo "table create sucessful<br/>";
}
else
{
    echo "table create 错误".$MysqL->error;
}
}

function insertdata($MysqL)
{
    MysqLi_query($MysqL,"SET NAMES utf8");
$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)";
if ($MysqL->multi_query($exec) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: "."<br>" . $MysqL->error;
}

}
droptable($MysqL);
creattable($MysqL);
insertdata($MysqL);

MysqLi_query($MysqL,"SET NAMES utf8");
echo "<br/>";
$sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧
$result=$MysqL->query($sql);
//循环处理表中的记录
while ($row=$result->fetch_row())
{
    print ($row[0]." ".$row[1]." ".$row[2]."<br/>");
}
$result->free();
MysqLi_close($MysqL);
echo ("<br/>关闭数据库链接");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐