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. Spark TaskScheduler 概述

    TaskScheduler 原理: 1. DAGScheduler 在提交Taskset给底层调度器的时候是面向接口TaskScheduler的, 这符合面向对象中依赖抽象原则,带来底层资源调度器的可 ...

  2. 关于SqlDataReader使用的一点疑惑

    C#中的SqlDataReader类(System.Data.SqlClient)是用来在保持打开数据库连接的状态下取数据用的 用法如下图: “保持与数据库的连接”这个特性也是SqlDataReade ...

  3. 解读人:李思奇,Development of a sensitive, scalable method for spatial, cell-type-resolved proteomics of the human brain. (一种用于研究人类大脑基于空间或细胞类型的蛋白质组学的灵敏方法)

    发表时间:(2019年4月) 一. 概述: 本文报道了一种可研究人类大脑组织中特定神经细胞的蛋白质组学的方法.作者通过激光捕获显微切割技术(LCM)从逝者大脑中分离出目的神经元细胞,接着尝试了一系列不 ...

  4. VMware Workstation 安装以及Linux虚拟机安装 指北

    最近有挺多小伙伴跟我说起虚拟机这个东西,所以,今天就给大家写一篇虚拟机安装使用指北吧. 虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台 ...

  5. Mysql常见问题集锦

    缺少libstdc++.so.6库的原因及解决办法 https://blog.csdn.net/u010417185/article/details/69951312 https://www.cnbl ...

  6. P2161 [SHOI2009]会场预约 (线段树:线段树上的不重复覆盖数)

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  7. Codeforces Round #364 (Div. 2) B

    Description Vasya has the square chessboard of size n × n and m rooks. Initially the chessboard is e ...

  8. springBoot集成web service

    转载大神: https://blog.csdn.net/u011410529/article/details/68063541?winzoom=1 https://blog.csdn.net/nr00 ...

  9. 读取properties和xml中配置文件的值

    五种方式让你在java中读取properties文件内容不再是难题 在java中读取properties和xml文件中的方法:https://www.cnblogs.com/ConfidentLiu/ ...

  10. JS——面向对象、继承

    创建对象的方式: 1)单体 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...