热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pdo连接数据类与中文乱码解决方法

1.pdo简介pdo(phpdataobject)是php5中加入的东西,是php5新加入的一个重大功能,因为在php5以前的php4php3都是一堆的数据库教程扩展来跟各个数据...
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数据库实例,代码如下:

 exec("insert into db_demo(name,content) values('title','content')")){  
        echo "插入成功!";  
        echo $pdo -> lastinsertid();  
    }  
?>
     
 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'字符,之后的本该显示中文的地方却是空白,我是只要解决的:直接将utf8替换成了gbk,就可以了,即:

pdo::__construct($dsn, $user, $pass, array(pdo::mysql_attr_init_command => "set names'gbk';"));

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

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

第二种我也在我的环境里测试过,碰到这种情况,把utf8替换成gbk,就能显示了,另外,这里的pdo::在使用的时候用$pdo->代替,当然,这个是个变量,变量名称可以自己定义.

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

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

这几种我都测试过了,都行,另外,我在这里还介绍一种解决中文乱码的一种方法,不过大同小异,基本和第三种没什么区别,不通的是,这种方法,没用query而是用exec,代码如下:

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

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; //开源代码phprm.com
        
    } elseif ($execrow) {
        return $pdo->exec("delete from $table where 1=1 $sqlwhere");
    } else {
        $pdo->query("delete from $table where 1=1 $sqlwhere");
    }
}



文章地址:

转载随意^^请带上本文地址!

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
甜心菇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有