MySQL连接大的来说有两种方法,一种是mysqli,另一种是mysql。php为连接MySQL提供了函数库,有mysql和mysqli,mysqli是mysql函数库的扩展,是php5才支持的。当你使用mysqli函数库连接MySQL的时候要确保php的配置文件php.ini中的extension=php_mysqli.dll是打开的(该语句前面没有分号(;)。有分号表示改行是注释掉的)。

下面来介绍这两种连接方法:

一、mysqli连接,可使用面向过程的方法也可以使用面向对象的方法。

1. 面向对象的连接方法。

下面先以一个例子来说明,前提是一个搜索的表单,包含以个可选的搜索的类型searchtype和搜索内容searchterm。

 <?php
$searchtype = trim($_POST['searchtype']);
$searchterm = trim($_POST['searchterm']);
if(!$searchtype || !$searchterm){
echo 'You have not entered search details. Please go back and try again.';
exit;
}
if(!get_magic_quotes_gpc()){
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
}
@ $db = new mysqli('localhost', 'root', '','books');
if(mysqli_connect_errno()){
echo 'Error:mysql connect false.';
exit;
}
$query = "SELECT * from book where ".$searchtype." like '%" .$searchterm."%'";
$result = $db->query($query);
$num_results = $result->num_rows;
echo 'Number of books found:'.$num_results;
for($i = 0; $i < $num_results; $i++){
$row = $result->fetch_assoc();
var_dump($row);
echo '<p><strong>'.($i+1).'.Title: ';
echo htmlspecialchars(stripslashes($row['title']));
echo '</strong></br>Author: ';
echo htmlspecialchars(stripslashes($row['author']));
echo '<br />ISBN: ';
echo htmlspecialchars(stripslashes($row['isbn']));
echo '<br />Price:';
echo htmlspecialchars(stripslashes($row['price']));
echo '</p>';
}
$result->free();
$db->close();
?>

输出结果:

Number of books found:2

1.Title: Java 2 for Professionan Develops
Author: Michael Morgan
ISBN: 0-672-31697-8
Price:34.99

2.Title: PHP and MySQL Web Development
Author: Luke Welling Laura T
ISBN: 978-7-111-26281-7
Price:95

连接数据库的过程:

  • @ $db = new mysqli('localhost', 'root', '','books');连接数据库;@为错误抑制操作符,通常连接数据库时都会使用;myslqi后面有四个参数,以此为,连接的主机,连接数据库的账户,密码和数据库。过程方法为@ $db = mysqli_connect('localhost', 'root', '','books');
  • 上句第四个参数也可以不要,如果不要第四个参数,在查询数据库前需要先选择数据库,面向对象方法,$db->select_db('books');,过程的方法mysqli_select_db(db_resourse, db_name);.
  • mysqli_connect_errno()数据库连接结果检查,如果连接成功返回0,否则返回错误号。面向对象和面向过程的方法都是这个判断方法,代码相同。
  • $query = "SELECT * from book where ".$searchtype." like '%" .$searchterm."%'";建立查询条件,该句中的book为要查询的表。
  • $result = $db->query($query);执行查询条件,面向过程的函数是mysqli_query($db,$query); $db为连接数据库返回的资源。查询后,面向对象的将返回一个结果对象,过程版本返回一个结果资源。函数执行失败返回false.
  • $num_results = $result->num_rows;当查询条件使用SELECT时,使用面向对象方法时,查询影响的行数保存在返回结果的num_rows的成员变量中。使用面向过程的方法时是使用函数mysqli_num_rows($result);。当查询条件是INSERT,UPDATE等非SELECT时要使用$result->affected_rows或mysqli_affected_rows($result).
  • $row = $result->fetch_assoc();  该函数从和resultde 结果集中取得一行数据并作为数组返回,每个结果的列存储在一个数组的单元中,偏移量从0开始。依次调用将返回结果集中的下一行,如果没有更多行则返回FLASE.关联数组的每个关键词为一个属性名(数组的字段名,例如例子中$row['title']等),每一个值为数组中相应的值。每调用一次,返回结果集的一行,直到结束。过程的方法mysqli_fetch_assoc($result).还有另外3个函数也可以实现该功能,$row=$result->fetch_row(),$row=mysqli_fetch_row($result);该函数与上面函数的区别就是使用数字索引$row[0],$row[1]等。$row=$result->fetch_array(),$row=mysqli_fetch_array($result);该函数与上面函数的区别就是可以使用数字索引也可以使用关联索引。$row=$result->fetch_object(),$row=mysqli_fetch_object($result)是将一行取到一个对象中,而不是一个数组中,然后通过$row->title,$row->author等访问每个属性。
  • $result->free();mysqli_free_result($result);释放结果集,释放内存,如果结果集很大,建议使用;$db->close();mysqli_close($db);关闭非持久的数据库连接,不会关闭mysqli_pconnect()建立的持久连接。严格说,这个并不是必须的,因为脚本执行完毕的时候他们会自动关闭。

