PHP中MySQL数据库连接,数据读写,修改方法
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数据库连接,数据读写,修改方法的更多相关文章
- JMeter 中对于Json数据的处理方法
JMeter中对于Json数据的处理方法 http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ J ...
- C#中遍历各类数据集合的方法总结
C#中遍历各类数据集合的方法总结: 1.枚举类型 //遍历枚举类型Sample的各个枚举名称 foreach (string sp in Enum.GetNames(typeof(Sample))) ...
- 【.NET】C#中遍历各类数据集合的方法
[.NET]C#中遍历各类数据集合的方法 C#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型 //遍历枚举类型Sample的各个枚举名称 ...
- 报表开发工具中mysql数据库连接编码转化失效解决方案
1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...
- Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类
该工具类是在JavaWeb中连接mysql所用到的通用工具类 该类用于Java+Servlet的编程中,方便数据库的操作,连接,获取其列表值.下面是这个数据库操作类的通用方法,基本上能够用于类里面只含 ...
- mysql导入数据大小设置方法
MySQL导入数据库文件最大限制2048KB和phpmyadmin导入数据最大限制2048KB的解决方法 解决办法: 1.打开php.ini.找到 upload_max_filesize . memo ...
- 使用spark与MySQL进行数据交互的方法
在项目中,遇到一个场景是,需要从Hive数据仓库中拉取数据,进行过滤.裁剪或者聚合之后生成中间结果导入MySQL. 对于这样一个极其普通的离线计算场景,有多种技术选型可以实现.例如,sqoop,MR, ...
- JMeter中返回Json数据的处理方法
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
- 【jmeter】JMeter中返回Json数据的处理方法
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
随机推荐
- React 从入门到进阶之路(三)
之前的文章我们介绍了 React 创建组件.JSX 语法.绑定数据和绑定对象.接下来我们将介绍 React 绑定属性( 绑定class 绑定style).引入图片 循环数组渲染数据. 上一篇中我们 ...
- select下拉框如何与接口配合动态生成option选项
前几天在做任务时考虑到这个问题,具体任务用例如下: HTML: JS:
- 洛谷P3387 缩点模板
给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 因为可以重复经过点, ...
- Hibernate的优化方案
使用参数绑定 使用绑定参数的原因是让数据库一次解析SQL,对后续的重复请求可以使用生成好的执行计划,这样做节省CPU时间和内存. 避免SQL注入. 尽量少使用NOT 如果where子句中包含not关键 ...
- 原来C#可以直接写二进制数的
二进制数在C#中的写法: byte b=0b01111110 二进制字符串的解释: string bstr="0111110"; byte b=Convert.ToByte(bst ...
- 关于text-overflow实现·多余字符省略·的正确打开方式
1. 字符包裹元素要能控制宽度 2. 包裹元素中包含代码 .wrapper { ... text-overflow: ellipsis; overflow: hidden; white-space: ...
- 关于php命名空间的理解
以phpmailer这个类库为例,composer自动加载好该类库,有用的文件都放在src这个目录下 这些文件的命名空间都是这个:namespace PHPMailer\PHPMailer; 如果我们 ...
- web性能优化--缓存
什么是缓存? 缓存(Web缓存)是指代理服务器和客户端本地磁盘保存的资源副本.当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载. 缓存大致可以分为私 ...
- POJ1022 Packing Unit 4D Cubes
题目来源:http://poj.org/problem?id=1022 题目大意: 有一些4维的单位体积的立方体盒子,每个立方体有8个面.要用一个大的4为盒子将它们包起来,求最小的大盒子体积. 输入: ...
- 01-----jQuery介绍
安装node.js cmd查看 node -v npm -v npm init --yes 初始化 npm install jquery --save 1.为什么要使用jQuery ...