php 连接mysql乱码解决方法

 更新时间:2016年11月25日 16:37  点击:2086
出现乱码常见是直接连接mysql数据库教程而没设置连接查询的编码了,一般常用的是mysql_query("set names 'gb2312'")这样大多是可以解决的,下面来看一个上面方法解决不了处理方法。
 代码如下 复制代码

  $link = mysql_connect('localhost','root','');

  mysql_query("set character_set_connetion=utf8,character_set_result=utf8, character_set_client=binary",$link);

 

php教程 用户注册并且设置为己登录状态实现方法,下面实例讲述了如何把表单提交的数据保存到mysql教程数据库教程,而没有实现用户注册后自动登录的功能,而实例二就实现了这种做法。

<html>
<body>
<?php

$self = $_SERVER['PHP_SELF'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];
$password = $_POST['password'];

if( (!$firstname) or (!$lastname) or (!$username) or (!$password) )
{
  $form ="Please enter all new user details...";
  $form.="<form action="$self"";
  $form.=" method="post">First Name: ";
  $form.="<input type="text" name="firstname"";
  $form.=" value="$firstname"><br>Last Name: ";
  $form.="<input type="text" name="lastname"";
  $form.=" value="$lastname"><br>User Name: ";
  $form.="<input type="text" name="username"";
  $form.=" value="$username"><br>Password: &nbsp; ";
  $form.="<input type="text" name="password"";
  $form.=" value="$password"><br>";
  $form.="<input type="submit" value="Submit">";
  $form.="</form>";
  echo($form);
}
else
{
  $conn = @mysql_connect("localhost","root", "") or die("Could not connect to MySQL");
  $db = @mysql_select_db("my_database",$conn) or die("Could not select database");
  $sql = "insert into users (first_name,last_name,user_name,password)values ("$firstname","$lastname","$username",password("$password") )";
  $result = @mysql_query($sql,$conn)or die("Could not execute query");
  if($result){
    echo("New user $username added");
  }
}
?>
</body></html>


下面个实例更详细,用户注册后并且设置用户的为登录状态,本实现利用了setcookie来保存用户登录信息

create table user_info (
user_id char(18),
fname char(15),
email char(35));


//File: index.php

<?
$form = "
<form action="index.php" method="post">
<input type="hidden" name="seenform" value="y">
Your first name?:<br>
<input type="text" name="fname" value=""><br>
Your email?:<br>
<input type="text" name="email" value=""><br>
<input type="submit" value="Register!">
</form>
";
if ((! isset ($seenform)) && (! isset ($userid))) :
     print $form;
elseif (isset ($seenform) && (! isset ($userid))) :
     $uniq_id = uniqid(rand());
     @mysql_pconnect("localhost", "root", "") or die("Could not connect to MySQL server!");
     @mysql_select_db("user") or die("Could not select user database!");
     $query = "INSERT INTO user_info VALUES('$uniq_id', '$fname', '$email')";
     $result = mysql_query($query) or die("Could not insert user information!");
     setcookie ("userid", $uniq_id, time()+2592000);

     print "Congratulations $fname! You are now registered!.";
elseif (isset($userid)) :
     @mysql_pconnect("localhost", "root", "") or die("Could not connect to MySQL server!");
     @mysql_select_db("user") or die("Could not select user database!");
     $query = "SELECT * FROM user_info WHERE user_id = '$userid'";
     $result = mysql_query($query) or die("Could not extract user information!");

     $row = mysql_fetch_array($result);
     print "Hi ".$row["fname"].",<br>";
     print "Your email address is ".$row["email"];

endif;

?>

分享一下 我所用的方法。只对php教程myadmin导出的sql文件有效

$dbfile="test.sql";
 $content=iconv("utf-8","gb2312",file_get_contents($dbfile));
 //获取创建的数据
 //去掉注释
 $content=preg_replace("/--.*n/iu","",$content);
 //替换前缀
 $content=str_replace("ct_",table_pre,$content);

$carr=array();
 $iarr=array();
 //提取create
 preg_match_all("/create table .*(.*).*;/ius",$content,$carr);
 $carr=$carr[0];
 foreach($carr as $c)
 {
  @mysql教程_query($c,$link);
 }
 
 //提取insert
 preg_match_all("/insert into .*(.*);/ius",$content,$iarr);
 $iarr=$iarr[0];
 //插入数据
 foreach($iarr as $c)
 {
  @mysql_query($c,$link);
 }

 

1.pdo简介
pdo(php教程 data object) 是php 5 中加入的东西,是php 5新加入的一个重大功能,因为在php 5以前的php4/php3都是一堆的数据库教程扩展来跟各个数据库的连接和处理,什么 php_mysql教程.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
php6中也将默认使用pdo的方式连接,mysql扩展将被作为辅助
2.pdo配置
php.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与pdo相关的数据库扩展前面的";"号,然后重启apache服务器即可。
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
......
3.pdo连接mysql数据库
new pdo("mysql:host=localhost;dbname=db_demo","root","");
默认不是长连接,若要使用数据库长连接,需要在最后加如下参数:
new pdo("mysql:host=localhost;dbname=db_demo","root","","array(pdo::attr_persistent => true) ");
4.pdo常用方法及其应用
pdo::query() 主要是用于有记录结果返回的操作,特别是select操作
pdo::exec() 主要是针对没有结果集合返回的操作,如insert、update等操作
pdo::lastinsertid() 返回上次插入操作,主键列类型是自增的最后的自增id
pdostatement::fetch() 是用来获取一条记录
pdostatement::fetchall() 是获取所有记录集到一个中
5.pdo操作mysql数据库实例