另外需要注意的一些函数:

  • trim()去除字符串两端的空格。在输入文本框中常用
  • get_magic_quotes_gpc()、addslashes()、stripslashes()。对于字符串来说,当存入到数据库时,有些字符会被解析成控制符,有单双引号,反斜杠(\),NULL字符。因此需要将这些字符转义处理(在这些字符前添加反斜杠),使用addslashes()来转义。通过浏览器显示到页面的时候要要通过stripslashes()来去掉添加的反斜杠。但是PHP配置中magic_quotes_gpc(gpc get post cookie)配置指令可以自动添加反斜杠(不能去除),如果配置指令magic_quotes_gpc打开自动添加转义字符,而又通过addslashes()人工添加转义字符将重复。因此需要在添加转义字符前使用get_magic_quotes_gpc()函数来判断该配置指令是否开启,如果没有开启在人工添加转义字符。如果开启get_magic_quotes_gpc()将返回true.添加魔术引号移植性更好。
  • htmlspecialchars()对html中的特殊字符进行编码,例如&<>"等,使用该函数,可以清除可能发生的错误。

2.面向过程的连接方法

@ $db=mysqli_connect('localhost', 'root', '', 'books') or die('Unable to connect');  //如果前面没写第四个参数,后面那要选择数据库。mysqli_select_db($db, 'books');
//判断语句也可以使用if(mysqli_connect_errno()){echo 'Unable to connect'; exit;}
$query = SELECT * from book;
$result = mysqli_query($db, $query);
$result_num =mysqli_num_rows($result);
while($row=mysqli_fecth_assoc($result)){
echo $row['title'];
}
  • 在面向过程的方法中,判断语句可以使用die()函数和mysqli_connect_errno(),但是在面向对象的方法中,只能使用mysqli_connect_errno()。
  • mysqli的大多函数都有面向对象和面向过程的接口。通常二者的差异在于过程版本函数名以mysqli_开始的,通常传入mysqli_connect()获得的资源句柄。
  • mysqli_fectch_assoc()以关联数组返回结果集,没有更多行,则返回FLASE.

二、mysql连接

mysql连接只有面向过程的连接。

 //生成一个连接
2 @ $db_connect=mysql_connect($dbhost,$username,$userpass) or die("Unable to connect to the MySQL!"); //选择一个需要操作的数据库
mysql_select_db($dbdatabase,$db_connect); //执行MySQL语句
$result=mysql_query("SELECT id,name FROM user"); //提取数据
$row=mysql_fetch_row($result);
  • mysql_connect()只有三个参数,主机名,数据库用户名,密码,不能包括数据库名。mysqli连接时可以直接包含数据库。因此下面要用mysql_connect_db()来选择数据库。
  • 提取数据后,除了mysql_fetch_row()还有mysql_fetch_array()和mysql_fetch_assoc()没有面向对象的方式。

