边记边学PHP-(十六)PHP使用MySQL扩展库操作数据库

PHP提供了很多扩展库,这里说的是使用MySQL扩展库,但是这种扩展库在不久的将来就会被摒弃,因为如果使用MySQL扩展库编写的代码在运行的时候会有warning的提示。我本来想直接写另一种,但是感觉这是基础。MySQL扩展库,一说到库,自然而然就想到是一堆函数,很多函数组成一个库,使用扩展库也就是使用里面的函数。MySQL扩展库是完全面向过程的,显然不符合面向对象的特性,被摒弃也是可以理解的。废话不多说,直接上重点。

一、PHP使用MySQL扩展库操作数据库的示意图

此图是我自己画的,可能有不准确的地方。

可以看到使用MySQL操作数据库大致经过五步:

1、连接MySQL服务器

这里使用的函数是mysql_connect()函数

2、选择数据库

这里使用的是mysql_select_db();函数

3、执行SQL语句

这里使用mysql_query()函数。所谓的SQL语句就是增删改查操作。

4、关闭结果集

这里使用mysql_free_result();函数,释放系统资源

5、断开与服务器的连接

这里使用mysql_close();函数

二、细说五步

1、连接MySQL服务器

mysql_connect()函数的语法如下:

resource mysql_connect([string server[,string username[,string password[,bool new_link[,int client_flags]]]]]);

这是最完整的函数参数,但是我们在用的时候就只是用前三个参数就好了。

第一个server指的是MySQL服务器,可以使用默认的localhost。

第二个username就是在安装数据库的时候自己设定的用户名,我们默认的是root。

第三个password就是数据库的密码。

如果连接成功会返回一个MySQL连接标识,失败则返回false。

比如我连接我自己的数据库,我的服务器为localhost,用户名为root,密码为root。我可以这么测试

<?php
	$host = 'localhost';
	$username = 'root';
	$password = 'root';
	if($conn = mysql_connect($host,$username,$password)){
		echo "连接MySQL服务器成功";
	}else{
		echo "连接失败";
	}

2、选择数据库

bool mysql_select_db(string database_name[,resource link_identifier]);

第一个参数database_name是要连接的数据库名。

第二个参数link_identifier是数据库连接标识,也就是上面连接MySQL服务器成功后返回的值。如果不写,默认为上一次打开的数据库连接。建议写。

成功返回true,失败返回false。

比如我需要连接我上次创建的那个test数据库,我可以这么写:

<?php
	$host = 'localhost';
	$username = 'root';
	$password = 'root';
	$database_name = 'test';
	$conn = mysql_connect($host,$username,$password);
	if(mysql_select_db($database_name,$conn)){
		echo "数据库连接成功";
	}else{
		echo "连接失败";
	}

3、执行SQL语句

所谓SQL语句就是对数据库进行的增删改查操作。在使用命令行操作数据库的时候已经介绍了。函数语法如下:

resource mysql_query(string query[,resource link_identifier]);

第一个参数就是需要执行的sql语句。

第二个参数是mysql_connect返回的连接标识。建议写。

sql语句分为ddl【数据定义语句】 ,dml【 数据操作语句,如update,insert,delete】,dql【 select】 ,dtl【数据事务语句 rollback
commit】,这里面最常用的就是dql语句,也就是查询语句。在执行dql语句成功后返回的是一个“数据指针”,在执行dml语句成功后返回的是true,失败都返回false。

比如我想查询现在我的表里有什么数据,我可以这么写。

<span style="font-size:14px;"><?php
	$host = 'localhost';
	$username = 'root';
	$password = 'root';
	$database_name = 'test';
	$conn = mysql_connect($host,$username,$password);
	mysql_select_db($database_name,$conn);
	$sql = "select * from tb_student;";
	$query = mysql_query($sql,$conn);
	while($res = mysql_fetch_assoc($query)){
		echo $res['id'].'--'.$res['name'].'--'.$res['email'].'--'.$res['address'].'--'.$res['age'].'<br>';
	}</span>

增删改不举例了,就是把SQL语句换了。然后返回的true或false。不用再取结果集。

4、关闭结果集

mysql_free_result(resource $res);

比如上面我用完之后就可以关闭结果集了,mysql_free_result($query);

5、断开与数据库连接

mysql_close(resource $link_identifier);

比如上面程序最后我就可以断开连接了,mysql_close($conn);

三、这里给出综合案例

<?php

     //mysql扩展库操作数据库步骤如下
     //1.获取连接

     $conn = mysql_connect("localhost","root","root");

     if(!$conn){
          die("连接失败".mysql_error);
     }
     //2.选择数据库

     mysql_select_db("mr_mysql");
     //3.设置操作编码(建议有)

     mysql_query("set names utf8");
     //4.发送指令sql (ddl【数据定义语句】 ,dml【 数据操作语句,如update,insert,delete】,dql【 select】 ,dtl【数据事务语句 rollback commit】)

     $sql = "select * from mr_user;";

     $res = mysql_query($sql,$conn);//返回的数据‘指针’不是指到了第一行,而是指到第一行的前一行,也就是第0行。
     //var_dump($res);

     //5.接收返回的结果,并处理

     while($row = mysql_fetch_row($res)){   //mysql_fetch_row()是返回结果集的下一行并赋值给$row
          //$row 是一个数组
          //第一种取法:$row[i]
          echo "<br>";
          //echo "$row[0]--$row[1]--$row[2]--$row[3]--$row[4]";
          //var_dump($row);

          //第二种取法
          foreach($row as $key=>$value){
               echo "$value--";
          }

     }
     //6.释放资源
     mysql_free_result($res);
     mysql_close($conn);  //这句可以不写,建议写

