前面的话

mysql由于其体积小、速度快、总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为了减低网站总体拥有成本而选择了mysql作为网站数据库。而使用mysql数据库管理系统与php脚本语言相结合的数据库系统解决方案,正被越来越多的网站所采用,其中以LAMP(linux+apche+mysql+php)模式最为流行

PHP有标准的函数用来操作数据库,mysqli是PHP5中新加的,是对mysql扩展的改进。但由于历史遗留问题,好多老项目是在PHP4中使用mysql拓展开发的,如果在原有的项目上进行二次开发,都要求使用mysql拓展函数。如果是新设计的项目,推荐使用mysqli拓展或PDO技术。本文主要介绍PHP中的mysql拓展函数

总括

在PHP脚本中操作MySQL数据库的的几个步骤如下:

1、连接MySQL数据库服务器,并判断是否连接正确

2、选择数据库,并设置字符集(可选)

3、执行SQL命令

4、处理结果集

5、关闭数据库连接

连接MySQL数据库服务器,并判断是否连接正确

mysql_connect()

mysql_connect()函数用来打开一个到 MySQL 服务器的连接。如果成功则返回一个资源, 或者在失败时返回FALSE

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

mysql_errno()

mysql_errno()函数用于返回上一个 MySQL 操作中的错误信息的数字编码

int mysql_errno ([ resource $link_identifier ] )

mysql_error()

mysql_error()函数用于返回上一个 MySQL 操作产生的文本错误信息。如果没有指定连接资源号,则使用上一个成功打开的连接从 MySQL 服务器提取错误信息

string mysql_error ([ resource $link_identifier ] )

if(!$link){die('连接失败:'.mysql_error());

}?>

选择数据库,并设置字符集(可选)

通常,数据库的创建工作都是先由数据库管理员(DBA)建立,再由PHP程序员在脚本中使用。例如,创建一个名为bookstore的数据库

使用PHP脚本建立与mysql服务器的连接之后,为了避免每次调用PHP的mysql扩展函数都指定目标数据库,最好先用mysql_select_db()函数为后续操作选定一个默认数据库,这个函数与SQL命令"USE bookstore"功能相似

mysql_select_db()

mysql_select_db()函数用于选择 MySQL 数据库

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

if(!$link){die('连接失败:'.mysql_error());

}mysql_select_db('bookstore',$link) or die('不能选定数据库bookstore:' .mysql_error());mysql_query('set names utf8');//设置字符集(一般不常用)

?>

执行SQL命令

首先,在bookstore数据库中创建一张books数据表

CREATE TABLE books(

id INT NOTNULL AUTO_INCREMENT,bookname VARCHAR(80) NOT NULL DEFAULT '',publisher VARCHAR(60) NOT NULL DEFAULT '',author VARCHAR(20) NOT NULL DEFAULT '',priceDOUBLE(5,2) NOT NULL DEFAULT 0.00,ptime INT NOTNULL DEFAULT 0,pic CHAR(24) NOT NULL DEFAULT '',detail TEXT,PRIMARYKEY(id));

));

在PHP中,只要把SQL命令作为一个字符串传递给mysql_query()函数,就会将其发送到MYSQL服务器并执行

mysql_query()

mysql_query()函数用于发送一条 MySQL 查询。mysql_query() 仅对 SELECT,SHOW,DESCRIBE, EXPLAIN 和其他语句返回一个resource,如果查询出现错误则返回 FALSE;对于其它类型的 SQL 语句,比如INSERT, UPDATE, DELETE, DROP 之类, mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE

resource mysql_query ( string $query [, resource $link_identifier = NULL ] )

将要插入的3条INSERT语句声明为一个字符串

$insert = "insert into books(bookname, publisher, author, price, detail) values

('PHP','电子工业出版社','张三','80.00','PHP相关'),

('ASP','电子工业出版社','李四','90.00','ASP相关'),

('JSP','电子工业出版社','王五','70.00','JSP相关')";

使用mysql_query()函数发送INSERT语句,如果成功返回true,失败则返回false

$result = mysql_query($insert);var_dump($result);

mysql_affected_rows()

mysql_affected_rows()函数用于取得前一次 MySQL 操作所影响的记录行数。执行成功则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1

int mysql_affected_rows ([ resource $link_identifier = NULL ] )

var_dump(mysql_affected_rows());//int3

通常通过判断mysql_affected_rows()函数的值是否大于0来确定数据操作是否成功

mysql_insert_id()

