mysqil操作数据库
mysqil操作数据库
每次用到mysql_connect连接数据库的时候都会提示:
1 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in E:\wamp\www\myquote\includes\mysql_connect.php on line 5
作为一个高要求高完美的男人,实在受不了这提示。躲着他也不行——解决他心里的小石头才能碎掉
那么就先学习下使用Mysqli操作数据库:
1. 与Mysql数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与Mysql几乎所有的特性一样,这一点可以使用面向对象的方法来完成,也可以采用过程的方式完成。
1.1 创建一个Mysqli的对象
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 ?>
1.2 连接Mysql的主机、用户、密码、数据库
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 ?>
1.3 创建连接参数的Mysqli对象
1 <?php
2 $mysqli=new mysqli('localhost','root','admin','test');//实例化mysqli
3 //$mysqli->connect('localhost','root','admin','test');
4 ?>
1.4 更换默认连接的数据库
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 $mysqli->select_db('abc');//更换连接默认的数据库为abc数据库
5 $mysqli->close();//别忘了关闭你的"小资源";
6 ?>
2 处理连接错误
2.1 如果无法连接Mysql数据库,那么这个页面不太可能继续完成预期的工作,因此,一定要注意监视连接错误并相应地做出反应。Mysqli拓展包含有很多特性可以用来抓取错误信息,例如:mysqli_connect_errno() 和 mysqli_connect_error()方法。
1 mysqli_connect_errno()函数返回链接数据库返回的错误号。
2 mysqli_connect_error()函数返回连接数据库返回的错误代码。
使用方法:
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 echo'数据库连接错误,错误信息是.'.mysqli_connect_error();
6 exit();
7 }else{
8 echo '数据库连接成功';
9 }
10 $mysqli->close();//别忘了关闭你的"小资源";
11 ?>
这里用了面向过程的方法来判断数据库是否连接成功。那么为什么不用面向对象的方法判断呢?我的理解是 判断数据库连接成功 之前首先要证明你要实例化的对象是否可用。。所以用了面向过程的方法来判断。(如果有不对的地方大家也可以一起讨论讨论,我自己也是个小学渣)
2.2 mysqli_error——返回数据库操作错误信息。mysqli_errno——返回数据库操作错误代码
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 echo'数据库连接错误,错误信息是.'.mysqli_connect_error();
6 exit();
7 }else{
8 echo '数据库连接成功<br/>';
9 }
10 if (!$mysqli->query("SET a=1")) {//$mysqli->query()执行sql语句
11 echo "错误信息是: ".$mysqli->error.'<br/>';
12 echo "错误代码是: ".$mysqli->errno;
13 }
14 $mysqli->close();//别忘了关闭你的"小资源";
15 ?>
输出:
数据库连接成功
错误信息是: Unknown system variable 'a'
错误代码是: 1193
3 与数据库进行交互。
① 绝大多数查询都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD。
② 获取数据网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 print_r($result->fetch_row());//将结果集的第一行输出
11 $result->free();//释放查询内存(销毁)
12 $mysqli->close();//别忘了关闭你的"小资源";
13 ?>
输出:
Array ( [0] => 1 [1] => 秋田嘉 [2] => 123456 )
3.1 解析查询结果
一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。
3.1.1 将结果集放到对象中由于你可能会使用mysqli的面向对象的语法,所以完全可以采用面向对象的方式管理结果集。
可以使用 fetch_object() 方法来完成。
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 /*
11 $row = $result->fetch_object();//将结果集包装成对象
12 echo $row->user;//输出对象中的一个字段(属性)
13 */
14 while (!!$row = $result->fetch_object()){////遍历所有的用户名称
15 echo $row->user."<br>";
16 var_dump($row);
17 }
18 $result->free();//释放查询内存(销毁)
19 $mysqli->close();//别忘了关闭你的"小资源";
20 ?>
输出:
秋田嘉
object(stdClass)#3 (3) { ["id"]=> string(1) "1" ["user"]=> string(9) "秋田嘉" ["psw"]=> string(6) "123456" }
刘德华
object(stdClass)#4 (3) { ["id"]=> string(1) "2" ["user"]=> string(9) "刘德华" ["psw"]=> string(6) "654321" }
3.1.2 使用索引数组和关联数组 fetch_array();
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10
11 $row = $result->fetch_array();//将结果集包装成数组(索引+关联)
12 echo $row[1].'<br/>';//输出下标是1的字段(属性)
13 var_dump($row);
14 /*
15 while (!!$row = $result->fetch_array()){//遍历全部
16 echo $row[1]."<br/>";
17 }*/
18
19 $result->free();//释放查询内存(销毁)
20 $mysqli->close();//别忘了关闭你的"小资源";
21 ?>
输出:
秋田嘉
array(6) { [0]=> string(1) "1" ["id"]=> string(1) "1" [1]=> string(9) "秋田嘉" ["user"]=> string(9) "秋田嘉" [2]=> string(6) "123456" ["psw"]=> string(6) "123456" }
3.1.3 使用索引数组 fetch_row();
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 $row = $result->fetch_row();//将结果集包装成索引数组
11 echo $row[2];
12 $result->free();//释放查询内存(销毁)
13 $mysqli->close();//别忘了关闭你的"小资源";
14 ?>
输出:
123456
3.1.4 使用关联数组 fetch_assoc();
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 $row = $result->fetch_assoc();//将结果集包装成关联数组
11 echo $row['psw'];
12 $result->free();//释放查询内存(销毁)
13 $mysqli->close();//别忘了关闭你的"小资源";
14 ?>
输出:
123456
4 确定所选择的行和受影响的行
通常希望能够确定SELECT查询返回的行数,或者受INSERT、UPDATE或DELET查询影响的行数。
我们可以使用num_rows和affected_rows两个属性
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 echo $result->num_rows;//当使用查询时,想了解SELECT查询了多少行,可以使用num_rows。
11 echo"<br/>";
12 echo $mysqli->affected_rows;//当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$mysqli下的属性
13 $result->free();//释放查询内存(销毁)
14 $mysqli->close();//别忘了关闭你的"小资源";
15 ?>
输出:
2
2
5 移动指针的操作和获取字段
当你并不想从第一条数据开始获取,或者并不想从第一个字段获取,你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相关的属性
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 $sql='select * from user';//创建一句SQL语句
9 $result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
10 echo $result->field_count;//计算有多少条字段
11 echo"<br/>";//输出 3
12 $field = $result->fetch_field();//获取字段的名称
13 echo $field->name;//输出id
14 echo '<br/>';
15 while (!!$field = $result->fetch_field()) {//遍历字段
16 echo $field->name.'<br />';
17 }
18 $result->free();//释放查询内存(销毁)
19 $mysqli->close();//别忘了关闭你的"小资源";
20 ?>
输出:
3
id
user
psw
5.1
<?php
$mysqli=new mysqli();//实例化mysqli
$mysqli->connect('localhost','root','admin','test');
if(mysqli_connect_error()){
exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
}
$mysqli->set_charset("UTF8");//设置数据库编码
$sql='select * from user';//创建一句SQL语句
$result=$mysqli->query($sql);//执行sql语句把结果集赋给$result
print_r($result->fetch_fields());//一次性取得字段数组
$result->free();//释放查询内存(销毁)
$mysqli->close();//别忘了关闭你的"小资源";
?>
输出:
1 Array
2 (
3 [0] => stdClass Object
4 (
5 [name] => id
6 [orgname] => id
7 [table] => user
8 [orgtable] => user
9 [def] =>
10 [db] => test
11 [catalog] => def
12 [max_length] => 1
13 [length] => 11
14 [charsetnr] => 63
15 [flags] => 49667
16 [type] => 3
17 [decimals] => 0
18 )
19
20 [1] => stdClass Object
21 (
22 [name] => user
23 [orgname] => user
24 [table] => user
25 [orgtable] => user
26 [def] =>
27 [db] => test
28 [catalog] => def
29 [max_length] => 9
30 [length] => 765
31 [charsetnr] => 33
32 [flags] => 4097
33 [type] => 253
34 [decimals] => 0
35 )
36
37 [2] => stdClass Object
38 (
39 [name] => psw
40 [orgname] => psw
41 [table] => user
42 [orgtable] => user
43 [def] =>
44 [db] => test
45 [catalog] => def
46 [max_length] => 6
47 [length] => 765
48 [charsetnr] => 33
49 [flags] => 4097
50 [type] => 253
51 [decimals] => 0
52 )
53
54 )
5.2
1 $result->data_seek(1);//移动数据指针
2 $result->field_seek(1);//移动字段指针
6 执行多条SQL语句
有的时候,我们需要在一张页面上同时执行多条SQL语句,之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。 PHP提供了执行多条SQL语句的方法$mysqli->multi_query();
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 //创建多条SQL语句
9 $sql .= "SELECT * FROM user;";
10 $sql .= "SELECT * FROM photo;";
11 $sql .= "SELECT * FROM article";
12 if ($mysqli->multi_query($sql)) {//开始执行多条SQL语句
13 $result = $mysqli->store_result();
14 print_r($result->fetch_array());//开始获取第一条SQL语句的结果集
15 $mysqli->next_result();//将结果集指针移到下一个
16 $result = $mysqli->store_result();
17 print_r($result->fetch_array());
18 $mysqli->next_result();
19 $result = $mysqli->store_result();
20 print_r($result->fetch_array());
21 } else {
22 echo 'sql语句有误!';
23 }
24 $result->free();//释放查询内存(销毁)
25 $mysqli->close();//别忘了关闭你的"小资源";
26 ?>
7 执行数据库事务
事务(transaction)是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(roll back),该事务所有操作的影响都将取消。首先,您的MySQL是InnoDB或BDB引擎的一种,一般来说,你安装了AppServ的集成包,你选择InnoDB的引擎的数据库即可。如果你建立的表不是InnoDB,可以在phpmyadmin里修改
1 <?php
2 $mysqli=new mysqli();//实例化mysqli
3 $mysqli->connect('localhost','root','admin','test');
4 if(mysqli_connect_error()){
5 exit('数据库连接错误,错误信息是.'.mysqli_connect_error());
6 }
7 $mysqli->set_charset("UTF8");//设置数据库编码
8 //首先你必须关闭自动提交数据
9 $mysqli->autocommit(false);
10 //创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败
11 $sql .= "UPDATE `friend` SET state=state+5 WHERE id=1;";
12 $sql .= "UPDATE `flower` SET tg_flower=flower-5 WHERE id=1;";
13 //执行两条SQL语句
14 if ($mysqli->multi_query($sql)) {
15 //获取第一条SQL一影响的行数
16 $success = $mysqli->affected_rows == 1 ? true : false;
17 //下移,第二条SQL
18 $mysqli->next_result();
19 //获取第二条SQL影响的行数
20 $success2 = $mysqli->affected_rows == 1 ? true : false;
21 //判断是否都正常通过了,两个SQL
22 if ($success && $success2) {
23 $mysqli->commit();
24 echo '完美提交!';
25 } else {
26 $mysqli->rollback();
27 echo '程序出现异常!';}
28 } else {
29 echo "SQL语句有误:".$mysqli->errno.$mysqli->error;
30 }
31 //最后还必须开启自动提交
32 $mysqli->autocommit(true);
33 $result->free();//释放查询内存(销毁)
34 $mysqli->close();//别忘了关闭你的"小资源";
35 ?>
参考:
Mysqli 操作数据库 - 秋田嘉 - 博客园
https://www.cnblogs.com/qiutianjia/p/5582632.html
mysqil操作数据库的更多相关文章
- Java-jdbc操作数据库
如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次.然后在每次访问数据库时创建一个Connection实例,获取数据连接,这样就可以执行操作数据库的SQL语句.最后在 ...
- python高级之操作数据库
python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...
- greenDao:操作数据库的开源框架
greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...
- 总结一些关于操作数据库是sql语句还是存储过程问题
总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...
- greendao操作数据库的使用方法
第一步:把greendao-1.3.0-beta-1,greendao-generator-1.3.1两个jar包加载到工程的lib的文件夹中,一定要右键点击Add As Library后才能使用. ...
- pymysql 操作数据库
一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ...
- Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...
- 一次莽撞的行为:在phpmyadmin中修改MySQL root密码后无法操作数据库
一.手贱行为(✿◡‿◡) 在一次开发中通过xampp方式安装了PHP环境,需要操作数据库时通过phpmyadmin访问MySQL,在一次数据库操作时想起没有设置密码,于是直接在mysql数据库中的us ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
随机推荐
- 前端面试基础-html篇之CSS3新特性
CSS3的新特性(个人总结)如下 过度(transiton) 动画(animation) 形状转换 transform:适用于2D或3D转换的元素 transform-origin:转换元素的位置(围 ...
- 自定义typecho后台路径
如何自定义后台路径 Typecho 安装好后,默认的后台路径是 domain.com/admin/,为了提高安全性,我们允许以 domain.com/xxxx/ 的方式访问,其中 xxxx 是你自定义 ...
- (转)vue router 如何使用params query传参,以及有什么区别
写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...
- 八叉树(Octree)Typescript 实现
Demo GitHub export class Octree { // 父&子树 private parent_node: any; private children_nodes: Octr ...
- 决策实验(2)分水岭&哄骗实验
转载请注明http://www.cnblogs.com/igoslly/p/6824544.html 史密斯实验II PART I 分水岭实验 两种选项 A 50%没钱,50% 45元 B 获取固定数 ...
- jquey中的事件绑定
三种方法: $(selector).live(events, data, handler); // jQuery 1.3+ $(document).delegate(se ...
- 2017/01/07 学习笔记 jar包,maven
① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. wa ...
- vsftp进阶-锁定目录
把用户锁定到特定的目录下面: 一.配置文件: #grep -Ev "^#|^$" /etc/vsftpd/vsftpd.conf anonymous_enable=NOlocal_ ...
- 京东专业“卖”队友,魅族手环将亮相1206魅蓝note新品发布会
京东一直是国内顶级的数码产品自营销售渠道,但是,正因为庞大的数据体系和平台特殊性,经常会帮我们发现一些“好玩的”保密性较高的东西,譬如价格.信息.谍照等.而在最新上线的京东超级品牌日活动页面上,专业“ ...
- 绘画软件优动漫PAINT系统要求
优动漫PAINT对运行环境有什么要求呢?目前,该软件可在Windows系统和Mac系统上使用,详细的操作运行环境如下: 操作系统:win7.win8.win10. 计算机硬件:内存必须在2GB以上,建 ...