>> [音乐播放]
道格·劳埃德：在我们的视频 关于Web开发的话题，
我们已经提到的概念 数据库几次，对不对？
所以数据库你 可能是熟悉的
说使用Microsoft Excel 或谷歌电子表格。
它实际上只是一个有组织的 设置表，行和列。
>> 而数据库是哪里 我们的网站商店
这一点很重要信息 为我们的网站能正常工作。
此外，一个非常常见的例子在这里 在存储用户名和密码
在数据库中，使得当 用户登录到我们的网站，
该数据库可被查询，看 如果该用户在数据库中存在。
如果是这样，检查 他们的密码是正确的。
而如果他们的密码是正确的， 那么，我们可以给他们任何网页
他们请求。
>> 所以，你很可能再次熟悉 这个想法从Excel或谷歌
电子表格。
我们有数据库， 表，行和列。
这就是真正的排序 基本集
这里分层分解。
因此，这里的Excel电子表格。
如果你曾经开了这 或其他类似的程序
你知道，这些这里有 rows-- 1，2，3，4，5，6，7。
这些都是列。
>> 也许到这里，虽然你可能 不使用此功能非常much--
我会放大in--我们 这一想法的片材。
因此，也许这些表，如果 我交替往复，
不同的表 存在于我的数据库。
如果我们继续这个例子所有 顺便说一下，这个数据库的名称
是书1。
也许我有第二册和第三册。
所以，每一个Excel文件是一个 数据库中，每个片是一个表，
每个表格里面我有 这一想法的行和列。
>> 那么，如何使用这个数据库的工作？
我如何获得它的信息？
那么有一个叫做语言SQL-- 我通常只是打电话Sequel--
它代表的是 结构化查询语言。
而且它是一种编程语言， 但它是一个相当有限编程
语言。
这不是很喜欢别人 我们已经合作过。
但这样做的目的 程序设计语言
是查询数据库，以 问一个数据库的信息，
找到一个信息 数据库，等等。
>> 我们在CS50--这是一个非常 共同的平台，这就是所谓的MySQL。
这就是我们在使用过程中使用的。
这是一个开放源码 平台建立
所谓关系型数据库 - 一个数据库，有效。
我们并不需要得到 太多细节
对什么是关系数据库。
但是，SQL语言 非常善于工作
与MySQL和其它类似 样式的关系数据库。
>> 而很多的安装 MySQL的来的东西
所谓的phpMyAdmin，这 是一个图形用户
interface--一个GUI--的 使得它多一点
用户友好的执行 数据库查询，
因为数据库不仅用于 由高级程序员，对吗？
有时有 这些小企业，
他们无法承受 聘请程序员的团队，
但他们仍然需要存储 在数据库中的信息。
>> 类似的phpMyAdmin 使得它很容易为​​别人
谁之前从未编程 拿起和熟悉如何
与数据库一起工作。
问题是，phpMyAdmin的，而 这是一个奇妙的工具，学习
有关数据库，它是手动的。
你将不得不登录 它与执行命令和类型
事情手动研究。
>> 而且，因为我们知道我们的 例如PHP的Web编程，
有做手工 在我们的网站上的东西，
如果我们想要一个充满活力，积极响应 网站，也许不是最好的方法。
我们希望找到一种方法， 也许是自动完成这一莫名其妙。
和SQL将使我们能够做到这一点。
所以，当我们要 开始使用SQL工作，
我们首先需要有一个 数据库一起工作。
创建一个数据库 一些你可能
会做的phpMyAdmin的，因为 你只需要做一次，
和语法这样做 很多更简单。
这是一个更容易做到这一点 在图形用户界面
不是打字它作为一个命令。
该命令可能会变得有些繁琐。
同样，在创建一个表可以 得到相当有点麻烦，以及。
所以像创建数据库 并创建一个表，你
大概只打算做once-- 每一次表，每一次数据库 -
它是确定做，在 图形界面。
在过程中 创建一个表，你会
还必须指定所有的 列，就可以在该表中。
什么样的信息做 要存储在表中？
也许用户的姓名和出生日期， 口令，用户ID号，也许
城市和国家，对不对？
>> 而对于每一次我们要添加一个用户 到数据库中，我们希望得到所有六个
的这些信息。
同时，我们也通过添加 行到表。
因此，我们首先创建一个数据库， 然后我们创建一个表。
作为创建的一部分 一个表中，我们被要求
指定每列 我们希望在此表中。
然后，当我们开始增加 信息到数据库
和查询数据库的更多 generally--不仅仅是增加，
但一切我们 do--我们会处理
与行的表，这是一个 从整组用户的信息。
>> 所以，每一个SQL列能够 保持一个特定数据类型的数据。
因此，我们的排序消除了这种 在PHP中的数据类型的想法，
但他们回到这里SQL。
而且有很多的数据类型。
这里的只有20人，但 它甚至不是所有的人。
因此，我们有一些理念，如INTs-- Integers--我们大概知道
该列可以容纳整数。
而有变化thereon-- SMALLINT，TINYINT，MEDIUMINT，BIGINT。
也许我们并不总是需要四个叮咬。
也许我们需要8个字节，所以我们 可以使用整数这些变化
要多一点空间，高效。
我们可以做的十进制数，我们 可以做浮点数。
这是非常相似的。
有一定的差异， 如果你愿意
想查找 SQL排序指导，你
可以看到轻微 区别是它们之间。
>> 也许我们要存储 关于日期和时间信息。
也许我们跟踪 当用户加入了我们的网站，
所以，也许我们要 有一列的
日期时间或时间戳 表示当用户实际上
注册。
我们可以做的几何形状和线串。
这实际上是很酷。
我们可以绘制出 使用地理区域
GIS坐标绘制出的区域。
所以实际上可以存储排序 在一个SQL列信息。
>> 文本是文本的只是巨大的斑点，也许。
枚举是一种有趣的。
他们实际上存在于C.我们不 谈论他们，因为他们不
非常常用，至少CS50。
但它是一个枚举数据类型， 能够保持限制值。
>> 一个真正很好的例子是 创建一个枚举，其中七
可能的值是星期日，星期一， 周二，周三，周四，周五，
周六，对不对？
对这些数据类型的天 周不存在，
但我们可以创建一个 枚举数据类型，
这列永远只能容纳 其中的一个七个可能的值。
我们列举所有 的可能值。
>> 然后我们有CHAR和VARCHAR， 我已经上色这些绿色
因为我们实际上 要采取第二
谈论的区别 这两件事情之间。
所以CHAR，不像C，其中 CHAR是单个字符，
SQL中的CHAR指 一个固定长度的字符串。
而当我们创建这个 专栏中，我们实际上
可以指定字符串的长度。
>> 所以在这个例子中， 我们可以说CHAR（10）。
这意味着，每 该列的元件
将包括10字节的信息。
没有更多，不会少。
因此，如果我们试图把一个15 位或15字符元素
或值此列， 我们只拿到了前10。
如果我们把在两 字符长的值，
我们将有两个 字符，然后8空叮咬。
我们永远不会比这更有效。
>> 一个varchar是一种像 我们一串概念
我们已经很熟悉 从C或从PHP。
这是一个可变长度的字符串。
当你创建 这个专栏中，你只要
指定的最大可能长度。
因此，也许99或通常255。
这将是最大长度。
所以，如果我们存储 15文字串，
我们将使用15个字节，也许16 字节的空终止。
如果我们存储 三个字符的字符串，
我们将使用三个或四个字节。
但是，我们不会使用完整的99。
>> 那么，为什么我们兼得？
那么，如果我们需要弄清楚如何 长的东西是一个VARCHAR，
我们有一种迭代的 通过它就像我们用C做
并找出它停止。
而如果我们知道这一切 在此列是10个字节，也许
我们知道的信息，我们可以跳 10字节，10字节，10字节，10字节，
始终找不到了 开头的字符串。
>> 因此，我们可能有一些 浪费的空间用CHAR，
但也许有一个贸易 关闭有更好的速度
在导航数据库。
但也许我们想要的 VARCHAR类型的灵活性
而不是having--如果我们的CHAR 是255的，但我们的大多数用户
只输入三个或四个字节 的信息价值或三个或四个
字符的信息价值。
>> 但是，一些用户使用 整个255，也许
VARCHAR会比较合适那里。
这有点交易的关闭， 一般为了CS50的，
你不必太担心 无论您使用的是CHAR或VARCHAR。
但在现实世界中，这些东西 做的事，因为所有这些列
占用实际的物理空间。
和物理空间，在 现实世界中，是有溢价。
>> 所以有其他考虑 你建立一个表时，
是选择一列是 什么叫做一个主键。
和主键是一列 其中，每一个值是唯一的。
这意味着，你可以很容易地 挑选出的单行只是看
在该行的主键。
因此，例如，你 通常，与用户，
不想让两个用户谁 具有相同的用户ID号。
所以，也许你有 大量的信息，
也许两个用户 具有相同的name--
你有约翰·史密斯和约翰·史密斯。
这不一定是一个问题， 因为有多人
在名为约翰·史密斯的世界。
但是，我们只有一个用户ID号 10，一个用户ID号11，12，13。
我们没有两个用户 用相同的号码，
所以也许用户ID号 将是一个好主键。
>> 我们没有任何重复， 我们现在可以唯一地
只是识别每一行 通过查看该列。
选择主键实际上可以 进行后续表操作
轻松很多，因为你可以利用 一个事实，即某些行会
是唯一的，或者某些列 你的数据库或表
将是唯一的挑 出特定的行。
>> 你也可以有一个联合主 密钥，你会发现机会
使用，这仅仅是一个 两列的组合，其
保证是唯一的。
因此，也许你有一个 列的AS和B，
一列这是一个，两个， 三，但你永远只
有一个单一的A 1，单 A2，等等等等。
但是，你可能有一个B2，一 C 2，或A1，A2，A3，A4。
所以，你可能有多个如，多 烧烤，多的，多三三两两，
但你永远只能有一个 单A1，B2，C3等。
所以，正如我所说的，SQL是一种 编程语言，
但它有一个相当有限的词汇。
这是不是很广阔的 C和PHP等语言
我们在谈的过程中。
它是更详细的一 语言比我们
要在此谈谈 视频，因为在这个视频
我们要谈 四则运算我们
可以对表执行。
>> 还有比这更多。
我们可以做的比这更多， 但我们的目的，
我们通常将要使用 短短四年operations--插入，
选择，更新和删除。
你大概可以直观地猜测 什么所有这四个事情要做。
但是，我们将进入一个位 细节上的每一个。
>> 所以为便于这 视频，让我们假设
我们有以下两种 表在单个数据库中。
我们有有一个表称为用户 4 columns-- ID号，用户名，
密码和全名。
我们有一个第二 表在同一数据库中
叫妈妈，只是存储信息 关于用户名和母亲。
因此，对于所有的实施例 在这段视频中，我们将
使用此数据库并 后续更新它。
因此，让我们说，我们要 信息添加到表中。
这就是插入操作做什么。
在解释所有 这些命令，我​​要去
给你一个总体框架来使用。
因为基本上，查询 打算看非常相似，
我们只是要改变 略微不同的信息
做不同的事情与表。
>> 所以对于INSERT，骨架 看起来有点像这样。
我们要插入到 一个特定的表。
然后，我们有一个开放的括号 和列的列表
我们希望把值放入。
关闭括号中， 下面的值，然后
再次，我们列出的值 我们希望把在表中。
>> 这所以一个例子 将是如下。
我想插入到表 用户以下columns--
用户名，密码和全名。
因此，一个新行，其中我把 在这三列，我们很
打算把在值 纽曼，USMAIL，和纽曼。
因此，在这种情况下，我 把小写纽曼
入用户名栏，密码 USMAIL，并全称资本ñ
纽曼进入全名列。
>> 因此，这里就是数据库 看起来像以前一样。
下面是用户表上 顶级前看着我们这样做等。
当我们执行这个 查询，我们得到这个。
我们增加了一个新行到表中。
但请注意这样一件事 我没有具体说明，
但不知何故，我已经有了一个值 对，这就是这12个就在这里。
我并没有说我想 把ID号在那里。
我希望把用户名， 密码，全称。
而我做了，这很好。
>> 但我也得到了这个12。
为什么我得到这12？
嗯，事实证明， 当你定义
这将是一列你 主键，通常是，
就像我说的，一个ID号。
这并不一定总是 将是一个ID号码，
但它通常是一个好主意 是某种整数值。
你必须在phpMyAdmin的选择 你创建数据库时
或者你的表设置 列自动递增。
>> 这是一个非常好的主意时， 你有一个主键的工作，
因为你想每个值 该列中是唯一的。
如果你忘记指定 它为一个以上的人，
你现在有一个情况 该列不再是唯一的。
你有两个空格，这样你就可以没有 较长的唯一标识一个column--
或者你可以不再唯一 确定根据该列一行。
它失去了它的所有 值作为主键。
>> 所以显然我做了什么 这里被配置的用户ID
列自动递增，使每个 时间我想补充信息表，
它会自动给我 对于主键的值。
所以，我永远也不会忘记这样做，因为 数据库会为我做的。
所以这是一种很好的。
所以这就是为什么我们得到 12在那里，因为我
设置列设置为自动递增。
如果我加别人 这将会是13，如果我加入
人家这将会是14，依此类推。
>> 因此，让我们只是做一个更多的插入。
我们会插入到妈妈表中， 特别是，用户名和母
列，值 克莱默和巴布斯克雷默。
因此，我们以前有这个。
当我们执行该 SQL查询，我们有这个。
我们增加了克莱默和巴布斯 克莱默向妈妈表。
>> 所以这是插入。
选择是我们用它来提取 从表中的信息。
因此，这是我们如何得到 信息从数据库中。
所以SELECT命令都将是 非常经常用于编程。
一般framework--的 普通的骨架看起来是这样的。
选择一组列 一个表，然后任选
你可以指定一个condition--或 我们通常所说的谓语，
通常我们在SQL中使用的术语。
>> 但它基本上是什么 你要特别行获得。
如果你想要的，而不是获取 一切，缩小它，
这是在那里你会做到这一点。
然后选择性地，你也可以 命令由一个特定的列。
因此，也许你想拥有的东西排序 按字母顺序的基础上一列
按字母顺序或基于另一个。
>> 再次，WHERE和ORDER BY是可选的。
但是，他们很可能会 useful--特别
哪里会是有益的 缩小让你不
让你的整个数据库背部和 必须处理它，你只得到
它的作品，你所关心的。
因此，举例来说，我可能要选择 从用户的ID号和全名。
所以，什么才是这个样子呢？
因此，这里是我的用户表。
我想选择IDNUM 和全名的用户。
我该怎么走？
我要得到这一点。
我并没有缩小它，所以我 获得的ID号的每一行
而我得到的全部 从每列名。
>> 好。
如果我要选择密码 从用户WHERE--所以现在
我加入一个条件，一个predicate-- 其中IDNUM小于12。
因此，这里是我的数据库再次， 我的用户表的顶部。
我该怎么得到，如果我想 选择信息，密码，
其中用户ID或IDNUM小于12？
我要得到这 信息反馈，对不对？
它发生IDNUM是10以下， 超过12，ID号11小于12。
我得到的密码，这些行。
这就是我要的。
那这个呢？
如果我要选择从星 妈妈表其中username等于杰里？
OK，选择明星是特 排序外卡的所谓
我们用它来搞定一切。
所以他们说选择 用户名逗号的母亲，这
碰巧是仅 两列此表，
我可以选择星级 并得到一切
其中，用户名等于杰里。
所以这就是我会得到 如果我做了特定的查询。
>> 现在，数据库 伟大的，因为他们允许
我们也许是组织信息 多一点效率比我们
否则可能会。
我们并不一定存储 信息各相关件
大约在同一表的用户。
我们有两个表存在。
>> 我们需要存储 每个人的母亲的名字，
也许我们没有社会保障 数，我们有他们的出生日期。
这并不总是需要 是在同一个表。
只要我们可以定义 在tables--之间的关系
而这也正是这关系 哪种数据库术语起源
进入play--只要我们可以定义 表之间的关系，
之类的，我们可以划分 或抽象事物的方式，
在这里我们只有 真正重要的信息
我们关心用户的表。
然后我们有辅助信息 在其他表或额外的信息
我们可以回到连接到主 用户表中的某个特定的方式。
>> 所以在这里，我们有这两个表，但 有它们之间的关系，
对？
这似乎是用户名 可能是什么
中存在之间的共同 这两个不同的表。
那么，如果我们现在有 的情况下，我们
希望从中获取用户的全名 用户的表，和他们的母亲
从母亲表名？
我们没有办法让 那样子，对不对？
有不包含单个表 双方的全名和母亲的名字。
我们没有这个选项 从我们到目前为止看到的。
>> 因此，我们就来介绍 一个JOIN的想法。
并加入可能 最complex--
这真是最复杂的操作 我们要谈的视频。
他们是有点复杂， 但一旦你得到了它的窍门，
他们实际上是不是太糟糕。
这只是一个选择的一个特例。
我们要选择一组 加入从表中的列
在一些谓词第二个表。
>> 在这种情况下，考虑一下像this-- 表一是一圈过来，
表二是另一个圈子在这里。
并说明上游部分 在中间，它的
有点像，如果你认为 关于作为一个维恩图，是什么
他们有什么共同点？
我们想链接这两个表 根据他们的共同点
创造这个假设的表 这是两人在一起的合并。
所以我们会看到这一点的 例如，也许这会帮助
它清除掉一点点。
因此，也许你想选择 user.fullname和moms.mother
从用户的加入，在 在任何情况下妈妈表
其中username列 是它们之间的相同。
这是一个新的 语法在这里，这个用户。
和妈妈..
如果我做多个表 在一起，我可以指定一个表。
我可以在特定的区别 上在最底层那里。
我可以区分用户名 用户表列
从的username列 妈妈表，它是otherwise--
如果我们刚才说的用户名等于 用户名，并没有真正
意味着什么。
我们想这样做，他们匹配。
>> 所以，我可以指定表和 在壳体的情况列名
哪里会不清楚 我在说什么。
所以，这就是我做的有我 从这个表说此列，
而且是非常明确的。
所以，再一次，我选择 全名和母亲的名字
从用户表连接在一起 在任何情况下的妈妈表
在那里他们共享column-- 它们共享该用户名的概念。
>> 因此，这里是我们以前的表。
这是我们的国家 数据库作为它存在现在。
我们提取信息 这是开始。
这是新的表格，我们要去 创建这些结合在一起。
同时注意我们不突出 纽曼的行中的用户的表，
我们不是在突出 克莱默的行中的妈妈表
因为没有一个存在于 无论sets--两个表。
>> 这是仅有一个共同的信息 它们之间是杰里的两个表中
和gcostanza既是表。
所以，当我们在SQL JOIN，我们 get--我们做真正得到这一点。
这有点一个临时变量。
这就像一个假设 合并这两个表中。
实际上，我们得到的东西 这样，在
我们在表合并在一起 它们在共同的信息。
>> 所以请注意users.username 和moms.username列，
它是完全一样的。
这是信息 是来自用户的一致
表和妈妈表。
所以，我们合并在一起。
我们丢弃的克莱默，因为他 在用户表中不存在，
我们抛弃纽曼，因为 他没有在母亲表中存在。
因此，这是假设合并 使用SELECT的JOIN操作。
>> 然后，我们正在寻找的 用户的全名和用户的妈妈，
因此，这是信息 我们会从整个查询
我们用SELECT进行。
因此，我们加入了表一起 我们提取这两列，
所以，这就是我们会得到。
但是SQL连接是一种复杂的。
你可能不会做他们太多， 但只是有骨架的一些想法
你可以用它来合并两个 表如果你一起需要。
最后两个是一 简单一点我保证。
所以在更新，我们可以使用UPDATE 改变表中的信息。
一般格式是更新一些 表中，设置一些列的一些值
WHERE一些谓词是满意的。
因此，例如，我们可能要 更新用户表
并设置密码亚达 亚达，其中ID号是10。
>> 因此，在这种情况下，我们 更新用户表。
ID号是10，用于 那里，第一行中，
我们要更新 密码内容十分重要。
所以这是会发生什么。
这是非常简单的，对不对？
这只是一个很简单的 修改该表。
>> DELETE是我们用来操作 从表中删除的信息。
DELETE FROM表WHERE 一些谓词是满意的。
我们要从中删除 用户表例如
其中，用户名是纽曼。
你可能已经猜到了什么事情 在这里发生之后，我们执行的SQL
查询，纽曼走了从表中。
>> 因此，所有这些操作，因为我已经说过了， 是很容易做到在phpMyAdmin。
这是一个非常友好的用户界面。
但它确实需要手动操作。
我们不想聘请手动操作。
我们希望我们的节目 做到这一点对我们来说，对不对？
因此，我们可能想要做的 这种编程方式。
我们希望将SQL和有 别的东西，为我们做到这一点。
>> 但是，我们已经看到，它允许 我们以编程方式做一些事情？
我们已经看到了PHP的，对不对？
它介绍了一些 动力到我们的节目。
所以幸运的是，SQL和 PHP玩的很漂亮起来。
有一个在PHP函数 称为查询，它都可以使用。
你可以通过为 参数或参数
查询一个SQL查询 您想执行。
和PHP会做以您的名义。
>> 所以，你已经接通后 用PHP数据库，
有两大初选你这样做。
有一种叫做MySQLi的 而一些所谓的PDO。
我们不会进入一个巨大的 大量的细节那里。
在CS50，我们使用PDO。
您已经连接后 你的数据库，
然后可以进行查询数据库 通过把查询作为参数
到PHP函数。
当你这样做，你存储 在关联数组结果集。
>> 而且我们知道如何一起工作 关联数组在PHP。
所以，我可能会说 像this-- $ results--
这是在PHP--等于查询。
和然后把里面的 查询功能参数
那我传递查询 看起来像SQL。
而事实上这是SQL。
这是查询字符串，我会 喜欢在我的数据库中执行。
>> 因此红色，这是PHP。
这是SQL，我很 纳入PHP通过
它的参数，查询功能。
我想从选择全名 其中，用户ID号等于10。
然后，也许以后我做到了这一点， 我可能会说这样的事情。
我想打印出来的 消息谢谢登录。
>> 我希望它interpolate--我想 插值$结果全名。
所以，这就是我与该是如何工作的 我回来关联数组。
$结果全称会 基本上结束了打印输出，
感谢登录，杰里宋飞。
这是全名 其中，IDNUM等于10。
>> 所以我做的 是我now--我存储
我的查询，我的查询结果 并导致一个关联数组，
和全名是名 在专栏中，我渐渐的。
所以这是我的钥匙插入结果 我想关联数组。
所以感谢登录，$结果， 全名会打印出来，将继续坚持
就在这些花间 牙套，杰里宋飞。
我会想打印出的信息 感谢您登录杰里宋飞。
>> 现在，我们可能不希望辛苦 代码之类的东西在，对吧？
我们可能想要做类似打印 f，其中我们可以代替，也许
收集不同的信息， 或者有查询过程
不同的信息。
因此查询时，查询功能有 排序换人的这一概念
非常相似的打印˚F百分之小号 和百分比C，是问号。
>> 我们可以使用问题 标志非常类似
打印f以替代变量。
因此，也许你的用户登录前， 和保存他们的用户ID号
在$的PHP超_session 全球性的密钥ID。
他们登录因此，也许以后， 你设置$ _SESSION ID等于10，
从实例推断 我们只是在一秒钟前看到的。
>> 所以，当我们真正执行 此查询的结果现在，
它会插上10，或任何 在$ _SESSION ID值。
所以，让我们来 有点更有活力。
我们不是硬编码了的东西。
我们保存信息 某处，然后
我们可以再次使用这些信息来 排序概括了我们想做的事情，
和公正的插件和变化 我们网页的行为
基于什么用户的ID号码 实际上，他们已经登录后。
它也可以，不过， 您的结果集
可能包括多个行。
在这种情况下，你有 arrays--的阵列
关联数组的数组。
而你只需要遍历它。
而且我们知道如何遍历 通过在PHP中的数组，对不对？
因此，这里可能是最 我们到目前为止看到的复杂的东西。
它实际上是把 三种语言在一起。
>> 在这里，在红，这是一些HTML。
我显然starting--这是 一些HTML，我有一个片段。
我开始一个新的段落 电视的宋飞的妈妈说。
然后随即 我开始的表。
并在那之后，我 有一些PHP的，对不对？
我有这一切的PHP代码在那里。
我显然会进行查询。
而为了让查询，我要去 可以使用SELECT母亲们的妈妈。
>> 因此，这是getting--这是SQL。
所以蓝色是SQL。
我们看到在一秒钟前，红色是HTML。
在这里，绿色的是PHP。
所以，我正在做一个查询 到我的数据库，我
选择所有的 母亲在母亲表。
不只是缩小它归结为特定的 行，我问了所有的人。
>> 然后我检查，如果结果是 不等于等于false。
这只是我的检查方式排序 如果结果不等于空，
我们会看到下例子。
基本上这只是检查，以 确保它实际上得到的数据备份。
因为我不想开始打印 出的数据，如果我没有得到任何数据。
然后为每个结果作为结果的 从PHP的foreach语法，我做的
正在打印$结果母亲。
所以我要得到一套 所有each--的母亲的
它的关联数组 arrays--，我打印出
每一个作为它自己的一个表中的行。
而这真的很漂亮 很多都在那里给它。
我知道有一点 位怎么回事
在这个最后的例子与阵列 arrays--关联数组的数组。
但它确实刚烧开 倒在SQL中，查询数据，
通常选择后，我们已把 把信息到表，
然后就拉出来。
>> 这是我们把它 在这种特殊情况下。
我们将提取所有个人 母亲从妈妈表。
我们得到了一整套他们，而我们 要遍历并打印出
每一个。
如此反复，这可能是 最复杂的例子
我们已经看到，因为我们是混合三种 不同的语言在一起，对不对？
>> 同样，我们在这里的HTML红色， 一些SQL这里的蓝色混合，
在绿一些PHP混合。
但所有这些玩 很好地在一起，这是
发展中的问题而已 良好的生活习惯，这样你可以得到
他们你想要的方式一起工作。
而只有这样，才能真正做到这一点 就是练习，练习，再练习。
我是道格·劳埃德，这是CS50。