PHP中MySQL数据库连接,数据读写,修改方法的更多相关文章

  1. JMeter 中对于Json数据的处理方法

    JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...

  2. C#中遍历各类数据集合的方法总结

    C#中遍历各类数据集合的方法总结: 1.枚举类型 //遍历枚举类型Sample的各个枚举名称 foreach (string sp in Enum.GetNames(typeof(Sample))) ...

  3. 【.NET】C#中遍历各类数据集合的方法

    [.NET]C#中遍历各类数据集合的方法   C#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型             //遍历枚举类型Sample的各个枚举名称             ...

  4. 报表开发工具中mysql数据库连接编码转化失效解决方案

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

  5. Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类

    该工具类是在JavaWeb中连接mysql所用到的通用工具类 该类用于Java+Servlet的编程中,方便数据库的操作,连接,获取其列表值.下面是这个数据库操作类的通用方法,基本上能够用于类里面只含 ...

  6. mysql导入数据大小设置方法

    MySQL导入数据库文件最大限制2048KB和phpmyadmin导入数据最大限制2048KB的解决方法 解决办法: 1.打开php.ini.找到 upload_max_filesize . memo ...

  7. 使用spark与MySQL进行数据交互的方法

    在项目中,遇到一个场景是,需要从Hive数据仓库中拉取数据,进行过滤.裁剪或者聚合之后生成中间结果导入MySQL. 对于这样一个极其普通的离线计算场景,有多种技术选型可以实现.例如,sqoop,MR, ...

  8. JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

  9. 【jmeter】JMeter中返回Json数据的处理方法

    Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...

随机推荐

  1. Linux基础学习(一)

    前言:这个学习笔记是为了督促自己能够更好的学习Linux的有关知识. 参考书目 鸟哥的linux私房菜 Chapter 1:入门建议 新手建议:重点 基础一定一定要学好 那么什么是基础呢? 先从Lin ...

  2. Java Web之文件的上传及下载

    一.文件的上传 1. 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. 2.表单的设置 1.向服务器上传一个文件时,表单要使用post ...

  3. module.exports 和 export default

    CommonJS模块规范和ES6模块规范完全是两种不同的概念 CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一 ...

  4. 牛客 PUBG

    题目链接:点击打开链接 题目大意:跑毒,跑到安全区,每个地方有敌人,输出路线经过的最少敌人的数量:-1是起点. -2是安全区 输入 5 6 6 0 -2 3 4 2 1 2 1 2 2 8 9 7 8 ...

  5. Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml:14:7-34 is also present at [:react-native-qq] AndroidManifest.xml:14:18-44 value=(true).

    解决方法: 修改文件: 在manifest标签中添加 xmlns:tools="http://schemas.android.com/tools" 在application标签中添 ...

  6. 原生JS实现日历

    这周写自己的项目发现又用到日历了,加之自己毕业之后的第一个工作中遇到的任务也是需要写个日历(组员写了,我就不用写了) 今天就来好好折腾一下日历是怎么写的. 首先,我们看看 windows 的日历.发现 ...

  7. 利用git reflog找回错误的重置

    在开发中经常需要reset分支,如果在reset前没有记住分支指向的提交ID,想要重置回原来的提交恐怕大多数开发者是重新拉取远程版本库,再rebase分支.但如果连不上远程版本库或没有远程版本怎么办呢 ...

  8. 牛客假日团队赛1 G.Superbull

    链接: https://ac.nowcoder.com/acm/contest/918/G 题意: Bessie and her friends are playing hoofball in the ...

  9. mysql隔离级别与锁,接口并发响应速度的关系(2)

    innoDB默认隔离级别 mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-------------- ...

  10. Unity [Tooltip("")]

    把Ad2Controller脚本挂在Ad2Ad3Manager游戏对象上,在非运行状态下把鼠标放在inspector的AdButtonObj2上就会显示广告2按钮. 如下图: