pdo连接数据类与中文乱码解决方法
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教程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);
}
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>密 码:</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
pdo的mysql教程数据库教程操作类
* dbconfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等。
* dbtemplate类集合了对数据库的访问操作,主要有以下几个操作:
1. queryrows : 返回多行记录
2. queryrow : 返回为单条记录
3. queryforint : 查询单字段,返回整数
4. queryforfloat : 查询单字段,返回浮点数(float)
5. queryfordouble : 查询单字段,返回浮点数(double)
6. queryforobject : 查询单字段,返回对象,实际类型有数据库决定
7. update : 执行一条更新语句. insert / upadate / delete
*/
class dbconfig {
private static $dbms = "mysql";
private static $host = '127.0.0.1';
private static $port = '3306';
private static $username = '';
private static $password = '';
private static $dbname = '';
private static $charset = 'utf-8';
private static $dsn;/**
*
* @return 返回pdo dsn配置
*/
public static function getdsn() {
if (!isset(self::$dsn)) {
self::$dsn = self::$dbms . ':host=' . self::$host . ';port=' .
self::$port . ';dbname=' . self::$dbname;
if (strlen(self::$charset) > 0) {
self::$dsn = self::$dsn . ';charset=' . self::$charset;
}
}
return self::$dsn;
}/**
* 设置mysql数据库服务器主机
* @param $host 主机的ip地址
*/
public static function sethost($host) {
if (isset($host) && strlen($host) > 0)
self::$host = trim($host);
}/**
* 设置mysql数据库服务器的端口
* @param $port 端口
*/
public static function setport($port) {
if (isset($port) && strlen($port) > 0)
self::$port = trim($port);
}/**
* 设置mysql数据库服务器的登陆用户名
* @param $username
*/
public static function setusername($username) {
if (isset($username) && strlen($username) > 0)
self::$username = $username;
}/**
* 设置mysql数据库服务器的登陆密码
* @param $password
*/
public static function setpassword($password) {
if (isset($password) && strlen($password) > 0)
self::$password = $password;
}/**
* 设置mysql数据库服务器的数据库实例名
* @param $dbname 数据库实例名
*/
public static function setdbname($dbname) {
if (isset($dbname) && strlen($dbname) > 0)
self::$dbname = $dbname;
}/**
* 设置数据库编码
* @param $charset
*/
public static function setcharset($charset) {
if (isset($charset) && strlen($charset) > 0)
self::$charset = $charset;
}}
/**
* 一个数据库操作工具类
*
* @author zhjiun@gmail.com
*/
class dbtemplate {/**
* 返回多行记录
* @param $sql
* @param $parameters
* @return 记录数据
*/
public function queryrows($sql, $parameters = null) {
return $this->exequery($sql, $parameters);
}/**
* 返回为单条记录
* @param $sql
* @param $parameters
* @return
*/
public function queryrow($sql, $parameters = null) {
$rs = $this->exequery($sql, $parameters);
if (count($rs) > 0) {
return $rs[0];
} else {
return null;
}
}/**
* 查询单字段,返回整数
* @param $sql
* @param $parameters
* @return
*/
public function queryforint($sql, $parameters = null) {
$rs = $this->exequery($sql, $parameters);
if (count($rs) > 0) {
return intval($rs[0][0]);
} else {
return null;
}
}/**
* 查询单字段,返回浮点数(float)
* @param $sql
* @param $parameters
* @return
*/
public function queryforfloat($sql, $parameters = null) {
$rs = $this->exequery($sql, $parameters);
if (count($rs) > 0) {
return floatval($rs[0][0]);
} else {
return null;
}
}/**
* 查询单字段,返回浮点数(double)
* @param $sql
* @param $parameters
* @return
*/
public function queryfordouble($sql, $parameters = null) {
$rs = $this->exequery($sql, $parameters);
if (count($rs) > 0) {
return doubleval($rs[0][0]);
} else {
return null;
}
}/**
* 查询单字段,返回对象,实际类型有数据库决定
* @param $sql
* @param $parameters
* @return
*/
public function queryforobject($sql, $parameters = null) {
$rs = $this->exequery($sql, $parameters);
if (count($rs) > 0) {
return $rs[0][0];
} else {
return null;
}
}/**
* 执行一条更新语句.insert / upadate / delete
* @param $sql
* @param $parameters
* @return 影响行数
*/
public function update($sql, $parameters = null) {
return $this->exeupdate($sql, $parameters);
}private function getconnection() {
$conn = new pdo(dbconfig::getdsn(), dbconfig::getusername(), dbconfig::getpassword());
$conn->setattribute(pdo::attr_case, pdo::case_upper);
return $conn;
}private function exequery($sql, $parameters = null) {
$conn = $this->getconnection();
$stmt = $conn->prepare($sql);
$stmt->execute($parameters);
$rs = $stmt->fetchall();
$stmt = null;
$conn = null;
return $rs;
}private function exeupdate($sql, $parameters = null) {
$conn = $this->getconnection();
$stmt = $conn->prepare($sql);
$stmt->execute($parameters);
$affectedrows = $stmt->rowcount();
$stmt = null;
$conn = null;
return $affectedrows;
}
}
/*
pdo始于php教程5,php6中将默认使用pdo。不同于以前版本中混乱的数据库操作方式,pdo统一了对数据库的访问方式,给编程带来了极大的便利性。本工具类就是基于pdo,模拟了java世界spring框架中的jdbctemplate操作类
*/
我们一般是获取表单提交的数据,如果下面我们利用checkbox[]来操作,下面看实例。
-->
<form id="form1" name="form1" method="post" action="">
1
<input type="checkbox" name="checkbox[]" id="checkbox" value="1" />
2
<input type="checkbox" name="checkbox[]" id="checkbox2" value="2" />
3
<input type="checkbox" name="checkbox[]" id="checkbox3" value="3" />
<input type="submit" name="button" id="button" value="提交" />
</form>
<?
if( $_post )
{
print_r( $_post );
//输也是以数据形式保存的,
/*
array
(
[checkbox] => array
(
[0] => 1
[1] => 2
[2] => 3
)
[button] => 提交
)
这样就好操作了,我们只要如下
*/
$array = $_post['checkbox'];
print_r( $array );
/*
得到内容如下
array
(
[0] => 1
[1] => 2
[2] => 3
)
其实1,2,3就是我们想要的内容,我们就可以利用sql的in来批量实现删除了。
*/
$ids = implode(',',$array );
$sql ="delete from 表名 where id in($ids ) ";
mysql教程_query($sql);
//这样就实现的数据的批量删除哦。
//本站原创转载注明来源http://www.111cn.net 否则必究!
}
相关文章
- 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21连接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总结android studio注意事项及打不开等问题解决方法
经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20- 在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<?php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
MySQL ERROR 2013 (HY000)错误解决方法
当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,...2015-03-15- centos6.2,停止mysqld然后修改/etc/my.cnf datadir的位置,启动mysqld提示FAILED,查看日志 复制代码 代码如下: 120609 11:31:31 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 120609 11:35:12 my...2015-03-15
IE6-IE9中tbody的innerHTML不能赋值的解决方法
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3...2014-06-07- 小米手机如果想要刷机就必须要先解锁验证才可以,那么,如果遇到小米解锁验证失败以及小米解锁工具登录失败的现象怎么办呢?对此,本文就为大家进行解答,有需要的朋友来看看。...2016-12-21
Photoshop提示“此产品的许可证已过期"及“无法开始您的Adobe Photoshop CS5.1 订阅”解决方法
首先不要鄙视我用Photoshop盗版,实在是贵。现在我们来看看如果你的Photoshop提示“此产品的许可证已过期",还有“无法开始您的Adobe Photoshop CS5.1 订阅”如何解决吧...2016-09-14解决HttpPost+json请求---服务器中文乱码及其他问题
这篇文章主要介绍了解决HttpPost+json请求---服务器中文乱码及其他问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-22- 今天小编在这里就来给各位photoshop的这一款软件的使用者们来详细的说一下软件的字体出现了乱码这一问题的解决方法,那么各位有出现这个问题的,下面就来跟着小编一起看...2016-09-14
- 用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些 代码如下 复制代码 ...2016-11-25
- 有部分小伙伴表示自己遇到了51模拟器程序不能打开的情况,那么51模拟器打不开怎么回事?下面我就来为大家分享一下解决的方法,有需要的小伙伴就来看一看吧。  &...2017-07-06
CentOS下php使用127.0.0.1不能连接mysql的解决方法
php代码很简单:复制代码 代码如下: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,"mysql","mysql"); if (!$link) { die('Could not connect: ' . mysql_error().mysql_errno()); } lin...2015-03-15