四、细节问题

1.使用完$res结果集后,一定要释放资源

2.mysql_close()如果没有的话,系统也会自动关闭

3.如果mysql_close放在了while前面,那么不会影响结果,因为执行完mysql_query语句之后,程序已经把数据库读到内存,再次使用时是从内存读取。但是如果mysql_free_result放在前面,那么就会出错。

4.$row是个数组

5.$res如果执行的是dql语句返回的是个资源类型,但是如果执行的是dml语句就会返回bool值

6.从$res获取行数据的时候,除了mysql_fetch_row($res)[返回索引数组]还有三个方法:

mysql_fetch_assoc($res)          --------返回一个关联数组

mysql_fetch_array($res)          ---------返回索引数组和关联数组,很耗内存,建议不要使用

mysql_fetch_object($res)        ---------把一行数据当成一个对象返回

至此使用MySQL扩展库操作数据库基本完成,这是后面使用Mysqli扩展库操作数据库的基础,下一篇写Mysqli扩展库操作数据库。

时间: 2024-10-10 21:00:28

边记边学PHP-(十六)PHP使用MySQL扩展库操作数据库的相关文章

边记边学PHP-(十七)PHP使用MySQLi扩展库操作数据库2

从前天开始,我的电脑不知道怎么了,写程序的时候无缘无故就死机.还不是彻底死,鼠标还能动,就是点击不好使,也打不开任务管理器.昨晚检查一下硬盘,有六个坏道,也不知道是不是这个原因.但是我在玩的时候,只要不打开编译器写程序,啥事也没有.玩游戏也不回出现那种情况.把我搞得好烦. 四.Mysqli扩展库增强 MySQLi扩展库在基础操作上看着没什么不同,只是从面面向过程转换成了面向对象.但是既然是mysql扩展库的增强,那一定有强的地方.有如下代码: 1.批量执行sql语句 <?php //mysqli

边记边学PHP-(十七)PHP使用MySQLi扩展库操作数据库1

上一篇写了使用MySQL扩展库操作数据库,但是MySQL扩展库是完全面向过程的库,与现在逐渐走上舞台的面向对象思想有点差别.那么MySQLi扩展库就很好的解决了这个问题. 一.MySQLi扩展库是什么 mysqli(mysql improve)是mysql扩展库的增强版. mysql扩展库 和mysqli扩展库的比较: 1.mysqli的稳定性.安全性和效率有所提高 2.mysqli支持面向对象编程,以前的mysql是面向过程的.同时mysqli扩展库考虑到PHP老程序员,也提供了面向过程的风格

边记边学PHP-(十四)MySql数据库基础操作1

提到数据库,相信都不陌生.比较常见的是SQL Server . Oracle.Access.SQLite等等.当然还有PHP的黄金搭档,MySql数据库.当然我所写的都是MySql的一些基础,我还没有深入的学习这个数据库.深入学习还需要一段时间.但是现在学的基础基本满足我现在的学习需要. 一.MySQL简介 1.MySQL是什么 MySQL是一款安全.跨平台.高效的,并与PHP.Java等主流编程语言紧密结合的数据库系统.该数据库系统是由瑞典的MySQL AB公司开发.发布并支持,由MySQL初

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

第十六篇 JS实现全选操作

JS实现全选 嗨,同学们好,老师这里是专门教同学解决一些针对性的问题,所以说综合起来,就要靠同学自己了. 这节课我们学一个很实用的东西,全选操作!比如淘宝这种商城对吧,我的购物车,我要全选购买,或者删除,一个一个的来肯定麻烦,所以就有了全选和批量处理,那就是复选框! 这里我们用一个table表格来控制吧!看代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&

Java从零开始学三十六(JAVA IO- 字符流)

一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的满时,再把缓冲区的内容写到字符输出流中 二.对文本文件的读写 2.1.字符输入流 2.2.字符输出流 2.3.综合使用 package com.pb.io.buffered; import java.io.BufferedReader; import java.io.BufferedWriter;

Java从零开始学四十六(Junit)

一.软件测试 软件开发: 项目调研--需求分析--软件设计--程序编码--软件测试--运行维护 软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系统的过程.目的在于检验是否满足规定的需求,确认预期结果与实际结果之间的差别. 墨盒测试-白盒测试-回归测试-单元测试 二.JUnit-单元测试工具 三.测试Junit测试类 创建被测试类 package com.pb.junit; /** *1.创建被测试类 *2.Junit 3.0或者4.0 这里

Java从零开始学二十六(包装类)

一.包装类 包装类是将基本类型封装到一个类中.也就是将基本数据类型包装成一个类类型. java程序设计为每一种基本类型都提供了一个包装类.这些包装类就在java.lang包中.有8个包装类 二.包装类的构造方法和静态方法 2.1.第一种 public Type (type value) 其中首字母大写的Type表示包装类,小写的type表示基本类型 这个构造方法接收一个基本数据类型值,并创建一个与之相应的包装类. 可以使用new关键字将一个基本类型包装为一个对象 Integer intValue

边记边学PHP-(十五)MySQL数据库基础操作2

四.使用可视化工具创建数据库 虽然使用命令行感觉更像我们程序员,但是我还是比较喜欢使用workbench来创建数据库. 首先打开workbench , 一个比较友好的界面就打开了,哈哈.我还是比较喜欢这个界面的. 可以看到我昨天用命令行创建的数据库也在.这里这些栏的名称是我自己取的,因为我是自己研究的,也没有看过正规的叫法,也懒得去查. 不过在workbench这个可视化界面创建数据库,它执行的命令不是database而是schema,点击创建数据库的快捷方式,在快速创建栏第四个按钮,.然后输入