php mysqli入门应用实现

 更新时间:2016年11月25日 16:37  点击:1951
php的mysqli扩展被封装到一个类中,是一种面向对象的技术,执行速度更快,与传统的过程化方法相比更方便也更高效

默认情况下mysqli在php是未开启的我们需在
要在PHP中使用mysqli扩展,需要在配置文件php.ini中添加如下的设置:

 代码如下 复制代码
extension=php_mysqli.dll

如果配置文件中已有上述设置,确保extension前面没有“;”,否则将其去掉。下面开始介绍如何使用mysqli扩展来存取数据库,即可了.

 代码如下 复制代码
<?php
$db_host="localhost";                                           //连接的服务器地址
$db_user="root";                                                  //连接数据库的用户名
$db_psw="root";                                                  //连接数据库的密码
$db_name="sunyang";                                           //连接的数据库名称
$mysqli=new mysqli();
$mysqli->connect($db_host,$db_user,$db_psw,$db_name);
?>

关闭与MySQL服务器的连接通过mysqli对象调用close()方法即可,例如:
$mysqli->close();

 代码如下 复制代码

<?php
$connection = mysqli_connect("localhost","root","root","sunyang");
if ( $connection ) {
         echo "数据库连接成功";
}else {
         echo "数据库连接失败";
}
?>

数据查询

 代码如下 复制代码

<?php
$mysqli=new mysqli("localhost","root","root","sunyang");     //实例化mysqli
$query="select * from employee";
$result=$mysqli->query($query);
if ($result) {
         if($result->num_rows>0){                                               //判断结果集中行的数目是否大于0
                  while($row =$result->fetch_array() ){                        //循环输出结果集中的记录
                           echo ($row[0])."<br>";
                           echo ($row[1])."<br>";
                           echo ($row[2])."<br>";
                           echo ($row[3])."<br>";
                           echo "<hr>";
                  }
         }
}else {
         echo "查询失败";
}
$result->free();
$mysqli->close();
?>

其它的像数据保存等待


mysqli类中的成员方法

__construct():构造方法,用于创建一个mysqli对象,也可以建立一个连接。

autocommit():开启或关闭数据库修改自动提交。

change_user():改变数据库连接所指定的用户。

character_set_name():返回数据库连接默认字符集。

close():关闭先前打开的连接。

commit():提交当前的事物。

connect():打开一个新的连接到mysql数据库服务器。

debug():执行调试操作。

dump_debug_info():转储调试信息。

get_client_info():返回客户端版本。

get_host_info():返回一个字符串代表的连接使用类型,如:Localhost via UNIX socket

get_server_info():返回mysql服务器版本。

get_server_version():返回整数形式的mysql服务器版本。

init():初始化一个mysqli并返回一个资源。

info():检索有关最近执行的查询。

kill():杀死一个mysql线程。

multi_query():执行多个查询语句。

more_results():从多查询语句中检索是否有任何更多的查询结果。

next_result():从当前执行的多查询中读取下一个结果。

options():设置选项。

ping():如果没有连接,ping一台服务器连接或重新连接。

prepare():准备一个sql语句的执行,返回mysqli_stmt对象。

query():与数据库交互都是通过查询进行的,该方法向数据库发送查询来执行,执行失败返回FALSE。

real_connect():试图打开一个连接到mysql数据库服务器。

escape_string():转义特殊字符的字符串。

rollback():回滚当前的事务。

select_db():为数据库查询选择一个默认的数据库。

set_charset():设置默认客户端字符集。


ssl_set():使用ssl用于建立安全连接。

stat():获取当前的系统状态。

stmt_init():初始化一个声明,返回一个mysql_stmt对象。

store_result():从最后查询中转让结果集。

thread_safe():是否考虑返回安全的线程。

 


mysql类中的成员属性

$affected_rows:前一个mysql操作中影响的行数。

$client_info:mysql客户端版本(字符串)。

$client_version:mysql客户端版本(整数)。

$errno:最近函数调用的错误代码。

$error:最近函数调用的错误信息字符串。

$field_count():查询获取的列数。

$host_info:连接类型使用(字符串)。

$info:最近执行的查询。

$insert_id:最后查询自动生成的编号。

$protocol_version:mysql协议使用的版本。