mysql_insert_id()函数用来取得上一步 INSERT 操作产生的 ID

int mysql_insert_id ([ resource $link_identifier ] )

('PHP','电子工业出版社','张三','80.00','PHP相关'),

('ASP','电子工业出版社','李四','90.00','ASP相关'),

('JSP','电子工业出版社','王五','70.00','JSP相关')";$result = mysql_query($insert);if($result && mysql_affected_rows() > 0){//刷新页面两次后,相当于插入了两次数据。页面显示数据记录插入成功,最后一条插入的数据记录id为:4

echo "数据记录插入成功,最后一条插入的数据记录id为:".mysql_insert_id()."
";

}else{//若在数据表删除后,则显示数据记录插入失败,错误号:1146,错误原因:La table 'bookstore.books' n'existe pas

echo "数据记录插入失败,错误号:".mysql_errno().",错误原因:".mysql_error()."
";

}?>

实际上,最后一个id应该为6,但是由于4、5、6三条语句是同时插入的,这时显示的是第一个id为4

下面,将id为4的记录的作者修改为小白

$result = mysql_query("UPDATE books SET author='小白' WHERE id='4'");if($result && mysql_affected_rows() > 0){echo "数据记录修改成功
";

}else{echo "数据记录修改失败,错误号:".mysql_errno().",错误原因:".mysql_error()."
";

}

下面,删除作者为李四的记录

$result = mysql_query("DELETE FROM books WHERE author='李四'");if($result && mysql_affected_rows() > 0){echo "数据记录删除成功
";

}else{echo "数据记录删除失败,错误号:".mysql_errno().",错误原因:".mysql_error()."
";

}

处理结果集

在PHP脚本中执行SELECT查询命令,也是调用mysql_query()函数,但和执行DML不同的是,执行SELECT命令之后,mysql_query()函数的返回值是一个PHP资源的引用指针(结果集)。这个返回值可以在各种结果集处理函数中,对结果数据表的各个字段进行处理

mysql_num_fields()

mysql_num_fields()函数取得结果集中字段的数目

int mysql_num_fields ( resource $result )

mysql_num_rows()

mysql_num_rows()函数取得结果集中行的数目

int mysql_num_rows ( resource $result )

$result = mysql_query("SELECT * FROM books");$rows = mysql_num_rows($result);$cols = mysql_num_fields($result);var_dump($rows,$cols);//int 4 int 8

从结果中可以看出,该结果集总共有4行8列

如果需要访问结果集中的数据,可以选用mysql_fetch_row()、mysql_fetch_assoc()、mysql_fetch_array()、mysql_fetch_object()这4个函数中的任意一个

mysql_fetch_row()

mysql_fetch_row()函数从结果集中取得一行作为枚举数组

array mysql_fetch_row ( resource $result )

如果需要访问结果集中的数据,可以选用mysql_fetch_row()、mysql_fetch_assoc()、mysql_fetch_array()、mysql_fetch_object()这4个函数中的任意一个

mysql_fetch_row()

mysql_fetch_row()函数从结果集中取得一行作为枚举数组

array mysql_fetch_row ( resource $result )

$result = mysql_query("SELECT * FROM books");$row = mysql_fetch_row($result);//Array ( [0] => 1 [1] => PHP [2] => 电子工业出版社 [3] => 张三 [4] => 80.00 [5] => 0 [6] => [7] => PHP相关 )

print_r($row);$row = mysql_fetch_row($result);//Array ( [0] => 3 [1] => JSP [2] => 电子工业出版社 [3] => 王五 [4] => 70.00 [5] => 0 [6] => [7] => JSP相关 )

print_r($row);

mysql_fetch_assoc()

mysql_fetch_assoc()函数从结果集中取得一行作为关联数组

array mysql_fetch_assoc ( resource $result )

$result = mysql_query("SELECT * FROM books");$assoc = mysql_fetch_assoc($result);//Array ( [id] => 1 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )

print_r($assoc);$assoc = mysql_fetch_assoc($result);//Array ( [id] => 3 [bookname] => JSP [publisher] => 电子工业出版社 [author] => 王五 [price] => 70.00 [ptime] => 0 [pic] => [detail] => JSP相关 )

print_r($assoc);

mysql_fetch_array()

mysql_fetch_array()函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH,默认值是 MYSQL_BOTH

array mysql_fetch_array ( resource $result [, int $ result_type ] )