复制代码 代码如下:

<?php
$pdo = new pdo("mysql:host=localhost;dbname=db_demo","root","");
if($pdo -> exec("insert into db_demo(name,content) values('title','content')")){
echo "插入成功!";
echo $pdo -> lastinsertid();
}
?>


 

复制代码 代码如下:

<?php
$pdo = new pdo("mysql:host=localhost;dbname=db_demo","root","");
$rs = $pdo -> query("select * from test");
while($row = $rs -> fetch()){
print_r($row);
}
?>

 

网上最常出现的解决中文乱码显示的代码是:

第一种:pdo::__construct($dsn, $user, $pass, array

(pdo::mysql_attr_init_command => "set names'utf8';"));

我试过用第一种方法,可结果是,name字段只显示一个‘c'字符。之后的本该显示中文的地方却是空白。

结果是这样的:如图1示

我是只要解决的:直接将utf8替换成了gbk,就可以了,即:

pdo::__construct($dsn, $user, $pass, array(pdo::mysql_attr_init_command => "set

names'gbk';"));

效果图2如下:


第二种:pdo::__construct($dsn, $user, $pass);

pdo::exec("set names 'utf8';");

第二种我也在我的环境里测试过,显示效果如图1所示,碰到这种情况,把utf8替换成gbk,就能显

示了。另外,这里的pdo::在使用的时候用$pdo->代替,当然,这个是个变量,变量名称可以自己定义。

第三种

:$pdo->query('set names utf8;');

至于第三种呢,看了上面两种,应该也知道要吧utf8替换成gbk,也能正确显示了。

这几种我都测试过了。都行。哈哈。另外,我在这里还介绍一种解决中文乱码的一种方法,不过大同小异,

基本和第三种没什么却别,不通的是,这种方法,没用query而是用exec,代码如下:

$pdo->exec("set character set gbk");

<?php
/*

常用数据库操作,如:增删改查,获取单条记录、多条记录,返回最新一条插入记录id,返回操作记录行数等
*/
/*
参数说明
int $debug 是否开启调试,开启则输出sql语句
int $getcount 是否记数,返回值为行数
int $getrow 是否返回值单条记录
string $table 数据库表
string $fields 需要查询的数据库字段,允许为空,默认为查找全部
string $sqlwhere 查询条件,允许为空
string $orderby 排序,允许为空,默认为id倒序
*/

function hrselect($debug, $getcount, $getrow, $table, $fields="*", $sqlwhere="", $orderby="id desc"){
global $pdo;
if($debug){
if($getcount){
echo "select count(*) from $table where 1=1 $sqlwhere order by $orderby";
}else{
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";
}
exit;
}else{
if($getcount){
$rs = $pdo->query("select count(*) from $table where 1=1 $sqlwhere order by $orderby");
return $rs->fetchcolumn();
}elseif($getrow){
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
return $rs->fetch();
}else{
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
return $rs->fetchall();
}
}
}
/*
参数说明
int $debug 是否开启调试,开启则输出sql语句
int $execrow 是否开启返回执行条目数
int $lastinsertid 是否开启返回最后一条插入记录id
string $table 数据库表
string $fields 需要插入数据库的字段
string $values 需要插入数据库的信息,必须与$fields一一对应
*/
function hrinsert($debug, $execrow, $lastinsertid, $table, $fields, $values){
global $pdo;
if($debug){
echo "insert into $table ($fields) values ($values)";
exit;
}elseif($execrow){
return $pdo->exec("insert into $table ($fields) values ($values)");
}elseif($lastinsertid){
return $pdo->lastinsertid("insert into $table ($fields) values ($values)");
}else{
$pdo->query("insert into $table ($fields) values ($values)");
}
}
/*
参数说明
int $debug 是否开启调试,开启则输出sql语句
int $execrow 是否开启执行并返回条目数
string $table 数据库表
string $set 需要更新的字段及内容,格式:a='abc',b=2,c='2010-10-10 10:10:10'
string $sqlwhere 修改条件,允许为空
*/
function hrupdate($debug, $execrow, $table, $set, $sqlwhere=""){
global $pdo;
if($debug){
echo "update $table set $set where 1=1 $sqlwhere";
exit;
}elseif($execrow){
return $pdo->exec("update $table set $set where 1=1 $sqlwhere");
}else{
$pdo->query("update $table set $set where 1=1 $sqlwhere");
}
}
/*
参数说明
int $debug 是否开启调试,开启则输出sql语句
int $execrow 是否开启返回执行条目数
string $table 数据库表
string $sqlwhere 删除条件,允许为空
*/
function hrdelete($debug, $execrow, $table, $sqlwhere=""){
global $pdo;
if($debug){
echo "delete from $table where 1=1 $sqlwhere";
exit;
}elseif($execrow){
return $pdo->exec("delete from $table where 1=1 $sqlwhere");
}else{
$pdo->query("delete from $table where 1=1 $sqlwhere");
}
}
?>

php教程记录搜索引擎蜘蛛爬行记录代码

<center>
<form action="setup.php" method="post">
<table align="center">
<tr>

<td>服务器:</td><td><input value="localhost" name="server" /></td>
</tr>
<tr>
<td>用户名:</td><td><input value="数据库教程用户名" name="sqluser" /></td>
</tr>
<tr>
<td>密&nbsp;&nbsp;码:</td><td><input value="数据库密码" name="sqlpass" /></td>
</tr>
<tr>
<td>库名称:</td><td><input value="数据库名称" name="sqldb" /></td>
</tr>
<tr>
<td>管理员账号:</td><td><input value="admin" name="adminname" /></td>
</tr>
<tr>
<td>管理员密码:</td><td><input value="admin" name="adminpass" /></td>
</tr>

<tr>
<td></td><td ><input type="submit" value="开始安装" /></td>
</tr>
</table>
</form>


</center>

setup.php文件

<?php

@$server = $_post['server'];
@$sqluser = $_post['sqluser'];
@$sqlpass = $_post['sqlpass'];
@$sqldb = $_post['sqldb'];
@$adminname=$_post['adminname'];
@$adminpass=md5($_post['adminpass']);
@$conn = mysql教程_connect($server, $sqluser, $sqlpass) or die("<script>alert('数据库无法链接,请检查用户名和密码是否有误');history.back();</script>");
$db = mysql_select_db($sqldb) or die("<script>alert('数据库无法找到,请检查数据库名称是否填写有误!');history.back();</script>");


$sql1="set foreign_key_checks=0";
$sql2="drop table if exists `robots`";
$sql3="create table `robots` (
  `id` int(11) not null auto_increment,
  `robotsname` varchar(200) default null,
  `robotsip` varchar(200) default null,
  `riqi` date default null,
  `shijian` time default null,
  `robotspage` varchar(255) default null,
  primary key (`id`)
) engine=innodb default charset=gbk";

$sql1ok=mysql_query($sql1,$conn);
$sql2ok=mysql_query($sql2,$conn);
$sql3ok=mysql_query($sql3,$conn);
if (!$sql1ok or !$sql2ok or !$sql3ok) {
    echo "<script>alert('您的mysql存在严重性故障,程序无法继续安装,请联系程序作者!');location.href='http://www.axphp.com';</script>";
} else
{
    $conntext = file_get_contents("conn.setup");
    $conntext = str_replace("server", $server, $conntext);
    $conntext = str_replace("user", $sqluser, $conntext);
    $conntext = str_replace("pass", $sqlpass, $conntext);
    $conntext = str_replace("mysqldb", $sqldb, $conntext);
    $conntext = str_replace("adminzh",$adminname,$conntext);
    $conntext = str_replace("adminmmpas",$adminpass,$conntext);
    file_put_contents("../config.php", $conntext);
    rename("setup.php","setup.lock");
    echo "<script>alert('恭喜,安装成功!');location.href='../index.html';</script>";
}
?>

zz.php文件

<?php
include_once 'config.php';
@$ax_ym=$_server['request_uri'];
@$ax_ss=$_server['http_user_agent'];
@$ax_url=$_server['http_referer'];
@$ax_ip=$_server['remote_addr'];
@$ax_date=date("y-m-d");
@$ax_time=date("h:i:s");
$baidu=stristr($ax_ss,"baiduspider");
$google=stristr($ax_ss,"googlebot");
$soso=stristr($ax_ss,"sosospider");
$youdao=stristr($ax_ss,"youdaobot");
$bing=stristr($ax_ss,"bingbot");
$sogou=stristr($ax_ss,"sogou web spider");
$yahoo=stristr($ax_ss,"yahoo! slurp");
if($baidu)
{
    $ax_ss="baidu";
}
elseif($google)
{
    $ax_ss="google";
}
elseif($soso)
{
    $ax_ss="soso";
}
elseif($youdao)
{
    $ax_ss="youdao";
}
elseif($bing)
{
    $ax_ss="bing";
}
elseif($sogou)
{
    $ax_ss="sogou";
}
elseif($yahoo)
{
    $ax_ss="yahoo";
}
else
{
    $ax_ss=null;
}


if($baidu or $google or $soso or $youdao or $bing or $sogou or $yahoo)
{
    $zzsql="insert into robots (robotsname,robotspage,robotsip,riqi,shijian) values ('$ax_ss','$ax_ym','$ax_ip','$ax_date','$ax_time')";
    $exeok=mysql_query($zzsql,$conn);
}
?>

在要抓蜘蛛页面加上

include('zz.php')
或js调用
<script src="zz.php"></script>

源码下载

http://down.111cn.net/down/tool/o/2011/0311/22881.html

[!--infotagslink--]

相关文章

  • php生成二维码中文乱码问题解决方法

    最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25