$sqlstate:包含SQLSTATE错误码的最后一个错误。

$thread_id:当前连接线程ID。

$warning_count:前一个sql语句执行过程中产生的警告数量。


一、问题:

      数据库是MS SQLServer2000,要把SQLServer2000里的一张表的数据导入MySQL5,其中SQLServer2000表的字段以简体中文命名(强烈建议不要以中文做为字段名)。其实操作就是对SQLServer查询记录,插入到MySQL里。选择的脚本语言是PHP,PHP打开MSSQL和MySQL扩展,对这两个数据库操作都是很容易的问题。

    问题就出现在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错。

    上网查了资料,网上相关的信息不太多,很多网友都认为是PHP的MSSQL扩展不支持SQL语句中有中文。查了一下资料,PHP的MSSQL是支持SQL中有中文的语句。出现报错问题大多是因为编码的问题,编码数据库和编码与查询语句编码不统一,查询语句到SQLServer里中文部分就成了乱码,造成查询失败。

 二、解决方法:

      知道了原因,接下来分析解决,确认是编码不统一的问题。解决分以下几步:

           1、确认SQLServer 数据库的编码,我的数据编码是GBK。

           2、确认当前PHP脚本文件的编码,我的编码是UTF-8。

           3、转换SQL查询语句的的编码。

           补充:有的网友提到要把PHP的脚本文件编码转成和数据库编码一致,其实这一步大可不必,只要确认你的SQL语句和数据库的编码一致就可以,这里建议不必转换的原因是如果你的PHP脚本文件里包含其它PHP脚本,那也得对所有include或require的脚本文件编码转换,不然PHP脚本编码不统一很容易出错,若互相关联的文件很多,这也是一件很麻烦的问题而且把事情复杂化了。

 

三、方案:

写一个转换函数,在把SQL操作前把SQL语句编码转换。下面贴出我的范例代码:

//编码转换函数

 代码如下 复制代码

function utf8togb($s) {

return iconv('utf-8', 'gbk//IGNORE', $s);  // IGNORE 参数是遇到不成转换的字符时忽略

}

//建议把所有中文字段用英文别名替换,方便下面操作还有编码转换等问题

$sql="SELECT [id], [栏目] as typeid, [正题] as title, [作者] as author, convert(text, [正文]) as body FROM [文章表];";

$sql = utf8togb($sql);

php mysql_insert_id()返回数据库最新id实现方法 有需要同学可参考一下。
 代码如下 复制代码

mysql_insert_id()
mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID。如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。

语法:mysql_insert_id(connection)

参数connection,可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

mysql_insert_id() 返回给定的 connection 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 connection ,则使用上一个打开的连接。

如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。

 代码如下 复制代码

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
 die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db("test_db",$con);

$sql = "INSERT INTO person VALUES ('Carter','Thomas','Beijing')";
$result = mysql_query($sql,$con);
echo "ID of last inserted record is: " . mysql_insert_id();

mysql_close($con);
?>

mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id() 返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。

LAST_INSERT_ID()
MySQL也提供了这么一个同样功能的API,它总是保存着最新产生的AUTO_INCREMENT值,并且不会在查询语句之间被重置,也就是说,在执行INSERT操作后,执行SELECT、UPDATE、DELETE语句都不会影响该API的返回值。

可以用 SELECT LAST_INSERT_ID(); 来查询LAST_INSERT_ID() 的返回值。

使用单条INSERT语句插入多条记录,,LAST_INSERT_ID() 只返回插入的第一条记录产生的AUTO_INCREMENT值。

出现中文乱码一般情况是文档编码与数据库编码不一致导致的,下面我们来分析MYSQL中文乱码的原因吧。

其MYSQL的默认字符集竟然是瑞典文(latin1_swedish_ci),害的我手动一个表一个表地修改字符集为Unicode多语言(utf8_unicode_ci)。

只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

 代码如下 复制代码

$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_query("SET NAMES 'GBK'");

本文章提供了一个mysql2xml转换类,可以快速的把xml转换成mysql同时反之也可以把mysql转换成xml哦,下面看代码。

mysql2xml.php类文件:用于备份MySQL数据的!!

 代码如下 复制代码

<?php
class MySQL2XML {
        protected $conn;
        protected $result;
        protected $tables;
        protected $saveFolder = 'datas/';
       