$result = mysql_query("SELECT * FROM books");$array = mysql_fetch_array($result);//Array ( [0] => 1 [id] => 1 [1] => PHP [bookname] => PHP [2] => 电子工业出版社 [publisher] => 电子工业出版社 [3] => 张三 [author] => 张三 [4] => 80.00 [price] => 80.00 [5] => 0 [ptime] => 0 [6] => [pic] => [7] => PHP相关 [detail] => PHP相关 )

print_r($array);$array = mysql_fetch_array($result);//Array ( [0] => 3 [id] => 3 [1] => JSP [bookname] => JSP [2] => 电子工业出版社 [publisher] => 电子工业出版社 [3] => 王五 [author] => 王五 [4] => 70.00 [price] => 70.00 [5] => 0 [ptime] => 0 [6] => [pic] => [7] => JSP相关 [detail] => JSP相关 )

print_r($array);

mysql_fetch_object()

mysql_fetch_object()函数从结果集中取得一行作为对象

object mysql_fetch_object ( resource $result )

$result = mysql_query("SELECT * FROM books");$object = mysql_fetch_object($result);//stdClass Object ( [id] => 1 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )

print_r($object);$object = mysql_fetch_object($result);//stdClass Object ( [id] => 3 [bookname] => JSP [publisher] => 电子工业出版社 [author] => 王五 [price] => 70.00 [ptime] => 0 [pic] => [detail] => JSP相关 )

print_r($object);

对于上面的四个函数来说,默认指针都指向第一行记录。在获取一行记录后,指针会自动下移。如果是最后一委,则函数返回false。一般地,mysql_fetch_assoc()这种返回关联数组形式的函数较常用

mysql_data_seek()

mysql_data_seek()函数可以移动内部结果的指针

[注意]$row_number从0开始

bool mysql_data_seek ( resource $result , int $row_number )

$result = mysql_query("SELECT * FROM books");$assoc = mysql_fetch_assoc($result);mysql_data_seek($result , 2);$assoc = mysql_fetch_assoc($result);Array ( [id] => 4 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 小白 [price] => 80.00 [ptime] => 0 [pic] => [detail] =>PHP相关 )print_r($assoc);mysql_data_seek($result , 0);$assoc = mysql_fetch_assoc($result);//Array ( [id] => 1 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )

print_r($assoc);

下面使用while循环和mysql_fetch_assoc()函数将结果集以表格的形式显示出来

.table{

border:1px solid black;

border-collapse:collapse;

table-layout:fixed;

}

$result = mysql_query("SELECT id,bookname,publisher,author,price FROM books");echo '

编号 书名 出版社 作者 价格
{$assoc['id']} {$assoc['bookname']} {$assoc['publisher']} {$assoc['author']} {$assoc['price']}

}echo '

';

mysql_free_result()

mysql_free_result()函数用于释放结果内存

bool mysql_free_result ( resource $result )

mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放

关闭数据库连接

mysql_close()

mysql_close()函数用于关闭 MySQL 连接

bool mysql_close ([ resource $link_identifier = NULL ] )

mysql_close() 关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接

所以,一个比较完整的php操作数据库扩展函数的程序如下所示

$link = mysql_connect('localhost','root','******');if(!$link){die('连接失败:'.mysql_error());

}//选择数据库

mysql_select_db('bookstore',$link) or die('不能选定数据库bookstore:' .mysql_error());//执行SQL命令

$insert = "insert into books(bookname, publisher, author, price, detail) values

('PHP','电子工业出版社','张三','80.00','PHP相关'),

('ASP','电子工业出版社','李四','90.00','ASP相关'),

('JSP','电子工业出版社','王五','70.00','JSP相关')";$result = mysql_query($insert);//操作结果集

$result = mysql_query("SELECT id,bookname,publisher,author,price FROM books");echo '

编号 书名 出版社 作者 价格
{$assoc['id']} {$assoc['bookname']} {$assoc['publisher']} {$assoc['author']} {$assoc['price']}

}echo '

';//释放结果集

mysql_free_result($result);//关闭数据库连接

mysql_close($link);?>

