asp做网站很少,网上购物平台有哪些?,长春专业网站建设公司,做网站找哪家好要钱吗要想让汽车跑得快#xff0c;性能优异的引擎合适的车轮正确的跑道都是缺一不可的。
PHP 常见的运行模式
SAPI 即服务器应用程序编程接口#xff0c;是 PHP 与其他应用交互的接口#xff0c;PHP 脚本要执行有很多方式#xff0c;比如通过 Web 服务器、命令行下或者嵌入在其…要想让汽车跑得快性能优异的引擎合适的车轮正确的跑道都是缺一不可的。
PHP 常见的运行模式
SAPI 即服务器应用程序编程接口是 PHP 与其他应用交互的接口PHP 脚本要执行有很多方式比如通过 Web 服务器、命令行下或者嵌入在其他程序中。
SAPI 提供了一个和外部通信的接口常见的 SAPI 有cgi、fast-cgi、cli、apache 模块的 DLL、isapi 等。
CGI
CGI 即通用网关接口Common Gateway Interface它是一段程序通俗的讲 CGI 就象是一座桥把网页和 WEB 服务器中的执行程序连接起来它把 HTML 接收的指令传递给服务器的执行程序再把服务器执行程序的结果返还给 HTML。
CGI 的跨平台性能极佳几乎可以在任何操作系统上实现。
CGI 在遇到连接请求后会先要创建 CGI 的子进程激活一个 CGI 进程然后处理请求处理完后结束这个子进程这就是 fork-and-execute 模式。
综上所述使用 CGI 方式的服务器有多少连接请求就会有多少 CGI 子进程子进程反复加载 会导致 CGI 性能低下。当用户请求数量非常多时会大量挤占系统的资源如内存、CPU 时间等造成性能低下。
FastCGI
fast-cgi 是 CGI 的升级版本FastCGI 像是一个常驻long-live型的 CGI它激活后可以一直执行着。
FastCGI 的工作原理
Web Server 启动时载入 FastCGI 进程管理器IIS ISAPI 或 Apache ModuleFastCGI 进程管理器自身初始化启动多个 CGI 解释器进程可见多个 php-cgi并等待来自 Web Server 的连接当客户端请求到达 Web Server 时FastCGI 进程管理器选择并连接到一个 CGI 解释器。Web server 将 CGI 环境变量和标准输入发送到 FastCGI子进程 php-cgiFastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回 Web Server。当 FastCGI 子进程关闭连接时请求便处理完成了。FastCGI 子进程接着等待并处理来自 FastCGI 进程管理器运行在 Web Server 中的下一个连接。 在 CGI 模式中php-cgi 在此便退出了。
APACHE2HANDLER
PHP 作为 Apache 的模块Apache 服务器在系统启动后预先生成多个进程副本驻留在内存中一旦有请求出现就立即使用这些空余的子进程进行处理这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次 HTTP 请求之后并不立即退出而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快性能较高。
apache 模块的 DLL
该运行模式是我们以前在 windows 环境下使用 apache 服务器经常使用的而在模块化DLL中PHP 是与 Web 服务器一起启动并运行的。是 apache 在 CGI 的基础上进行的一种扩展可以加快 PHP 的运行效率
ISAPI
ISAPI 即 Internet Server Application Program Interface是微软提供的一套面向 Internet 服务的 API 接口。一个 ISAPI 的 DLL可以在被用户请求激活后长驻内存等待用户的另一个请求还可以在一个 DLL 里设置多个用户请求处理函数此外 ISAPI 的 DLL 应用程序和 WWW 服务器处于同一个进程中效率要显著高于 CGI。
CLI
CLI全称command-line interface命令行界面是在图形用户界面得到普及之前使用最为广泛的用户界面它通常不支持鼠标用户通过键盘输入指令计算机接收到指令后予以执行。也有人称之为字符用户界面CUI。
PHP 的执行流程和 opcode
我们再来看看 PHP 代码执行所经过的流程。 图2PHP 的执行流程
一段PHP代码会经过词法解析、语法解析等阶段会被翻译成一个个指令opcode然后 zend 虚拟机会顺序执行这些指令。PHP 本身是用C语言实现的因此最终调用的也是C语言的函数实际上我们可以把 PHP 看做一个C语言开发的软件。
PHP 执行的核心就是翻译出来的一条一条指令也就是 opcodeopcode 是 PHP 程序执行的最基本单位。
在计算机科学领域中操作码Operation Code被用于描述机器语言指令中指定要执行某种操作的那部分机器码构成 opcode 的指令格式和规范由处理器的指令规范指定。
一个 opcode 由两个参数op1op2、返回值和处理函数组成。PHP 程序最终被翻译为一组 opcode 处理函数的顺序执行。
下面列举了几个常见的处理函数
ZEND_ASSIGN_SPEC_CV_CV_HANDLER : 变量分配
a a
ab
ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER函数调用ZEND_CONCAT_SPEC_CV_CV_HANDLER字符串拼接
a
.
a.
a.b
ZEND_ADD_SPEC_CV_CONST_HANDLER: 加法运算 $a2ZEND_IS_EQUAL_SPEC_CV_CONST判断相等 $a1ZEND_IS_IDENTICAL_SPEC_CV_CONST判断相等 $a1。
HashTable
HashTable是Zend的核心数据结构在PHP里面几乎并用来实现所有常见功能我们知道的PHP数组即是其典型应用此外在zend内部如函数符号表、全局变量等也都是基于HashTable。
HashTable具有如下特点
支持典型的key-value查询可以当做数组使用添加、删除节点是O1复杂度key支持混合类型同时存在关联数组合索引数组Value支持混合类型array(“string”,2332)支持线性遍历如 foreach。
Zval
由于PHP 是一门弱类型语言本身不严格区分变量的类型。PHP 在声明变量的时候不需要指定类型。PHP 在程序运行期间可能进行变量类型的隐式转换。和其他强类型语言一样程序中也可以进行显式的类型转换。Zval 是 Zend 中另一个非常重要的数据结构用来标识并实现 PHP 变量。
Zval 主要由以下 3 部分组成。
Type指定了变量所述的类型整数、字符串、数组等refcountis_ref用来实现引用计数value是核心部分存储了变量的实际数据。
Zval 用来保存一个变量的实际数据。因为要存储多种类型所以 zval 是一个 union也由此实现了弱类型。
引用计数在内存回收、字符串操作等地方使用得非常广泛。PHP 中的变量就是引用计数的典型应用。Zval 的引用计数通过成员变量 is_ref 和 ref_count 实现。通过引用计数多个变量可以共享同一份数据避免频繁复制带来的大量消耗。
在进行赋值操作时Zend 将变量指向相同的 Zval同时 ref_count在 unset 操作时对应的 ref_count-1。只有 ref_count 为 0 时才会真正执行销毁操作。如果是引用赋值Zend 就会修改 is_ref 为 1。
PHP 变量通过引用计数实现变量共享数据当试图写入一个变量时Zend 若发现该变量指向的 Zval 被多个变量共享则为其复制一份 ref_count 为 1 的 Zval并递减原 Zval 的 refcount这个过程称为“Zval分离”。可见只有在有写操作发生时Zend 才进行复制操作因此也叫 copy-on-write写时复制。
对于引用型变量其要求和非引用型相反引用赋值的变量间必须是捆绑的修改一个变量就修改了所有捆绑变量。
静态网页与动态网页的区别
网页可分为静态网页与动态网页两种形式。在介绍这两种网页之前我们先来了解一下网络构成中的服务器Server与客户机Client。
服务器是安装有服务器软件并且可以向客户机提供网页浏览、数据库查询等服务的设备。而客户机则与之相反它通过客户端软件如浏览器从服务器上获得网页浏览、软件下载等服务。简单地讲服务器就是服务提供者而客户机则是服务获得者。
静态网页
在网站设计中静态网页是网站建设的基础纯粹 HTML 格式的网页通常被称为“静态网页”静态网页是标准的 HTML 文件它的文件扩展名是 .htm、.html可以包含文本、图像、声音、FLASH 动画、客户端脚本和 ActiveX 控件等。
静态网页是相对于动态网页而言是指没有后台数据库、不含程序和不可交互的网页。静态网页相对更新起来比较麻烦适用于一般更新较少的展示型网站。
容易误解的是静态网页并不是静止不动的它也可以出现各种动态的效果如 GIF 动画、FLASH、滚动字幕等。
静态网页服务的实现首先需要客户机通过浏览器向服务器发出请求然后服务器接受请求并根据请求从服务器端的网页中找到对应的页面最后返回给客户机浏览器。这个过程中所发送的页面都是事先编辑好的它并不能自动生成。 图1静态网页的实现模式
静态网页有以下特点
静态网页不能自动更新若要对静态页面进行更新就要重新编写 HTML 源文件然后再上传。因此静态网页的制作和维护工作量相当大。静态网页的内容不随浏览用户、浏览时间等条件的变化而变化。无论何人、何时、何地浏览网页它的内容都是一成不变的不包括使用 JavaScript 实现的一些简单特效。静态网页一经发布无论浏览者浏览与否它都是真实存在的一个文件都对应一个 URL文件在网上的地址。用静态网页实现人机交互有相当大的局限性。由于不能动态生成页面所以用静态网页来实现人机交互是很困难的在功能上有很大限制。
动态页面
动态网页是基本的 HTML 语法规范与 PHP、Java、Python 等程序语言、数据库等多种技术的融合以期实现对网站内容和风格的高效、动态、交互式的管理。因此可以理解为凡是结合了 HTML 以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页都是动态网页。
也就是说动态网页相对于静态网页来说页面代码虽然没有变但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
动态网页与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系动态网页也可以是纯文字内容的也可以包含各种动画的内容这些只是网页具体内容的表现形式无论网页是否具有动态效果只要是采用了动态网站技术如 PHP、JSP 等生成的网页都可以称为动态网页。
与静态网页相比动态网页有以下特点
动态网页在服务器端运行客户机上看到的只是它的返回结果不可能看到它的源文件。而静态网页则只能通过服务器把网页文件原封不动地传给客户机本身不进行任何处理。不同的人、不同时间、不同地点浏览同一个动态网页根据代码处理结果不同会返回不同的内容。动态网页只有经客户浏览时才会返回一个完整的网页而其本身并不是一个独立存在于服务器的网页文件。与静态网页相比动态网页更容易实现人机交互。与数据库相联系能实现更为强大的功能。由动态网页构建的网站维护起来比由静态网页构建的网站容易只需要更新调用的数据如数据库内容即可。
与静态网页的实现方法不同动态网页服务的实现首先需要客户机向服务器发送请求然后服务器根据用户请求把动态网页内部的代码先在服务器上进行相应的处理最后服务器把生成的结果发送给客户机如下图所示 图2动态网页的实现模式
动态网页与传统网页的区别
1) 更新和维护
静态网页内容一经发布到网站服务器上无论是否有用户访问这些网页内容都是保存在网站服务器上的。如果要修改网页的内容就必须修改其源文件然后重新上传到服务器上。静态网页没有数据库的支持当网站信息量很大的时候网页的制作和维护都很困难。
动态网页可以根据不同的用户请求时间或者环境的需求动态的生成不同的网页内容并且动态网页一般以数据库技术为基础可以大大降低网站维护的工作量。
2) 交互性
静态网页由于很多内容都是固定的在功能方面有很大的限制所以交互性较差。
动态网页则可以实现更多的功能如用户的登录、注册、查询等。
3) 响应速度
静态网页内容相对固定容易被搜索引擎检索且不需要连接数据库因此响应速度较快。
动态网页实际上并不是独立存在于服务器上的网页文件只有当用户请求时服务器才返回一个完整的网页其中涉及到数据的连接访问和查询等一系列过程所以响应速度相对较慢。
搭建PHP开发环境
对于初学者推荐在 Windows 操作系统下使用 XAMPP 一键安装 PHP 集成开发环境Apache、PHP、MySQLXAMPP 提供 PHP 7 的安装版本读者只需要到官方网站 https://www.apachefriends.org/download.html 下载即可。下载界面如图所示。 下载后得到一个 EXE 文件双击该文件安装。安装完成后查看该集成环境安装目录如图所示。 双击 manager-windows.exe 即可打开管理窗口在 Manage Servers 选项卡查看 MySQL 及 Apache 运行状态如图所示。 应用目录默认位于安装目录的 apache2/htdocs 目录下在该目录下新建 test.php 并编辑其内容
?phpecho phpinfo();
在浏览器中访问 http://localhost/test.php页面显示如图所示。 出现以上页面则说明安装成功。
第一个PHP程序
通过前面对 PHP 的介绍相信大家已经对 PHP 有了一定的了解那么本节我们就带领大家实现一个简单 PHP 程序——在浏览器中输出“Hello World”。
想要在页面输出“Hello World”非常简单仅需要几行代码就可以搞定如下所示
?php echo Hello World;?
上面代码中?php和?分别表示 PHP 文件的开始和结束标记在这里结束标记?并不是必须的可以省略。两个标记之间是我们所写的 PHP 代码代码与开始/结束标记也可以在同一行但必须以空格分开如下所示
?php echo Hello World; ?
其中echo 是输出语句用于输出一个字符串也就是 echo 后面以 包裹的部分这里使用 也是可以的。末尾的英文状态的分号;表示一条语句的结束。
PHP 源文件的格式为“.php”理论上 PHP 的源文件可以放在任意目录下但是为了方便运行我们还是尽量将它放置在服务器环境相应的目录下比如下面列举的这些
XAMPP 集成环境XAMPP 安装目录下的 htdocs 文件夹中PHPStudy 集成环境PHPStudy 安装目录下的 WWW 文件夹中。
提示因开发环境的不同PHP 源文件的存放目录略有不同比较常见的就是 htdocs、WWW 这两个目录。
本教程中使用的就是 XAMPP 集成环境所以首先需要在 htdocs 目录下创建一个 index.php 文件index 在这里是首页的意思PHP 程序默认会首先运行名为 index 的文件如 index.php、index.html 等当然这也不是绝对的我们也可以通过修改配置文件的方式让 PHP 程序首先运行指定的文件这些我们会在后面详细介绍。 图新建一个index.php文件
创建好 index.php 文件后将我们上面的代码复制到文件中并保存。
在开始运行之前我们首先需要确认一下 XAMPP 的 apache 服务处于开启状态如下图所示 图开启 apache 服务
然后就可以在浏览器中输入 localhost或者点击上图红框中的 Admin 按钮就可以运行我们的 PHP 程序了如下图所示 图运行第一个PHP程序
MySQL数据库简介
PHP 在开发 Web 站点或一些管理系统时需要对大量的数据进行保存虽然 XML 文件或者文本文件也可以作为数据的载体但不易进行管理和对大量数据的存储所以在项目开发时数据库就显得非常重要。
PHP 可以连接的数据库种类较多其中 MySQL 数据库与其兼容较好在 PHP 数据库开发中被广泛地应用。
MySQL 是什么
MySQL 是一款安全、跨平台、高效的并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
MySQL 的象征符号是一只名为 Sakila 的海豚代表着 MySQL 数据库的速度、能力、精确和优秀本质。 图MySQL 图标
目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低尤其是开放源码这一特点使得很多公司都采用 MySQL 数据库以降低成本。
MySQL 数据库可以称得上是目前运行速度最快的 SQL 语言数据库之一。除了具有许多其他数据库所不具备的功能外MySQL 数据库还是一种完全免费的产品用户可以直接通过网络下载 MySQL 数据库而不必支付任何费用。
MySQL 特点
下面总结了一下 MySQL 具备的特点。
1) 功能强大
MySQL 中提供了多种数据库存储引擎各引擎各有所长适用于不同的应用场合用户可以选择最合适的引擎以得到最高性能可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。
2) 支持跨平台
MySQL 支持至少 20 种以上的开发平台包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。这使得在任何平台下编写的程序都可以进行移植而不需要对程序做任何的修改。
3) 运行速度快
高速是 MySQL 的显著特性。在 MySQL 中使用了极快的 B 树磁盘表MyISAM和索引压缩通过使用优化的单扫描多连接能够极快地实现连接SQL 函数使用高度优化的类库实现运行速度极快。
4) 支持面向对象
PHP 支持混合编程方式。编程方式可分为纯粹面向对象、纯粹面向过程、面句对象与面向过程混合 3 种方式。
5) 安全性高
灵活和安全的权限与密码系统允许基本主机的验证。连接到服务器时所有的密码传输均采用加密形式从而保证了密码的安全。
6) 成本低
MySQL 数据库是一种完全免费的产品用户可以直接通过网络下载。
7) 支持各种开发语言
MySQL 为各种流行的程序设计语言提供支持为它们提供了很多的 API 函数包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C、Perl 语言等。
8) 数据库存储容量大
MySQL 数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的而不是由 MySQL 内部限制决定的。InnoDB 存储引擎将 InnoDB 表保存在一个表空间内该表空间可由数个文件创建表空间的最大容量为 64TB可以轻松处理拥有上千万条记录的大型数据库。
9) 支持强大的内置函数
PHP 中提供了大量内置函数几乎涵盖了 Web 应用开发中的所有功能。它内置了数据库连接、文件上传等功能MySQL 支持大量的扩展库如 MySQLi 等可以为快速开发 Web 应用提供便利。
数据库的应用
数据库是计算机应用系统中的一种专门管理数据资源的系统。数据有多种形式如文字、数码、符号、图形、图像及声音等数据是所有计算机系统所要处理的对象。我们所熟知的一种处理办法是制作文件即将处理过程编成程序文件将所涉及的数据按程序要求组成数据文件再用程序来调用数据文件与程序文件保持着一定的关系。
在计算机应用迅速发展的情况下这种文件式管理方法便显出它的不足。比如它使得数据通用性差、不便于移植、在不同文件中存储大量重复信息、浪费存储空间、更新不便等。
而数据库系统便能解决上述问题。数据库系统不从具体的应用程序出发而是立足于数据本身的管理它将所有数据保存在数据库中进行科学的组织并借助于数据库管理系统以它为中介与各种应用程序或应用系统接口使之能方便地使用数据库中的数据。
其实简单地说数据库就是一组经过计算机整理后的数据存储在一个或多个文件中而管理这个数据库的软件就称为数据库管理系统。一般一个数据库系统Database System 可以分为数据库Database与数据管理系统Database Management SystemDBMS两个部分。主流的数据库软件有 Oracle、Informix、Sybase、SQL Server、PostgreSQL、MySQL、Access、FoxPro 和 Teradata 等等。
数据库在 Web 开发中的重要地位
归根结底动态网站都是对数据进行操作我们平时浏览网页时会发现网页的内容会经常变化而页面的主体结构框架没变新闻就是一个典型。这是因为我们将新闻存储在了数据库中用户在浏览时程序就会根据用户所请求的新闻编号将对应的新闻从数据库中读取出来然后再以特定的格式响应给用户。
Web 系统的开发基本上是离不开数据库的因为任何东西都要存放在数据库中。所谓的动态网站就是基于数据库开发的系统最重要的就是数据管理或者说我们在开发时都是在围绕数据库在写程序。所以作为一个 Web 程序员只有先掌握一门数据库才可能去进行软件开发。
下图展示了项目中一个模块的开发流程将网站的内容存储在 MySQL 数据库中然后使用 PHP 通过 SQL 查询获取这些内容并以 HTML 格式输出到浏览器中显示。或者将用户在表单中输出的数据通过在 PHP 程序中执行 SQL 查询将数据保存在 MySQL 数据库中。也可以在 PHP 脚本中接受用户在网页上的其他相关操作再通过 SQL 查询对数据库中存储的网站内容进行管理。 图基于数据库的 Web 系统
PHP 几乎可以使用现有的所有的数据库MySQL 与其他的大型数据库例如 Oracle、DB2、SQL Server 等相比自有它的不足之处比如规模小、功能有限MySQL Cluster 的功能和效率都相对比较差等但这也丝毫没有减少它受欢迎的程度。 对于一般的个人使用者或者中小型企业来说MySQL 提供的功能已经绰绰有余而且由于 MySQL 是开放源码软件因此可以大大降低总体拥有成本。
目前 Internet 上流行的网站构架方式分别是 LAMPLinux Apache MySQL PHP/Perl/Python和 LNMPLinux Nginx MySQL PHP/Perl/Python也就是使用 Linux 作为操作系统Apache 和 Nginx 作为 Web 服务器MySQL 作为数据库PHP 作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件因此使用这种方式不用花一分钱除开人工成本外就可以建立起一个稳定、免费的网站系统。
PHP 和 MySQL 的合作方式
在同一个 MySQL 数据库服务器中可以创建多个数据库如果把每个数据库看成是一个“仓库”那么网站中的内容数据就存储在这个仓库中。而对数据库中数据的存取及维护等都是通过数据库管理系统软件进行管理的。
同一个数据库管理系统可以为不同的网站分别建立数据库但为了使网站中的数据便于维护、备份及移植最好为一个网站创建一个数据库在大数据量时则采用分库分表。数据库和数据库管理系统以及 PHP 应用程序之间的关系如下图所示。 图PHP 程序与数据库之间的关系
PHP连接数据库
使用 PHP 操作 MySQL 数据库是进行 Web 开发的必然要求之一PHP 中提供了完整的操作 MySQL 数据库的函数这些函数包括了从连接数据库、执行 SQL 语句、处理数据结果集到关闭数据库的方方面面。通过这些函数使基于 MySQL 数据库的 Web 开发高效而简单。通常 PHP 访问 MySQL 数据库的步骤如下图所示。 图PHP 访问数据库的步骤
在此之前我们需要确保开启了 PHP 中的 mysqli 扩展。以 Windows 系统为例开启 mysqli 扩展就是将 php.ini 配置文件中extensionmysqliphp7或extensionphp_mysqli.dllphp5一项的注释去掉即可。
注意在学习 PHP 操作 MySQL 数据库的过程中会涉及到一些 MySQL 的相关知识不了解的同学可以阅读本站的《MySQL教程》。
开启成功后可以使用 phpinfo() 函数查看示例代码如下
?php phpinfo();?
在输出的界面中搜索 mysqli出现如下界面则表示开启成功。 图使用 phpinfo() 函数查看是否开启成功
连接 MySQL 数据库
前面我们成功开启了 PHP 中的 mysqli 扩展使用扩展中的 mysqli_connect() 函数就可以实现 MySQL 数据库的连接函数语法格式如下
mysqli_connect( [string $host ini_get(“mysqli.default_host”) [, string $username ini_get(“mysqli.default_user”) [, string $password ini_get(“mysqli.default_pw”) [, string $dbname “” [, int $port ini_get(“mysqli.default_port”) [, string $socket ini_get(“mysqli.default_socket”) ]]]]]] )
参数说明如下
$host可选参数要连接的服务器。可以是主机名或者是 IP 地址$username可选参数登录所使用的 MySQL 用户名$password可选参数登录所用的密码$dbname可选参数执行查询时使用的默认数据库$port可选参数指定连接到 MySQL 服务器的端口号$socket可选参数指定 socket 或要使用的已命名 pipe这个参数在开发中很少用到。
另外需要注意的是mysqli_connect() 函数是 mysqli::__construct() 函数的别名所有使用对象 mysqli() 也可以实现连接数据库。
【示例】下面通过一个简单的代码实现连接数据库。
1) 面向过程风格的写法
?php$host localhost;$username root;$password root;$dbname test;$port 3306;$link mysqli\_connect($host,$username,$password,$dbname,$port); // 连接到数据库if($link){mysqli\_set\_charset($link,UTF-8); // 设置数据库字符集$sql select \* from user; // SQL 语句$result mysqli\_query($link, $sql); // 执行 SQL 语句并返回结果$data mysqli\_fetch\_all($result); // 从结果集中获取所有数据mysqli\_close($link);}else{die(数据库连接失败);}echo pre;print\_r($data);
?
2) 面向对象风格的写法
?php$host localhost;$username root;$password root;$dbname test;$mysql new Mysqli($host, $username, $password, $dbname);if($mysql - connect_errno){die(数据库连接失败.$mysql-connect\_errno);}else{$mysql - set\_charset(UTF-8); // 设置数据库字符集$sql select \* from user; // SQL 语句$result $mysql - query($sql);$data $result - fetch\_all();$mysql - close();}echo pre;print\_r($data);
?
运行结果如下
Array ( [0] Array ( [0] 1 [1] 张三 ) )
PHP mysqli_select_db()选择数据库
通过前面《mysqli_connect() 函数》的介绍我们知道对应数据库名称的参数是可以省略的如果省略该参数的话就需要我们在后面来指定一个默认的数据库。PHP 中可以使用 mysqli_select_db() 函数来指定一个默认数据库它和 MySQL 命令中的use dbname的功能相似函数的语法格式如下
面向对象风格的写法
mysqli::select_db(string $dbname)
其中$dbname 为指定的数据库名称
面向过程风格的写法
mysqli_select_db(mysqli $link, string $dbname)
其中
l
i
n
k
为
通
过
m
y
s
q
l
i
c
o
n
n
e
c
t
(
)
函
数
返
回
的
数
据
库
连
接 link 为通过 mysqli_connect() 函数返回的数据库连接
link为通过mysqliconnect()函数返回的数据库连接dbname 为指定的数据库名称。
函数执行成功会返回 TRUE执行失败则返回 FALSE。
【示例】使用 mysqli_select_db() 函数选择默认数据库
1) 面向对象风格的写法
?php$host localhost;$username root;$password root;$dbname test;$mysql new Mysqli($host, $username, $password);if($mysql - connect_errno){die(数据库连接失败.$mysql-connect\_errno);}else{$mysql - select\_db($dbname); // 选择名为 test 的数据库$sql select name,sex,age from user; // SQL 语句$result $mysql - query($sql); // 执行上面的 SQL 语句$data $result - fetch\_all();$mysql - close();}echo pre;print\_r($data);
?
2) 面向过程风格的写法
?php$host localhost;$username root;$password root;$dbname test;$link mysqli\_connect($host, $username, $password);if($link){mysqli\_select\_db($link, $dbname); // 选择名为 test 的数据库$sql select name,sex,age from user; // SQL 语句$result mysqli\_query($link, $sql); // 执行 SQL 语句并返回结果$data mysqli\_fetch\_all($result); // 从结果集中获取所有数据mysqli\_close($link);}else{echo 数据库连接失败;}echo pre;print\_r($data);
?
运行结果如下
Array ( [0] Array ( [0] 张三 [1] 男 [2] 12 ) [1] Array ( [0] 李四 [1] 男 [2] 11 ) [2] Array ( [0] 王五 [1] 男 [2] 13 ) [3] Array ( [0] 小明 [1] 女 [2] 12 ) )
通常我们可以将数据库连接和选择默认数据库的过程写在一个单独的 PHP 脚本文件中。在其他需要对数据库操作的 PHP 脚本中只要使用 require() 或 include() 等函数将该文件包含进来即可不需要再重复编写连接数据库的代码了。
这样做不仅可以提高开发效率更重要的是当数据库的用户名和密码需要变化时只需要更改这一个文件即可所有使用该文件的 PHP 脚本都是使用新用户与数据库服务器建立的连接。
PHP mysqli_query()执行SQL语句
成功选择好 MySQL 数据库后接下来就可以对所选数据库中的数据表进行查询、更改以及删除等操作PHP 中我们使用 mysqli_query() 函数就可以实现上述的所有操作函数的语法格式如下
面向对象风格的写法
mysqli::query( string $query [, int $resultmode MYSQLI_STORE_RESULT ] )
参数说明
$query要执行的 SQL 语句$resultmode可选参数用来修改函数的行为。可以是下列值的任意一个 MYSQLI_USE_RESULT如果需要查询大量数据使用这个MYSQLI_STORE_RESULT默认值。
面向过程风格的写法
mysqli_query( mysqli $link , string $query [, int $resultmode MYSQLI_STORE_RESULT ] )
参数说明
$link表示由 mysqli_connect() 函数返回的数据库连接$query要执行的 SQL 语句$resultmode可选参数用来修改函数的行为。可以是下列值的任意一个 MYSQLI_USE_RESULT如果需要查询大量数据使用这个MYSQLI_STORE_RESULT默认值。
提示函数执行失败时会返回 FALSE而通过 mysqli_query() 成功执行 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询时则会返回一个 mysqli_result 对象其他查询执行成功则返回 TRUE。
演示之前我们先在数据表中添加一些数据如下所示
mysql select * from user; ±—±-------±-----±----- | id | name | age | sex | ±—±-------±-----±----- | 1 | 张三 | 12 | 男 | | 2 | 李四 | 11 | 男 | | 3 | 王五 | 13 | 男 | | 4 | 小明 | 12 | 女 | ±—±-------±-----±----- 4 rows in set (0.00 sec)
【示例】使用 mysqli_query() 函数执行指定的 SQL 语句。
1) 面向对象风格的写法
?php$host localhost;$username root;$password root;$dbname test;$mysql new Mysqli($host, $username, $password, $dbname);if($mysql - connect_errno){die(数据库连接失败.$mysql-connect\_errno);}else{$mysql - set\_charset(UTF-8); // 设置数据库字符集$sql select name,sex,age from user; // SQL 语句$result $mysql - query($sql); // 执行上面的 SQL 语句$data $result - fetch\_all();$mysql - close();}echo pre;print\_r($data);
?
2) 面向过程风格的写法
?php$host localhost;$username root;$password root;$dbname test;$link mysqli\_connect($host, $username, $password, $dbname);if($link){$sql select name,sex,age from user; // SQL 语句$result mysqli\_query($link, $sql); // 执行 SQL 语句并返回结果$data mysqli\_fetch\_all($result); // 从结果集中获取所有数据mysqli\_close($link);}else{echo 数据库连接失败;}echo pre;print\_r($data);
?
运行结果如下
Array ( [0] Array ( [0] 张三 [1] 男 [2] 12 ) [1] Array ( [0] 李四 [1] 男 [2] 11 ) [2] Array ( [0] 王五 [1] 男 [2] 13 ) [3] Array ( [0] 小明 [1] 女 [2] 12 ) )
PHP获取SQL的查询结果
前面我们介绍了如何执行一条 SQL 语句也就是调用《mysqli_query() 函数》。当我们执行一条 SELECT 命令的 SQL 语句时mysqli_query() 函数会返回一个 PHP 资源的引用指针结果集也就是这条 SQL 语句的查询结果。通常我们需要对这一结果集进行处理才能得到我们想要的信息。
在 PHP 中处理数据结果集的函数主要有以下几个
mysqli_fetch_row()从结果集中取得一行并以索引数组的形式返回mysqli_fetch_assoc()从结果集中取得一行并以关联数组的形式返回mysqli_fetch_array()从结果集中取得一行并以关联数组、索引数组或二者兼有的形式返回mysqli_fetch_all()从结果集中取得所有行并以关联数组、索引数组或二者兼有的形式返回mysqli_fetch_object()从结果集中取得一行并以对象的形式返回。
1、mysqli_fetch_row() 函数
mysqli_fetch_row() 函数可以从结果集中取得一行并以索引数组的形式返回其语法格式如下
面向对象风格的写法
mysqli_result::fetch_row()
其中 mysqli_result 为使用 mysqli_query() 函数获取的结果集。
面向过程风格的写法
mysqli_fetch_row(mysqli_result $result)
其中 $result 为使用 mysqli_query() 函数获取的结果集。
【示例】使用 mysqli_fetch_row() 函数获取结果集中的一条数据。
?php$host localhost;$username root;$password root;$dbname test;$mysql new Mysqli($host, $username, $password, $dbname);if($mysql - connect_errno){die(数据库连接失败.$mysql-connect\_errno);}else{$sql select name,sex,age from user; // SQL 语句$result $mysql - query($sql); // 执行上面的 SQL 语句$data $result - fetch\_row();$mysql - close();}echo pre;print\_r($data);
?
运行结果如下
Array ( [0] 张三 [1] 男 [2] 12 )
2、mysqli_fetch_assoc() 函数
mysqli_fetch_assoc() 函数可以从结果集中取得一行并以关联数组的形式返回其语法格式如下
面向对象风格的写法
mysqli_result::fetch_assoc()
其中 mysqli_result 为使用 mysqli_query() 函数获取的结果集。
面向过程风格的写法
mysqli_fetch_assoc(mysqli_result $result)
其中 $result 为使用 mysqli_query() 函数获取的结果集。
【示例】使用 mysqli_fetch_assoc() 函数获取结果集中的一条数据。
?php$host localhost;$username root;$password root;$dbname test;$link mysqli\_connect($host, $username, $password, $dbname);if($link){$sql select name,sex,age from user; // SQL 语句$result mysqli\_query($link, $sql); // 执行 SQL 语句并返回结果$data mysqli\_fetch\_assoc($result); // 从结果集中获取一条数据mysqli\_close($link);}else{echo 数据库连接失败;}echo pre;print\_r($data);
?
运行结果如下
Array ( [name] 张三 [sex] 男 [age] 12 )
3、mysqli_fetch_array() 函数
mysqli_fetch_array() 函数可以从结果集中取得一行并根据参数以关联数组、索引数组或二者兼有的形式返回函数的语法格式如下
面向对象风格的写法
mysqli_result::fetch_array([int $resulttype MYSQLI_BOTH])
其中 mysqli_result 为使用 mysqli_query() 函数获取的结果集$resulttype 为可选参数它是一个常量用来设定返回值的类型它的取值可以是 MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。
面向过程风格的写法
mysqli_fetch_array(mysqli_result $result[, int $resulttype MYSQLI_BOTH])
其中
r
e
s
u
l
t
为
使
用
m
y
s
q
l
i
q
u
e
r
y
(
)
函
数
获
取
的
结
果
集 result 为使用 mysqli_query() 函数获取的结果集
result为使用mysqliquery()函数获取的结果集resulttype 为可选参数它是一个常量用来设定返回值的类型它的取值可以是 MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。
【示例】使用 mysqli_fetch_array() 函数获取结果集中的数据。
?php$host localhost;$username root;$password root;$dbname test;$link mysqli\_connect($host, $username, $password, $dbname);if($link){$sql select name,sex,age from user; // SQL 语句$result mysqli\_query($link, $sql); // 执行 SQL 语句并返回结果$data mysqli\_fetch\_array($result, MYSQLI\_ASSOC);// 从结果集中获取所有数据mysqli\_close($link);}else{echo 数据库连接失败;}echo pre;print\_r($data);
?
运行结果如下
Array ( [name] 张三 [sex] 男 [age] 12 )
4、mysqli_fetch_all() 函数
mysqli_fetch_all() 函数可以获取结果集中的所有数据并根据参数以关联数组、索引数组或二者兼有的形式返回函数的语法格式如下
面向对象风格的写法
mysqli_result::fetch_all([int $resulttype MYSQLI_NUM])
其中 mysqli_result 为使用 mysqli_query() 函数获取的结果集$resulttype 为可选参数它是一个常量用来设定返回值的类型它的取值可以是 MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。
面向过程风格的写法
mysqli_fetch_all(mysqli_result $result [, int $resulttype MYSQLI_NUM])
其中
r
e
s
u
l
t
为
使
用
m
y
s
q
l
i
q
u
e
r
y
(
总结
这个月马上就又要过去了还在找工作的小伙伴要做好准备了小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案希望能帮助到大家 ‘test’; l i n k m y s q l i _ c o n n e c t ( link mysqli\_connect( linkmysqli_connect(host, $username, $password, d b n a m e ) ; i f ( dbname); if( dbname);if(link){ $sql ‘select name,sex,age from user’; // SQL 语句 r e s u l t m y s q l i _ q u e r y ( result mysqli\_query( resultmysqli_query(link, $sql); // 执行 SQL 语句并返回结果 d a t a m y s q l i _ f e t c h _ a r r a y ( data mysqli\_fetch\_array( datamysqli_fetch_array(result, MYSQLI_ASSOC);// 从结果集中获取所有数据 mysqli_close(KaTeX parse error: Expected EOF, got } at position 12: link); }̲else{ e…data); ? 运行结果如下Array ( [name] 张三 [sex] 男 [age] 12 )### 4、mysqli\_fetch\_all() 函数mysqli\_fetch\_all() 函数可以获取结果集中的所有数据并根据参数以关联数组、索引数组或二者兼有的形式返回函数的语法格式如下##### 面向对象风格的写法mysqli\_result::fetch\_all([int $resulttype MYSQLI\_NUM])其中 mysqli\_result 为使用 mysqli\_query() 函数获取的结果集$resulttype 为可选参数它是一个常量用来设定返回值的类型它的取值可以是 MYSQLI\_ASSOC、MYSQLI\_NUM 或 MYSQLI\_BOTH。##### 面向过程风格的写法mysqli\_fetch\_all(mysqli\_result $result [, int $resulttype MYSQLI\_NUM])其中 r e s u l t 为 使 用 m y s q l i q u e r y ( ## 总结这个月马上就又要过去了还在找工作的小伙伴要做好准备了小编整理了大厂java程序员面试涉及到的绝大部分**面试题及答案**希望能帮助到大家[外链图片转存中...(img-IyyXSlTE-1718775455805)][外链图片转存中...(img-AICS0BEQ-1718775455806)]