LAMP 技术简介(4)
通过 PHP 访问数据库
在 PHP 中连接到 MySQL
创建好一个表之后,便可以将 MySQL 连到 PHP。执行这个过程的第一步是建立到 MySQL 服务器的一个连接。当建立好这个连接后,便可以与服务器进行交互。
首先,创建 4 个变量,用于存放关于数据库的位置以及如何连接到数据库的详细信息。这 4 个变量分别为 db_host
、db_username
、db_password
和 db_database
。注意,PHP 中的变量以一个美元符号($)开头:
$db_host = "localhost"; $db_username = "bob"; $db_password = "sum65for!"; $db_database = "customers"; |
这 4 个变量包含关于数据库连接的重要信息。第一个变量是 $db_host
,用于表明 MySQL 服务器的位置(除非是在单独一台联网的计算机上运行该服务器,否则这个位置很可能是本地主机)。$db_username
和 $db_password
变量包含用于连接的认证信息(在这个例子中,就是用户名 bob 和密码 sum65for!)。最后,还需要指出要处理 MySQL 服务器上的哪个数据库;$db_database
变量将这个数据库指定为 customers 数据库。
|
执行连接
记住,这里还没有真正连接到数据库;以上代码只是创建了一些包含相关信息的变量。为了连接到数据库,可以运行以下两行代码:
$db = mysql_connect($db_host, $db_username, $db_password); mysql_select_db($db_database, $db); |
第一行代码真正创建连接。它使用 mysql_connect
函数将主机、用户名和密码信息从变量传递到服务器。连接的结果被存储在 $db
变量中。然后,在第二行代码中,通过 mysql_select_db
函数表明要使用服务器上的哪个数据库。为此,传递包含所选数据库的 $db_database
变量,并指出要从中选择那个数据库的连接($db
)。当输入这两行代码后,应该可以得到一个成功的连接。
|
执行查询
创建了一个成功的连接之后,接下来的步骤是从数据库中查询一些信息,以便利用这些信息。在这个项目中,需要从数据库中获取客户信息,并将该信息显示在屏幕上。
执行查询的第一步是创建 SQL。在刚才编写的数据库连接代码的下方,添加下面这行代码:
$sql = "SELECT * FROM customers;"; |
这行代码从 customers 表中选择所有值。可以这样从左至右读这个命令:从(FROM
)customers 表(customers
)中选择(SELECT
)所有值(*
),然后结束查询(;
)。同样,在脚本中的这个地方,还并没有真正执行查询:上述代码只是将 SQL 查询放入一个变量中。为了真正将该查询发送到数据库,可以使用以下命令:
$result = mysql_query($sql); |
这个命令的 mysql_query
函数将 $sql
变量发送到服务器。然后,查询的结果(包含查询所返回结果的一个信息集合)被存储在 $result
变量中。存储在 $result
变量中的实际数据称作一个记录集,它提供一个充满信息的容器,这些信息都是查询的结果。
|
键-值对和数组
当引用记录集中的数据时,是以键-值对 的形式引用它的。这个概念很重要,在从数据库中获取数据之前,我将花一点时间讨论一下这些键-值对。
键-值对的思想是有一系列的键,每个键有一个值与之相关联。例如,假设要存储一系列的偏好选择,并将 blue
值与 colour
键相关联,将 10
值与 number
键相关联。那么,在使用这些值时,如果在数组中查找 colour
,那么就希望返回 blue
。可以用 array()
函数设置这种类型和其他任何类型的数组:
$array = array("colour" => "blue", "number" => 10); |
这行代码将 colour
元素设置为 blue
值,并将 number
元素设置为 10
值。现在可以用下面这行代码来引用 colour
键:
echo $array['colour']; |
当运行这行代码时,可以看到 blue
是如何被输出的,这为在键-值对中存储关于特定事物的信息提供了一种简便方法。这种设置使得数组非常适合存储配置信息和偏好设置之类的细节。
如果要用 foreach
迭代整个数组,可以使用以下代码:
foreach($array as $key => $value) {echo $key . " contains: " . $value . "<br />"; } |
这个例子将用于访问键的变量命名为 $key
,而将用于访问值的变量命名为 $value
。然后,在 echo
语句中将所有这些信息粘合在一起,该语句将键、文本 contains、值和一个 <br />
标记串接起来,其中的 <br />
标记充当一个回车符,以便将每个条目放在一个新行上。
|
从数据库中获取客户信息
那么,这个数组理论与从数据库中获取客户信息有什么联系呢?可以使用一个数组存储每一行的细节,并且将数据存储在一系列的键-值对中。通过这种方法,如果要获得 forename 字段的内容,只需在数组中查找 forename
键。
为了迭代记录集中的每一行,可以使用以下例子:
while($row = mysql_fetch_assoc($result)) {echo $row['forename'] . " " . $row['surname']; } |
然后应该可以看到输出的记录,如图 5 所示。
图 5. 显示 customers 表的内容
while
循环的作用是,当 while
语句旁边的括号中的值为 true 时,不断重复 {
与 }
之间的代码。在这个例子中,括号中的条件为 $row = mysql_fetch_assoc($result)
。这一行获取 $result
中的结果集,并将它传递给 mysql_fetch_assoc
函数,以便获取第一行记录,并将它放入到一个名为 $row
的关联数组中。当把这一行代码放入 while()
循环条件时,该循环将迭代记录集中的每一行,并将每一行放入 $row
关联数组。这个功能便于用相同的数组名($row
)访问记录集中的所有数据。
while()
循环中的代码通过引用 $row
数组中的字段名称,简单地将每一行的内容显示在页面上。例如,$row['forename']
显示数据库中每一行的 forename 字段的内容。在这个例子中,可以看到如何将 forename 字段、一个空格和 surname 字段串接起来,这行代码将导致屏幕上显示表中的姓名。
|
串接
PHP 编程中一个最基本的概念 —— 也是 PHP 新用户最容易犯错误的一个概念 —— 是串接(concatenation)。该技术通过使用 .
符号将一个变量的内容与其他信息连接在一起。在下面的例子中,可以看到 .
如何将一些文本与 $name
变量连接在一起:
$name = "Bob Smith"; echo "Your name is " . $name; |
在上面的例子中,建议像这样串接字符串与变量,但实际上也不一定要这么做。可以将上面的代码改为下面这行代码:
echo "Your name is $name"; |
这行代码也许更容易理解,但是串接使得代码看上去更整洁。此外,对于非串接代码,大多数文本编辑器不能通过适当的语法突出显示,而且,对于数组必须使用串接。
|
|
微调 SQL
在第一个连接到 MySQL 的例子中,SQL 相当简单。SQL 也非常灵活。您很可能想搜索特定的记录,并以不同的方式对返回的数据排序,这些都可以在 SQL 中完成,因此 PHP 脚本基本上可以保持不变。
完 成该项任务的一个很好的地方就是 phpMyAdmin。如前所述,每当与 phpMyAdmin 交互时,为每个交互生成的 SQL 就会显示出来。在 phpMyAdmin 中,还可以运行任意 SQL 语句,以便探索 SQL 语言和尝试不同的查询。为此,单击 phpMyAdmin 界面左侧工具栏中的 SQL 窗口小图标。这时可以看到一个新的窗口(如果使用的是 Firefox,请确保其中的弹出窗口没有挡住这个窗口),在这个窗口中可以输入 SQL 查询。当添加了一个查询时,单击 Go。主界面窗口中的查询结果会随之更新。
|
|
执行不同类型的查询
即使是对于简单的 customers 表,也可以执行不同类型的查询来以不同方式返回信息。例如,如果只想要与特定客户 ID 相匹配的行,可以尝试以下查询:
SELECT * FROM customers WHERE id = 1; |
这个查询返回用户 id 为 1
的记录(这就是为什么每个表中要有一个惟一主键的原因)。也可以尝试下面的查询:
SELECT * FROM customers WHERE surname = "Curtis"; |
这个查询返回 surname 字段的值为 Curtis 的所有用户。如果有一个大型的 customers 数据库,那么您很可能想对返回的数据排序。为此,可以使用 ORDER BY 子句:
SELECT * FROM customers WHERE surname = "Smith" ORDER BY forename ASC; |
这个查询请求 surname 为 Smith 的所有记录,返回的结果根据 forename 字段按字母顺序排序。ASC
表示升序,也可以使用 DESC
表示降序。
LAMP 技术简介(4)相关推荐
- LAMP 技术简介(3)
创建 MySQL 数据库 phpMyAdmin 客户机 在 创建 Web 应用程序之前,必须首先创建用于存储客户信息的数据库.您将使用该数据库存储数据.显示数据等等.为了在应用程序中引入 MySQL ...
- Html5版本的全套股票行情图开源了,附带实现技术简介
Html5版本的全套股票行情图开源了,附带实现技术简介 - 玉开 - 博客园 Html5版本的全套股票行情图开源了,附带实现技术简介 请使用支持html5的浏览器查看,推荐使用google chrom ...
- 【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
文章目录 一." 字节码插桩 " 技术简介 二.AspectJ 插桩工具 三.ASM 插桩工具 一." 字节码插桩 " 技术简介 性能优化 , 插件化 , 热修 ...
- AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)
AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用).常用算法.经典案例之详细攻略(建议收藏) 目录 NLP是什么? 1.NLP前置技术解析 2.python中NLP技术相关库 3.NLP案例 ...
- java相关技术简介_java技术简介?
java技术简介? 关注:186 答案:3 信息版本:手机版 电脑版 解决时间 2021-01-17 11:41 提问者坟地里唱嗨歌 2021-01-17 01:04 java技术简介? 最佳答案 ...
- python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介
来源:TechWeb.com.cn Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以 ...
- Servlet技术简介与编写、编译Servlet程序
1.Servlet技术简介 Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的WEB服务器端编程技术,主要用于在WEB服务器端获得客户端的访问请求信息和动态生成 ...
- 3-docker 架构和底层技术简介
3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台. 提供了一个开发.打包.运行app的平台 把app和底层 infrastructure 隔离开来 根据上 ...
- [转] Windows完成端口与Linux epoll技术简介
Windows完成端口与Linux epoll技术简介 2008-01-03 16:18 WINDOWS完成端口编程1.基本概念 2.WINDOWS完成端口的特点 3.完成端口(Completion ...
最新文章
- Oracle的分区操持
- 光模块功能失效的原因有哪些?
- [教程]微信官方开源UI库-WeUI使用方法【申明:来源于网络】
- 万源之源之drupal7
- Python基本操作(三)标准运算符与赋值
- Codeforce - 1040B - Shashlik Cooking(水题)
- python 操作 word 文件
- 软件工程导论E-R图、盒图(N-S图)、PAD图
- JS中apply与call的用法
- Windows系统合并磁盘分区
- JS游戏——flappy bird
- 基于ROS_Arduino室内移动机器人SLAM实验测试
- 预测交通拥堵,TranSEC助力城市交通“智”变
- 基于eclipse的android项目实战—博学谷(新功能四)签到
- 【pyecharts数据可视化】python爬取去哪儿网景点数据,做交互式数据可视化
- spice 0.14.0添加新功能
- 快捷方式小盾牌如何取消
- python批量下载文件教程_超简单超详细python小文件、大文件、批量下载教程
- 女孩子转数据分析难吗?难在哪里?
- 演讲者该注意什么----读“2008中国软件技术英雄会上海站流水帐”的一点感受
热门文章
- jQuery超详细入门教程
- 【C语言】memcmp、memcpy、memmove、memset、memchr函数详解
- Kata Containers创始人:安全容器导论
- SAP FICO 成本对象控制解析
- CSS之控制所有p段落,首行缩进两个字符!...
- java的setquality值多少_java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)...
- 【论文精读】Quality evaluation-based iterative seam estimation for image stitching
- 用html和css制作钟表,使用HTML5和CSS3制作简单的钟表
- 108页《SpringBoot 学习笔记完整教程》PDF附下载
- Bandit:一款Python代码安全漏洞检测工具