mysql_query扩展_前端学PHP之mysql扩展函数相关推荐

  1. cmd mysql 数据分析_小白学数据分析--与MySQL有关的小知识

    放在这个专题下,是因为有时候我们数据分析师的确是懂得一点数据库的操作知识或者会一些SQL,平时我用的比较多的就是MySQL,如果说我们一般就是要学一些SQL操作的话,可能就足以应付平时的工作,至于对象 ...

  2. java单词匹配算法_前端学数据结构与算法(八): 单词前缀匹配神器-Trie树的实现及其应用...

    前言 继二叉树.堆之后,接下来介绍另外一种树型的数据结构-Trie树,也可以叫它前缀树.字典树.例如我们再搜索引擎里输入几个关键字之后,后续的内容会自动续上.此时我们输入的关键词也就是前缀,而后面的就 ...

  3. JavaWeb全套教程笔记_前端技术

    JavaWeb全套教程笔记第一阶段_前端技术 自己整理一套详细的笔记资料,可以满足平时查阅复习,还能帮助别人学习JavaWeb知识.JavaWeb教程分为四个阶段 前端技术 1.HTML.2.CSS. ...

  4. ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...

    JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...

  5. 前端学HTTP之web攻击技术

    前端学HTTP之web攻击技术 前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目 ...

  6. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  7. 使用Rekit开发可扩展的前端应用

    近几年前端技术的快速发展,开发能力与开发难度在逐渐上升.一方面,大型项目中的技术选型,项目结构组织问题一直没有统一的实践方式.另一方面,前端项目的开发工具远远落后于技术本身的发展.大家现在使用的VSC ...

  8. (四)Amazon Lightsail 部署LAMP应用程序之扩展PHP前端

    扩展PHP前端 既然PHP前端和数据库是分开的,您将为Web层添加可伸缩性和容错性: 在以下步骤,您将获取Web前端实例的快照,并从该快照部署另外2个Web层实例.最终,您将在三个Web实例前面添加一 ...

  9. php操作mysql数据库的扩展有哪些_8.PHP操作MySQL数据库(Mysqli扩展)

    思考:如果数据库的操作都是需要我们手动去调用客户端发送指令,那么这样的操作有什么意义呢? 引入:手动通过客户端操作MySQL数据库,只是我们学习SQL的一种手段.要实现数据库的自动调用,就需要客户端能 ...

  10. 人工智能实战小程序之语音_前端开发

    1. 人工智能实战小程序之准备工作 2. 人工智能实战小程序之语音_前端开发 今天这部分主要讲小程序前端功能的开发 由于我偏后端,css是我的弱项,可能很多人和我一样开发小程序不知道如何下手,希望本篇 ...

最新文章

  1. Mysql高级调优篇——第四章:Sql实战调优场景剖析(下)
  2. SQL Server中的执行引擎入门
  3. 谷歌实现2种新的强化学习算法,“比肩”DQN,泛化性能更佳!|ICLR 2021
  4. 解密PreAngel区块链布局:平台协议类项目占4成,多个项目蓄势待发
  5. 【转】Compile、Make和Build的区别
  6. 笔记本开机进入ubuntu16.04自动关闭触摸板
  7. 深入源码分析Java线程池的实现原理
  8. 下载旧版本jdk和tomcat
  9. Linux双网卡下的网络故障排查
  10. 斐讯 N1 降级、刷机及 Armbian 安装 [2019.7.23]
  11. sql语句where的执行顺序
  12. 人脸识别 (4) 人脸对齐
  13. 我国的离婚率现状,通过数据的可视化展示,来直观的展现给大家
  14. iOS从零开始学习socket编程——HTTP1.0服务器端
  15. 小飞升值记——(4)
  16. Java实现蓝桥杯VIP算法训练 预测身高
  17. 【ESP 保姆级教程】疯狂Node.js服务器篇 ——案例:ESP8266 + MQ3酒精传感器 + NodeJs本地服务 + 文件存储数据
  18. mysql原理、索引、优化-【公司内部培训】
  19. 用计算机写高中数学程序框图,高中数学教案《程序框图》
  20. matlab 线性最小二乘法,求解线性方程组 - 最小二乘法

热门文章

  1. Linux宝库快讯 | OpenStack中国日更名OpenInfra中国日
  2. oracle左连接没用_Oracle左连接,右连接
  3. 【图像压缩】基于matlab BP神经网络图像压缩【含Matlab源码 741期】
  4. 【图像分割】基于matlab GUI图像提取【含Matlab源码 702期】
  5. 多模态语义分析_学术竞赛 | 冠军方案分享2020科大讯飞AI开发者大赛多模态情感分析赛道...
  6. oracle 64位使用plsql,64位操作系统使用plsql
  7. java上下左右_上下左右代替maquee的滚动代码
  8. mysql 程序无法连接_程序无法连接到服务器不知道怎么解决
  9. python--元组:tuple
  10. VMare Workstation 12 安装 AsteriskNow freePBX