        public function __construct($config = NULL) {
                if($config !== NULL && is_array($config)) {
                        $this->connect($config);
                }
        }
       
        public function connect($config) {
                $this->conn = mysql_connect($config['host'], $config['username'], $config['password']);
                if($this->conn) {
                        mysql_select_db($config['database']);
                        return true;
                }
                return false;
        }
       
        public function setSaveFolder($folder) {
                if(is_dir($folder)) {
                        $this->saveFolder = rtrim(str_replace("\", "/", $folder),'/');
                        return true;
                }
                return false;
        }
       
        public function setTables($tables) {
                if(is_array($tables)) {
                        $this->tables = $tables;
                        return true;
                }
                return false;
        }
       
        public function query($query) {
                if(!isset($query) || trim($query) == '') return false;
                $this->result = mysql_query($query);
                if($this->result) return true;
                return false;
        }
       
        public function toXML() {
                if(!isset($this->tables)) return false;
                foreach($this->tables as $table) {
                        $file = $this->saveFolder.$table.'.xml';
                        $fp = @fopen($file, 'w');
                        if(!$fp) exit('Can not write file');
                        fwrite($fp, $this->tableToXML($table));
                        fclose($fp);
                        unset($fp);
                }
                return true;
        }
       
        public function tableToXML($table) {
                header("content-type:text/xml;charset=utf-8");
                $xml = "<?xml version="1.0" encoding="utf-8" ?>n<datas>n";
                $fields = $this->getFields($table);
                $datas = $this->getDatas($table);
                $cdata = array();
                foreach($datas as $data) {
                        foreach($data as $key => $value)
                                $cdata[$key][] = $value;
                }
                foreach($fields as $element) {
                        $xml .= "t<fields name="{$element['Field']}" type="{$element['Type']}" null="{$element['Null']}" key="{$element['Key']}" default="{$element['Default']}" extra="{$element['Extra']}">n";
                        foreach($cdata[$element['Field']] as $value) {
                                $xml .= "tt<data>{$value}</data>n";
                        }
                        $xml .= "t</fields>n";
                }
                $xml .= '</datas>';
                return $xml;
        }
       
        protected function getFields($table) {
                $query = "SHOW FIELDS FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function getDatas($table) {
                $query = "SELECT * FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function fetch() {
                if(is_resource($this->result)) {
                        return mysql_fetch_assoc($this->result);
                }
                return false;
        }
       
        protected function fetchAll() {
                if(is_resource($this->result)) {
                        $return = array();
                        $row = NULL;
                        while($row = mysql_fetch_assoc($this->result)) {
                                $return[] = $row;
                        }
                        return $return;
                }
                return false;
        }
}
?>


调用方法:

 

 代码如下 复制代码
<?php
$xml = new MySQL2XML(array('host'=>'localhost', 'username'=>'root', 'password'=>'', 'database'=>'mysql'));
$xml->setTables(array('wp_term_relationships','wp_terms'));//设置备份的表
$xml->setSaveFolder('datas/');//保存备份文件的文件夹
$xml->toXML();//备份开始
?>
[!--infotagslink--]

相关文章

  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • photoshop画斜线/直线/虚线的入门级教程

    这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • 原生js实现fadein 和 fadeout淡入淡出效果

    js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
  • 20分钟MySQL基础入门

    这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Android中用HttpClient实现Http请求通信

    本文我们需要解决的问题是如何实现Http请求来实现通信,解决Android 2.3 版本以后无法使用Http请求问题,下面请看正文。 Android开发中使用HttpClient来开发Http程序...2016-09-20
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • css实现文字发光效果方法汇总

    文字发光效果我们可以直接使用css来实现了今天我们来看一篇关于文字发光效果的例子,希望这篇文章能够帮助到各位朋友哦。 前言 我录制的慕课网视频一直没有上线,慕...2016-09-14
  • PHP+Mysql+Ajax+JS实现省市区三级联动

    基本思想就是:在JS动态创建select控件的option,通过Ajax获取在PHP从SQL数据库获取的省市区信息,代码有点长,但很多都是类似的,例如JS中省、市、区获取方法类似,PHP中通过参数不同执行不同的select语句。index.html代码:复制...2014-05-31
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25