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 ...
随机推荐
- Machine Learning-KNN
思路:如果一个样本在特征空间中的k个最相近的样本中大多数属于某个类别,则该样本也属于该类别: 这段话中涉及到KNN的三要素:K.距离度量.决策规则 K:KNN的算法的结果很大程度取决于K值的选择: I ...
- Spring基本原理模拟(IoC部分)
package ioc; import java.io.File; import java.lang.reflect.Method; import java.util.Collections; imp ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)
5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...
- [Xcode 实际操作]四、常用控件-(7)UIStepper控件的使用
目录:[Swift]Xcode实际操作 本文将演示步进控件的基本用法.步进控件常用于小范围数值的调整. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import ...
- 死磕 java同步系列之synchronized解析
问题 (1)synchronized的特性? (2)synchronized的实现原理? (3)synchronized是否可重入? (4)synchronized是否是公平锁? (5)synchro ...
- EventLoop-浏览器与Node.js--整理
近来面试中会遇到的问题,关于浏览器和Nodejs两个运行环境的Event loop. 整理值得阅读的优秀文章 参考文章: 1.不要混淆nodejs和浏览器的eventloop 2.nodejs官网关于 ...
- ROS上利用usb_cam读取摄像头图像
电脑需要有USB3.0的接口 我使用的环境为:Ubuntu16.04LTS ROS版本是kinetic 一.usb_cam驱动的安装 1.创建ROS工作空间 mkdir -p myros/src cd ...
- JMeter - 后处理器/脚本语言 - 比较
当我们使用JMeter / Response数据处理进行密集负载测试时,我们可能会非常小心我们选择的后处理器/脚本语言的类型.在这篇文章中,我想说明这些后处理器/脚本语言如何影响测试的整体性能. 我们 ...
- Python爬取天气预报
实现爬取一天的天气预报 非常简单的一个小爬虫,利用的也是基本的request.BeautifulSoup.re库,算是简单的上手一个小测试吧 from urllib.request import ur ...
- 1、kvm的vnc服务关闭、设置网络模式
一.kvm的vnc服务关闭 1.关闭虚拟机 virsh shutdown privi-server 2.virsh edit privi-server找到下面内容进行删除 <graphics t ...