[音乐播放] DAVID马兰:好吧,这是CS50。 这是八周的端部。 而今天,我们开始 填写一些作品 当涉及到建设 事情在网络上。 所以,记得在周一 我们花了很多的时间 在PHP中,这是该动态 编程语言 让我们输出,其中包括 东西,HTML和其他这样的内容 我们将要看到的。 但是,我们还没有真正了解了如何 我们要存储任何信息。 事实上,几乎任何超 有趣的网站,你今天的访问 有某种数据库 在后端,对不对? Facebook的肯定是存储大量数据 关于我们和Gmail存储的所有一切 你的电子邮件。 因此,许多其他网站不只是 静态内容的信息。 这在某种程度上实际动​​态。 您所提供的输入,它更新 该页面为其他人。 你得到的消息,你送 消息,等等。 所以今天,我们来看看更接近 一期工程的基础 你会潜入下一 本周,CS50融资,这 实际上是要你打造 东西不是C,但在PHP。 一个网站,看起来 有点像这样 允许购买和出售 股票,实际上是 会后,实时绘制 股票数据来自雅虎财经。 所以最终,你将有 幻想为自己和用户 那你实际上购买和销售 股票,获得了近实时 更新,管理 投资组合,所有这些都 将要求具有, 最终,用户的数据库。 所以,在你自己的话, 特别是如果你不 超级熟悉电脑 科学或数据库,是什么 你知道一个数据库是 现在,在非技术方面? 它是什么? 你会如何​​形容它 一个室友还是朋友? 听众:[听不清] 信息[听不清] DAVID马兰:所以,信息的列表, 或store--的信息的列表 你可能要存储 有关的东西,比如一个用户。 什么做的用户有 与他们有联系? 如果你在Facebook或用户 Gmail的,有什么特点 我们所有的用户有哪些? 像,什么可能是一些 在电子表格中的列,这是我们 提到最后一次? 因为同样,你可以 认为数据库 真如看上Excel文件或者谷歌 电子表格或Apple号文件。 那么,你怎么想的 当你想到一个用户? 它们有什么? 那是什么? 听众:名称。 DAVID马兰:名称。 所以,如果名字一样,大卫·马兰 将是一些用户的名称。 还有什么没有用户有哪些? 听众:一个ID。 DAVID马兰:一个ID。 因此,像一个ID号,如您哈佛 ID或您的耶鲁大学网络ID等。 还有什么可能用户有哪些? 听众:密码。 DAVID马兰:密码,也许一个 地址,可以是电话号码,也许 电子邮件地址。 所以,有田,这一束束 排序可能失控 很快,一旦你开始 意识到,哦,让我们存储此 让我们存储这个那个。 但是,我们如何真正做到这一点? 如此反复,心智模式 有今天的我们 深入实际的SQL, 结构化查询语言, 是,看起来像这样的数据库。 这只是行和列。 你能想象谷歌电子表格 或任何数量的其他方案。 但是,什么是有关MySQL,这是关键 数据库软件,我们要使用, 自由公开 available--的Facebook应用 它和任何数量的其它websites-- 数据库存储的东西关系性。 和关系数据库 只是意味着一个字面 存储以行和列数据。 就这么简单。 因此,即使是像甲骨文的 你可能也听到了 是关系数据库。 和罩的下面,它 将数据存储在行和列。 而甲骨文向您收取 大量的资金要做到这一点, 而MySQL的费用 你什么的一样。 因此,SQL是要给我们 至少四个操作。 选择数据,就像读的能力 数据,插入,删除和更新数据。 换句话说,这些是 真正的四个按键操作 这将会让我们改变 东西在这些行和列。 我们将利用今天特别工具 学习SQL和它玩 再次调用PHP MyAdmin。 它是基于Web的工具。 总巧合的是, 它是用PHP编写的。 但是,这将给予我们一个图形化 用户界面让我们能够真正 创建这些行和列 然后通过代码与他们交谈。 那么,让我们现在就开始 我认为是坦然 一种有趣的过程 构建网站的后端, 用户不要的部分 见,但肯定做的关心, 因为那是相当的数据是怎么回事。 如此,类似于C和一个 少一点像PHP, SQL或支持一个数据库 SQL中,具有至少这些数据类型 和其他人一束束。 CHAR,VARCHAR,INT,BIGINT, 十进制和DATETIME。 还有的一个整体 一堆其他的功能, 但让我们通过这样做 实际例子的方式。 我要进入​​CS50 IDE 在这里,在前进,我已经登录 而且我还参观了一个网址 该工具被称为PHP MyAdmin。 而在问题设置七,我们将告诉 你到底怎么去这个接口 为好。 在左上角, 注意到它说的讲座。 而这只是意味着 事先,我创建 一个空数据库名为讲座 有没有在它的电子表格呢。 有没有行和列。 因为第一 事情,我们要做的 在开始创建表 那将存放我们的用户。 因此,从字面上过 这里的权利,我 要告诉数据库 我希望有一个表称为用户。 所以,这就像文件,我 要存储在我所有的数据。 有多少列? 好吧,让我们保持简单了。 我只是想存储像 的用户名和用于用户的名称。 我们会从小事做起。 所以,我想两列总。 而且我要继续前进,然后点击开始。 然后,对于这些 列,我要去 如果互联网do-- cooperates--没事, 所以我们要再试一次。 我要创建一个名为表 有两列,用户点击Go,确定。 现在,我们已经得到了它的真快。 谢谢,非常出色地完成。 好吧,那我们要 这些列被称为? 因此,人会被称为用户名。 所以,我看到这里 - 和接口 坦率地说变得有点难看,最终, 一旦你开始输入所有这些数据。 但是,什么是好的是那种 矛盾的是,我创建列, 但该工具具有呆呆 摆开行 这样我可以配置这些列。 所以,有两个空白有名称下。 与这些领域中的一个予 要叫用户名, 和其他领域我想调用的名称。 现在我不得不选择 数据类型为这些事情。 如此,而在Excel中 和谷歌电子表格, 如果你想要一个列,你从字面上 只需输入姓名或用户名,按Enter键。 也许你把它大胆的脸 仅仅是为了清楚,但仅此而已。 你不指定 类型列。 现在,在谷歌电子表格或Excel中, 可以指定数据的呈现方式。 你可以去格式菜单,你 可以指定显示此像美元符号, 显示此像一个浮点值。 因此,它在精神相似 这就是我们要去做, 但其实这是要逼 数据为特定类型。 现在,尽管刚才我 说,只有少数的数据类型, 这事实上是在 一大堆,而且他们 在不同程度上的特殊性。 而作为一个不谈,你 甚至可以做花哨的东西 就像存储几何 内的数据库。 你可以存放东西 如GPS坐标 居然发现,数学, 是接近别人点。 但是,我们要 保持这个超级简单 而上到这里,所有的 所谓的字符串类型。 所以,这里是一个列表 一大堆的选项。 CHAR,VARCHAR,TINYTEXT, MEDIUMTEXT,LONGTEXT。 而且它是一种势不可挡。 不幸的是,有些 矛盾的是,以C, 一个CHAR是不是一个真正的CHAR。 如果您在数据库中指定 您的数据类型为CHAR, 这意味着,是的,​​这是一个 CHAR,但它是一个或多个字符。 你必须指定 有多少个字符,你想要的。 那么,什么是一个典型的 长度用户名? 是否有限制一般? 听众:[听不清] DAVID马兰:16可能? 类似的东西。 要知道,早在 一天,它曾经是八强。 有时是16,有时候 它比那还要多。 因此,这并不 意思是给我一个字符。 这意味着我必须指定 该字段的长度, 现在,我可能会说16。 而且有一个权衡这里。 所以,我们会看到一个时刻 这意味着之一, 每一个用户名必须为16个字符。 但是且慢,M-A-L-A-N。如果是这样的 我的用户名和我只使用五, 你会建议数据库 做了其他11个字符 我已经预留空间? 你会怎么做? 听众:[听不清] DAVID马兰:是啊,刚 让他们都为空。 让他们的空间。 但可能为空,所以 很多反斜杠零。 因此,在一方面,我们 现在确信,我的用户名 不能超过16个字符。 而另一面是 如果我有一个很长的名字 或者需要一个很长的 用户名像一些你 球员可能在该大学或 在Yale.edu,你不能有一个。 因此事实上,如果你 曾经注册了一个网站 你挨骂了说 您的密码太长 或者您的用户名太长了,这是 仅仅因为一个程序员,当 配置自己的数据库, 决定该字段将 不要超过这个长度。 好吧,那么,如果 我们继续来命名? 应该多长一个 典型的人的名字是什么? 多少个字符,16? 我猜我们可以 发现有人在这个房间 其中,由他或她的第一个加上最后 名称是超过16个字符长。 那么,什么是重要的是,17好? 18? 25? 更大? 30? 听众:[听不清] DAVID马兰:5000,噢,我的上帝。 所以,这可能是一个不错的 上界,我们可以说。 在这里,我们种得 做出判断调用。 像,没有正确的答案。 无限是不太可能的, 因为我们最终 要have--我们 要运行内存不足。 因此,我们必须做出一个 在某一点主观判断。 非常常见的是,例如, 以use--,让我指定CHAR在这里 作为before-- 255是字面上 在这个数据库软件上限 几年前。 因此,很多人的 只想说,挺好的。 255的极限。 让我们只使用最高。 这是很荒谬的。 就像,如果你输入某人的 命名为200加字, 这有点可笑。 但是,请记住,ASCII不 对于角色的系统。 因此,特别是在一 很多亚洲语言 那里的人物,我们不能 表达对喜欢我的美式键盘 键盘,一些字符实际 占用16位而不是8位。 所以,这其实 是不是所有的不合理 我们需要更多的 空间,如果我们想拟合 除极美大字符 中心的那些我们倾向于讨论。 因此,我们需要一些上界。 我不知道最好的是什么, 但255通常是一个常见的​​一种。 25感觉低。 16,32感觉到低。 我会犯错就在身边 的更高的东西。 但是,有一个权衡,一如既往。 什么是,也许,明显 权衡保留255个字符的 在我的数据库中每个人的名字吗? 听众:[听不清] DAVID马兰:那是什么? 听众:[听不清] DAVID马兰:这是一个 大量的内存,对不对? M-A-L-A-N。我也只是浪费250 文字只是为了保存我的名字 防守,以防万一有人 在班上有一个很长的名字。 这似乎是不适当的权衡。 所以,事实证明,SQL, 这个数据库语言, 实际上支持的东西 所谓的VARCHAR或CHAR的变量。 这是一种很好的,这 允许您指定不是一个固定的 宽度,而是可变的宽度。 更具体地,一 字段的最大宽度。 所以,这意味着一个名称可以 不超过250个字符, 但可以肯定是少了。 并且数据库将是聪明的。 如果放在M-A-L-A-N, 它一定会用五年, 也许六个字节像 结尾的空字符, 而不是额外花费 249或250字节不必要的。 因此,这似乎是我应该 已经开始与这个故事。 但总有一个权衡。 因此,一方面,用户名我已经 指定到被硬编码在16 也许这不是 正确的电话,也许它 是的,但为什么不使用 VARCHAR处理的一切? 它的存在是有原因的。 为什么不使用VARCHAR处理的各个领域 其长度不知道提前 如果这似乎是一个伟大的事情,对不对? 只使用尽可能多的空间 你需要达到这个限制? 听众:慢。 DAVID马兰:拼写? 听众:使得它更慢? DAVID马兰:哦,它的速度较慢。 好,这几乎总是 答案,坦率地说。 就像,什么权衡? 它要么花费更多的空间 或者它花费更多的时间。 所以,在这种情况下,可能会变慢。 为什么呢? 听众:[听不清] 确定[听不清]。 DAVID马兰:好。 所以,你可能还记得,即使 PSED5,玩你的方法 到字典中,如果你有 动态分配内存或者保留 生长缓冲,即 实际上可以是缓慢的。 如果你要调用malloc 引擎盖下,也许 这就是MySQL正在做的,所以 肯定有可能出现这种情形。 如果你想办法 回到PSet--甚至 周二,当我们做的东西像 二进制搜索,甚至线性搜索, 大约每一个字漂亮的事情之一 在一列中的一个数据库或每一个字 确切地说是相同的长度,甚至 如果一大堆这些字符 是空白的,是可以使用 对数据的随机存取,对不对? 如果你知道,每一个 字是16个字符了, 你可以使用指针运算,所以 说话,去美国的16,32,48,64, 你可以只跳 立即使用算术 任何在你的数据库的话。 而如果它是一个VARCHAR, 你有什么,而不是必须做的? [电话铃声] 如果它是一个VARCHAR,你 不能使用随机接入。 你必须寻找什么或做什么? 是吗? 听众:[听不清] DAVID马兰:你看 通过whole--跟踪 通过整个名单 寻找什么,最有可能的? 什么样的特殊价值? 听众:[听不清] DAVID马兰:展望 对于空终结 该标定词语的分离。 如此反复,权衡和 没有正确的答案。 但是,这是在哪里,特别是 当你的用户获得很多 并在服务器上的负载时, 使用人数就变得很高, 这些其实都是平凡的决定。 因此,我们可以将这些作为这一点,但 让我们向下滚动到正确的 这里。 现在,有一对夫妇列 在这里我们必须做出一个主观判断。 是否有意义,以允许用户的 名,一个用户的用户名或用户的 名,为空? 也就是说,只是空白。 感觉有点无厘头,所以我 不会去检查那些箱子。 但事实证明,在 数据库,你可以说, 有人可以有选择地将这个值。 该列没有 实际上在那里。 现在,有这个下拉菜单。 同时注意我仍然 在第一行中出现, 所以我说的是现在的用户名。 而事实证明,一个数据库, 不像一个简单单纯的电子表格, 拥有强大的功能称为索引。 和索引是告诉的方法 数据库事先知道我的人 我比你更聪明。 我知道是什么类型的查询,请选择 或插入或删除或更新, 我的代码将结束 了做这个数据库。 我想读大量的数据。 我想插入大量的数据。 我希望不断 删除了大量数据。 如果我知道我将要 访问字段名一样不少, 我可以抢先告诉 数据库中,我懂得比你多, 我想法令, 你应该指数这一领域。 其中,索引字段或一列 意味着提前数据库 应借鉴一些想法的,比如, 4周,五,六从CS50 实际上建立 类似二进制搜索 树什么的 一般称为乙树 你会学习 在这样一个类CS124 在哈佛,一个算法类, 或任何其他地方。 数据库及智能 谁实现了它的人 会找出如何存储 的信息表 在内存中,以便搜索和 其他的操作速度非常快。 你不必这样做。 您没有实现 线性查找或二进制搜索 或合并排序或选择 排序,任何。 该数据库会为你,如果你告诉 它抢先索引这一领域。 你也可以看到,有 其他一些特点 我们可以告诉数据库执行。 可能是什么意思,如果我选与众不同 从这个菜单,只是凭直觉? 是吗? 听众:[听不清] DAVID马兰:是的, 用户名必须是唯一的。 这是好事还是坏事 一个数据库,与用户网站? 如果用户名是唯一的? 是的,也许。 如果这是什么 领域,我们用它来登录, 你真的不希望人们有 相同的感觉,或相同的用户名。 因此,我们可以有 数据库执行有这么 现在在我的PHP代码或任何语言, 我没有,比如,检查 一定做到这一点的用户名 存在之前,我让别人注册? 该数据库不会让两个人命名 大卫或马兰斯登记在这种情况下。 和作为题外话,即使这 菜单仅允许您选择一个, 唯一索引是这 超快速的性能指数, 但它也实施唯一性。 我们再回过头来什么 另外两个是指在短短的时刻。 同时,如果我去 我的第二排,这 是用户的名字,我应该说明 该名称应该是唯一的? 不,因为你可以肯定 have--有没有两个大卫 马兰斯在这个房间里,最有可能的。 但是,如果我们选择一个不同的名称, 我们可以肯定有冲突。 回想哈希表等。 所以,我们当然不希望 以使该名称领域独树一帜。 所以,我们只是要离开 随着破折号,破折号,破折号,什么都没有。 而且我要离开 一切孤单。 事实上,大多数这些字段 我们不会去关心。 而当我准备好保存此, 如果互联网合作, 我点击保存,而且非常,非常,非常 慢慢的数据库是否得到保存。 现在我回到这个 接口,这不可否认, 是压倒性的第一眼。 但是,所有我要做的就是点击 就在左上角的Word用户。 我要在这里走了,点击 用户,默认情况下,它 已经执行了一些SQL,但 更详细的介绍了一下。 这是我做的只是一个汇总。 而且不用担心,你看 何况拉丁美洲和瑞典语这里。 这些只是默认 设置,因为MySQL本来, 或者PHP MyAdmin,发生了两个中的一个 要写入一些瑞典人民。 但是,这无关紧要在我们这里的情况。 好吧,那么,为什么 这一切有意思吗? 事实证明,我可以插入数据 成通过编写代码的数据库。 而我继续前进, 在这里我的文件,我 要继续前进,并假装 这被连接到该数据库,该数据库 它不是此刻,却会 是当我们到的问题设置七人。 而且我要继续前进, 执行一个叫做查询功能, 我们会给你的问题 设置SEVEN公司的分销代码,这 至少需要一个参数, 这仅仅是一个字符串。 一串SQL代码。 所以,你要学习如何 写结构化查询语言。 如果我想插入新行到我 数据库,因为有人已经提交 一个形式我的代码,我会从字面上 写INSERT INTO用户以下 字段:用户名, 逗号,名称,价值, 现在我需要插入 像马兰,和报价, 引文结束“大卫·马兰。”现在 即使对那些不熟悉SQL, 为什么我用单引号 这里面绿色的字符串? 可能是什么原因吗? 请注意,我是相互混合两种语言。 查询是一个PHP函数, 但它需要一个参数。 而这样的说法有其自身是 写在所谓的另一种语言 SQL,结构化查询语言。 所以,一切,我 这里刚刚凸显 就是这种语言称为SQL。 那么,什么是用单引号, 只是作为一个快速的完整性检查? 前进。 他们是字符串。 所以,报价,引文结束马兰和报价, 引文结束大卫·马兰是字符串。 而只是想直观地现在, 知道你知道C和PHP是什么, 我为什么不这样做,这是我平时 使用双引号的字符串? 为什么我不希望这样做? 是吗? 听众:[听不清] DAVID马兰:没错。 因为我已经使用 在途中双引号 参数之外 以PHP函数, 我只想混淆解释。 它不知道,做这些一起去? 难道这些一起去? 难道这些一起去? 所以,我交替代替。 或者,我可以做这样的事情, 反斜杠引号和反斜线报价。 坦率地说,这只是开始 得到非常不可读和丑陋。 但是,这将实现 相同的结果为好。 所以,如果我要执行此 现在查询,让我们看看会发生什么。 现在我要去和而继续前进 不是执行的PHP代码,这 在这里,你会玩 在问题设置七, 我要去,而不是去PHP MyAdmin。 而且我手动去 去到SQL标签, 让我放大在界面上。 而且我要粘贴 我刚才输入的东西。 和颜色编码有 改变了一点点,现在, 只是因为节目形式 事情有点不同。 但是请注意,所有我做 是我说的,插入到用户。 我指定,那么,在一个逗号 分隔括号的列表中两个 我想插入的字段, 然后,我从字面上说,值 紧接着又括号, 然后这两个值 欲插件,和 现在好措施, 我把一个分号结尾。 所以,这不是C.这是不PHP的。 这是现在的SQL,而我把它粘贴 这个基于Web的界面, 只是要告诉我, 当我点击进入, 在数据库中执行此查询 运行CS50的IDE内。 因此,这是很好的。 注意,所述一排 插,去超级快, 0.0054秒插入的数据。 所以,这听起来很健康。 它重新格式化我的查询 我在这里只看到它 在那种颜色编码版本。 但现在,如果我点击 浏览,发现,即使 尽管有上有很多杂乱的 在屏幕上,我的表,现在有两排。 所以,让我继续前进,做一套。 取而代之的是,让我 再次去到SQL标签。 这一次,我会插入类似 罗布和他的名字将是罗布鲍登。 鲍登。 让我们点击保存。 哎呀,宁愿去。 再次单击浏览, 现在发现我有两行。 所以,这只是一种方式更加复杂 开放的谷歌电子表格的方式 只输入一行到一个列。 但是,什么是关键的是, 我们现在有语法 与编写代码,以便 最终,我们实际上可以 做一些与此。 回想一下,PHP支持 超级全局变量。 什么是美元内 登录下划线得到PHP? 我们看了看在一个 两个简单的例子。 而在PSet6,记得你有个招呼 点PHP使用这种变量。 是什么在那里去? 或者是什么呢? 大声一点。 听众:[听不清] DAVID马兰:这是一个雪 种子阵列,这 是说的只是一种奇特的方式 阵列具有键值对。 而且按键不是数字。 他们的单词或字符串。 具体而言,什么 那些键值对? 他们在哪里来的呢? 对不起? 听众:[听不清] DAVID马兰:没有? 哪里做这些关键 值对来自哪里? 再说一遍? 了吗? 我是唯一的一个听证会的东西吗? [笑] 这是正确的,是吗? 听众:[听不清] DAVID马兰:是啊,他们 来自查询字符串。 所以,如果你在时间倒带 当我们发挥与谷歌 我们已经去了Google.com斜线 搜索问号Q等于猫, 如果我敲回车,如果 谷歌是在PHP实现, PHP代码,谷歌写道: 将有机会获得美元符号 强调GET其中内 是一个关键称为Q和一个值 称为猫,它可以然后使用 用来做与实际的搜索。 所以,其实,我要去 现在要做的就是回到我的PHP代码 你会再次看到更多的PSet7。 取而代之的堵漏 在硬编码值,这 似乎并不像一个 非常有活力的网站, 我想给你一个传情 你的实际代码会做。 你会投了两个 问号是这样的。 我不知道用户名是什么。 我不知道是什么 名称将是, 但我知道我可以 动态地得到它们。 所以,如果我们现在编写的代码 在谷歌的服务器上运行的代码, 或者,如果这是个招呼点 PHP,附带PSet6, 我要传递到 查询功能 就像printf的,其他两个参数。 GET,报价,引文结束的用户名, 和GET,报价,引文结束的名字。 现在,请注意什么 一般结构是在这里。 我已经得到了左边 呼叫的右手侧, 在PHP这个函数调用查询。 我仍然有作为第一 的说法,文字只是一个字符串。 但文本的字符串 写在一个叫做SQL语言。 坦率地说,这不是一个很大的语言。 我们只是要说说 它正式的今天,真的。 然后在问题设置 七,有相对 几个特点,我们是 要充分利用。 问号,不过,平均插上 值这里插上另一个值 这里。 而通知中,我遗漏了什么 来自各地的quote--该死 它 - 各地报价 标志着这个时候。 我省略报价 周围的问号标记, 对不起,这一次。 那么,什么是好的关于这个 问号功能, PHP倾向于支持,Ruby和 Python和其他语言, 这也就意味着插件在一些 珍惜在这里,你知道吗? 你找出是否使用 单引号或双引号。 不要打扰我与那些 智力无趣的细节。 但是,要确保它是正确的 所以,我的代码是最终 操作和安全的,这 将不久有一个含义。 现在,有多少争论总量,只是 要清楚,是查询功能回吐? 任何人想投了两个多? 三? 当然,为什么? 为什么三顶? 听众:[听不清] DAVID马兰:没错。 第一部分是字符串。 第二个参数是美元符号 强调GET支架的用户名。 第三个参数是 同样的事情,但只是名字。 因此,换句话说,现在 如果我有一个网页表单 这不得不文本字段, 一个用于该用户的用户名, 一为他或她的名字,只是 就像你在一个网站上看到 当您注册 一些网站,这可能 是在后端的代码 实际执行插入现在 到数据库中。 现在,通过对比,让我们快进。 假设一个用户现在 登录和你想 编写检查是否PHP代码 谁刚刚登陆年代的人 实际上是一个用户,你可以 使用非常简单的语法。 你可以说选择,让我们说 明星,其中星级意味着一切。 我不知道我 希望,所以才给我 从表中的所有列 所谓的用户在哪里,这是很好的。 选择支持什么 所谓的谓语,这是 像排位赛你想要的方式。 其中username等于 报价,引文结束马兰。 所以在这里也一样,我已经嵌入 参数内 一个PHP函数,一行SQL代码。 这SQL代码此 时间是从字面上去 搜索报价,解除引用马兰。 现在,这不是那么有用, 所以我打算跳过 而我要放好 这个技巧的布雷迪,并进入 和插件,而不是 问号在这里。 所以,仅仅是明确的,有什么 应我的第二个参数 可如果有人刚刚登录我 要检查,如果他或她实际上是 用户? 听众:[听不清] DAVID马兰:是的。 我听到了美元符号下划线 获取报价,引文结束用户名。 这应该返回给我 任何行的在我的数据库 有马兰的用户名。 现在有希望,我要找回 零,如果马兰从来没有来过这里, 或者一个,如果他。 我不应该回来 两个或三个或四个。 为什么呢? 听众:[听不清] DAVID马兰:我说的唯一的,对不对? 原因很简单。 因为我说,这是必须 是唯一的,只是逻辑上, 你只能有零个或一个马兰斯 在这个特殊的数据库表中。 现在,顺便说一句,只要你见过 它,即使我一直使用GET 并且即使PSet6仅用于 GET,你当然可以有POST。 而记得,邮政是另一 技术提交信息 从一种形式,但它 不会在URL显示出来。 这是一个更安全一点肯定是 像用户名和密码, 这PSet7会,其实涉及。 因此,让我们做到这一点在PHP MyAdmin看看会发生什么。 我要去到MySQL选项卡。 并注意为默认值 PHP MyAdmin,只是为了尝试是有益的, 是从用户的其中一个选择的明星。 好了,一个是总是正确的,所以 这有傻有效 只是选择了一切。 但是,我要成为一个小 更多的迂腐和手动 键入了择思达用户的。 现在从技术上来说,你可以 引述的表的名称。 这是罕见的,你必须这样做, 但要注意这些都不是 你的正常报价的美式键盘上。 这就是所谓的反引号,这 一般是在顶部左手 角落你的键盘。 但它是罕见的,你会 确实需要费心的是, 所以我就忽略它们无论如何。 所以,现在,让我继续前进,砸去。 有多少行,我应该得到 回来时,我选择从用户的明星? 听众:[听不清] DAVID马兰:行数,确保万无一失。 但是,有多少在这 具体的故事,现在呢? 二,因为当时 我和有抢。 所以,如果我点击进入,我看到视觉上 我已经得到了回来,的确,两排。 有很多杂乱的 屏幕上,但我只看到两行。 相反,如果我这样做又做 择思达用户的,其中username 等于报价,引文结束 马兰,现在如果我点击进入, 我只打算拿回一行。 最后,如​​果我做 这样的事情,假设 我不关心 让一切, 这是一种毫无意义的,现在, 因为只有两列。 它不象我选择 一个庞大的数据量。 假设我继续前进, 做选择的名字从 用户,其中username等于马兰, 什么是好的关于SQL诚实, 是,它确实少了点 你告诉它做。 这是非常简洁的,但是你从字面上 只是告诉它你想要做什么。 从用户那里选择名称 用户名等于马兰。 它真的是明确的。 所以,现在如果我打去,有多少 行我该怎么回去? 其中,因为它只是马兰,希望。 或零,如果他不 还有,而是一个最大。 有多少列,我会回来? 有多少列? 这一次,我只是去 得到一个,因为我没有 选择明星,这就是一切。 现在,我只选择名字,所以我 刚回到一列一行。 它看起来有点适当地 可笑的,只是在寻找超 从小喜欢这一点。 那么,到底发生了什么? 当你执行一个SQL 使用select查询, 你在说什么 从数据库返回 就像一个临时表 有行和列,也许, 但忽略任何 是不是你真正选择。 因此,这就像如果有人有一个大 所有的学生电子表格 注册一些 学生团体,和你说, 给我所有谁一直在大一 注册我们的学生群体,有什么 在你的同事 学生团体可以做 是他们可能只是手 你整个电子表格。 这就像说选择明星。 这是一个有点恼人,如果 你只想新生。 所以,如果你不是说, 从数据库表中选择星 其中,一年等于 报价,引文结束大一, 就好像你的朋友 在学生组 从字面上突出显示,并 只复制大一行, 粘贴成一个新的谷歌 电子表格或Excel文件, 递给你回来了 仅生成的文件。 这一切是怎么回事 在概念在这里。 所以,最后,我们能做的 一些很花哨的东西 通过存储之类的东西用户名 和密码等。 但是,事实证明,我们应该做的 有点不同莫过于此。 这并不是说聪明,只 存储的用户名和密码。 前面有人,我觉得 到这里,提出一个ID。 现在,一个ID可以像 哈佛ID或耶鲁大学的网络ID, 但它可能是更简单的 在我们的数据库的情况下。 事实上,通常情况下 是有另一列。 我要去 进取,编辑我的表。 如果你玩弄 这个接口PSet7, 你会看到,你可以检查 这里这个按钮,添加 在该表的开头的字段。 现在,如果我点击进入,这是怎么回事 给我的那些形式之一 从早期。 我要添加一个名为ID字段。 而且我要使它成为一个数字类型。 我有一大堆 值的Numerics的。 我只是要选择一个INT和 不用担心不同的尺寸。 我没有指定 的长度或一个值, 因为这将是 32位不管。 属性中,我们没有看到过。 任何兴趣任何这些 菜单选项,这个时候? 对于INT? 那你求婚? 没有? 做这些有意义吗? 是啊。 是啊,无符号的,对不对? 一般情况下,如果我们打算给 大家唯一的编号, 就是这个故事 去,我真的只是想 一个人有这样的零数 一和二,三和四。 我并不需要处理 用负数。 这似乎只是过于复杂。 我买4十亿可能的值, 不是四十亿可能的值, 所以我只是一倍 我INT的能力。 顺便说一句,如果你想关联 这有点像脸谱, 早在排序我一天的 Facebook的第一个走了出来, 我相信他们是 利用其MySQL数据库 来存储用户的 标识符,只是一个int。 但当然,还有很多 真正的人在世界上。 有很多假冒的Facebook 占世界。 所以最终,Facebook的溢出 int的大小,四十亿 值。 这就是为什么,如果你看看 四周,有网站 可以告诉你什么 您独有的ID​​是。 如果你从来没有选择一个用户名的 Facebook的,你会看到你的唯一的ID。 我认为这是个人资料点PHP 问号ID等于什么。 这就是现在有点像一个大 INT,或者很长很长,如果你愿意, 这是一个64位的值 什么可比性。 因此,即使在现实世界中做这些 最终的问题有时关系。 而事实证明,在这里,如果我 给我的所有用户一个唯一的ID, 我想成为超级明确的, 微创使这一领域独树一帜。 但事实证明,有一 一块命名今天太 这是一个主键。 如果你正在设计一个数据库 表,事先知道 在该表中的一列 应该和唯一标识行 在表中,要 指定它告诉数据库, 这是我的主键。 有可能是重复的 在其他领域, 但我说的是数据库,这 是我的主,我最重要的领域, 有保证是唯一的。 现在,这似乎是多余的。 现在我提议,我们 添加,点击保存在这里, 现场called--,我要去 继续前进,点击AI, 我们再回过头来 在某一时刻,保存。 现在,我提议 我的表是这样的。 我有一个INT字段名为ID, 所谓用户名的煤焦领域, 所谓的名称一个VARCHAR领域,但ID, 如果它的主,因此唯一的, 为什么我只是浪费 时间推出什么 有效地是一个第二唯一 现场叫号这是一个INT? 用户名,召回,是 已独特的,我们说的。 所以只是在逻辑上,你并不需要 任何数据库经验理由 通过这个,为什么 也许我已经介绍 一个int我唯一的标识呢? 什么是this--再说一遍? 听众:[听不清] DAVID马兰:随机 访问更容易,为什么呢? 听众:[听不清] DAVID马兰:是的,这 刚刚访问号码。 所以,如果你觉得这真的 是一个表,像阵列, 现在我唯一标识符 我可以四处跳动。 而比这更好的仍然是, 一个int有多大将是一次吗? 32位或4个字节。 我的用户名有多大要多大? 最大? 16个字节。 所以,如果你真的关心 你的代码的性能, 回想PSet5,你会喜欢 要搜索的一个四字节的值或一个16 双字节值,对不对? 这真的是这么简单。 你所要做的四倍工作 要搜索的用户名,因为这些 是16个字节。 所以,你必须从字面上 比较所有16个字节是 肯定是的,这是用户名我想要的。 而对于一个INT,可以 这样做只有四个字节。 而作为一个抛开那些 感兴趣的计算机硬件, 事实证明你能适应像 INT或某事的32位值 所谓在计算机中的寄存器 CPU,这意味着它的超, 超快速,即使在最低 计算机硬件水平。 所以,这里只有好处各地。 那么,这是什么意思? 事实上,当你设计一个 数据库表中,几乎所有的时间 你要没有 只有你所关心的数据, 而且像 一个唯一的标识符 因为这会 让我们做其他的事情。 而且,我们绊倒一个问题在这里。 假设用户具有不 只是用户名和名称, 但他们也有像城市 与州和邮政编码,至少 这里是在美国。 所以,我要继续前进 和公正快说, 给我三个多列 在表的末端。 而这将是城, 这将是国家, 这将是邮编。 现在,市,什么样的数据类型 要这样,也许? VARCHAR? 我不知道是什么 最长的名称城市。 某处在美国,有 可能是一些可笑的长字, 所以我们就一起去255,有点 历史或随意。 国家,你要怎么办? 主观判断,对不对? 什么是可能是最有效的? 多少个字? 也许只有两个,如果我们能 逃脱正是这样做, 象,马马萨诸塞州等等。 所以,我要去两个CHAR值。 邮政编码是一个有趣的。 我们在这里的02138,使 建议我们应该用什么呢? 这是一个INT,对不对? INT,INT,短? 短会工作。 没有? CHAR或五人,但我想要一个INT。 为什么要推回一个INT? 从这个劝我。 什么是愚蠢的关于一个INT,我的想法? 是啊。 听众:占用更多的内存。 DAVID马兰:占用更多的内存。 四个字节,但你 提出一个邮政编码 五字节或有人在为CHAR, 这感觉就像诶,这不是真的 案子。 好了,有趣的故事。 几年前,当我用用 微软的Outlook我的电子邮件, 我最终想切换到Gmail。 所以,我出口我所有的 从Outlook联系人为CSV文件。 逗号分隔值, 这只是意味着我 有我所有的朋友的名字和最后一个 名字和电话号码和邮政编码 和所有的。 然后我做了 打开它的错误 在Excel中,这是一个 电子表格程序, 了解CSV文件,因为我们已经看到了。 但后来,我一定打一样, 指挥或控制S上一个点。 和Excel显然在当时 有其中任何一个特点时它 看到一个数字,它试图有所帮助。 如果这个数字开始 零,它只是摆脱他们。 为什么需要领导 零点的整数? 他们是毫无意义的,数学。 他们不是毫无意义 在美国的邮政系统。 所以,我已经好几年了, 到今天,我还是 有朋友说,当 我需要一个人是难得一遇 解决这些天, 我还是会看到我 在剑桥的朋友, 马萨诸塞州,2138年。 而这很烦人,如果你 试图以编程方式排序 产生信封或只是记下来。 那是因为这个原因, 我选择了错误的数据类型。 所以,我很喜欢你的想法。 让我们用一个煤焦领域。 除了五个大字, 有一个角落的情况下。 如果您仍然发送邮件, 有时邮政编码这些天, 他们一样,加上四个。 因此,我们需要一个连字符,然后 我们需要四个数字。 所以说实话,它可以 去很多不同的方式。 现在,我要保持 它简单,我只是 会说,这是一个 5 CHAR值和我们 要跳过整个仪表板加上四个。 但这些都是种权衡。 你能想到的 产生同样的问题 与电话号码或其他领域。 而现在,这实际上是 一个愚蠢的道路往下走。 假设这两个Rob和我和汉娜 和玛丽亚和[? Davon?]和安迪 和其他的工作人员都住 在剑桥,马萨诸塞州,02138。 这实际上觉得自己很蠢,我很 添加到我的用户表,市,州, 和拉链。 为什么呢? 听众:[听不清] DAVID马兰:再说一遍吗? 听众:[听不清] DAVID马兰:他们总是 要去一起去,好吗? 当事实证明,我们曾经认为 这是事实,直到我们彻底 找遍了整个美国, 和原来有 有一些不同之处 在多个城市有 同一个zip,这是奇怪的。 但是,如果我们现在02138规定的 永远是马萨诸塞州剑桥市, 为什么在世界上,你将存储在 数据库剑桥和MA和02138 对我和汉娜和罗布和 对于[? Davon?]和其他人谁住 这里在剑桥,它的 完全是多余的。 我们应该摆脱 只存放了什么? 只是邮政编码。 不过,如果我们只存储了 邮编,我想,也许, 我的网站知道哪里是02138。 所以,我需要另一个表。 这就是确定。 而事实上,这是一 设计表的设计流程 你会做的PSet7以及由此 要分解出的公共数据。 就像我们已经分解出 常见的代码,并分解出常见的 从CSS,这里的风格 太在数据库中, 如果我只需要02138唯一 识别一个人的故乡, 不存储马萨诸塞州剑桥市的 在表中每一次缝补用户。 相反,有一个单独的表称为 拉链,应该有什么样的列? 也许一个ID字段,只是,因为 的原则,我们现在谈论。 可能是一个zip字段为02138。 然后大概是什么其他列? 城市和国家,但只有一个 行02138,一排为02139, 一行90210。 这是字面上 所有的邮政编码,我知道。 所以,现在,你能做些什么? 这是有问题的,因为 现在我有两个表。 所以,我的用户大多是在这里, 但他们的城市状态信息的 在这儿。 所以,事实证明用SQL,有 实际的方式加盟信息, 你会看到在pset中。 但事实证明,你可以 做这样的事情。 择思达从用户,ON JOIN拉链 用户点缀拉链等于拉链点缀拉链。 这是一个小罗嗦, 无可否认,但这只是 意味着选择一切从 服用我的用户表的过程 和我的拉链表。 加入他们一个 字段它们具有在列中。 因此,从字面上做的事情 这样,给我回来 新的临时表 这是更广泛的,这是更大的, 具有所有的 列从他们两个。 这很简单,将是 语法做这样的事情。 所以,有这种进取, 但也有是怎么回事 是其他的设计决策,你会 必须做出,不仅与索引 但也遇到了挑战。 事实上,还有一个挑战 在任何数据库设计 因此有时两个人可能希望 访问数据库的相同的行 表。 所以,这是我们要 遇到PSet7为好。 不过,我想我会看一眼 攻击是可能的SQL。 什么是一些 可能出现的问题? 所以,你会在PSet7遇到这种。 我们告诉你彻底是什么 对于这个问题的编码解决方案。 但是,如果你把一个更高层次的类, 尤其是在操作系统, 你会遇到 问题原子性, 试图做的问题 多东西一下子 不会中断。 我想我会介绍这个 对于PSet7理念与隐喻 我学会了自己在马戈 塞尔策的CS164操作系统 一流年前。 假设你有这些宿舍之一 在你的宿舍或家里的冰箱, 和你有一个真正的嗜好牛奶。 所以,你从班回家 有一天,你打开冰箱。 哦,该死的。 还有在冰箱里没有牛奶。 所以,你关闭的冰箱, 锁了门,锁定你的宿舍, 走在拐角处 到CVS,在排队, 并开始检查出了一些牛奶。 而这将需要一段时间, 因为那些该死的自助结账 柜台采取永远仍要使用。 所以,同时,你的室友回家。 他或她很喜欢牛奶为好。 他们走进宿舍里, 打开冰箱,哦,实在可恨。 有没有更多的牛奶。 所以,他或她也 去指日可待。 但现在,因为有像两个 或三个或四个CVSes附近, 他们碰巧去之一 不同的人在广场上。 所以现在,几分钟 后来,你们俩 回家,唉,最严重的问题不断。 现在,你有太多的牛奶 因为它会走向末路。 你喜欢牛奶,可是你 真的不喜欢牛奶。 所以,现在,这是一个昂贵的 错误,因为你们俩 制成的基础上作出决定 一些变量的状态 是在过程中 由你而改变, 要去挤奶启动。 那么,什么是可能是一个人 解决这一问题? 听众:[听不清] DAVID马兰:留一个便条,对不对? 总是留下一张纸条,如果你 熟悉这个节目。 是的,有我们两个人。 所以,总是留下一张纸条,或 从字面上锁定的冰箱 与某种挂锁的或 一些对像的顶部。 但是,这实际上是将 关键的问题,数据库设计, 尤其是当你可能有 多浏览器,多的笔记本电脑, 多个用户都试图 一次更新信息。 特别敏感的信息 像财务信息, 其中有一个股票交易 网站就像你会的建设, 如果要检查多少钱什么 你有,然后如果你有足够的, 买一些股票? 但是,如果别人谁 有一个共同账户与你 是同时尝试 买了一些股票? 因此,他或她是检查 账户余额,你们俩 得到相同 答案,没有牛奶。 或者两者你回来的答案, 你有$ 100的账户。 你们都试图做出决定 买一股的部分公司股票。 而现在,会发生什么? 你有两股? 你有没有股份? 这样的问题可能会出现。 所以,我们会遇到。 SQL注入攻击,幸运的是, 是什么,我们将帮助您, 但这些残暴 常见的这些天还在。 所以,这仅仅是一个例子。 我不作任何声称, 哈佛密码系统 容易受到这种特定攻击。 我们已经尽力了。 但是,你知道,我们 有这样一个领域。 而耶鲁大学的网络ID也有类似的 看着屏幕上的这些日子。 而事实证明,这也许是 PIN系统PHP实现。 而如果它were--它是不是 - 他们 可能看起来像这样的代码。 它们有两个变量。 给我的用户名和密码 从后超全局变量 我们前面谈到。 也许哈佛有一个查询 像选择星级用户的 其中username等于说 和密码等于这一点。 并注意我只是 插上使用 从其他的花括号符号 一天,这意味着只需插入值 这里。 我不使用的 问号技术。 我没有任何第二 或第三个参数。 我只是从字面上 构造了字符串自己。 这个问题,不过,是 如果有人喜欢scroob, 这是一个参照膜, 登录像这样的东西, 我已经删除了点 通常掩盖 密码,如果他是 尤其是恶意 和他的密码可能是12345, 每个称为电影“太空炮弹” 但他批判类型一 五后单引号, 然后从字面上的词或 在空间,然后报价, 引文结束一等于报价之一, 但是请注意,他遗漏了什么? 他省略了报价右侧 他被省略左边的报价。 因为如果这个攻击者 scroob的推定 就是人们谁写 此PHP代码并没有那么亮, 也许他们只是有一些单 引述周围的插值 在大括号的变量? 所以也许,他可以种 中完成他们的思维 对他们而言,但在某种程度上这回事 让他侵入了PIN码系统。 换句话说,假定 这是在代码 我们现在插上什么scroob类型。 而且它是红色的,因为它是坏的。 而基础文本 是他所键入的, scroob可以欺骗哈佛大学的服务器 为构建SQL查询 字符串,它看起来是这样的。 密码等于12345或一等于之一。 其结果,从逻辑上讲, 的是,这将记录scroob 如果在他的密码是 12345或者一个平等 一个,这是当然的总是为真, 这意味着scroob总是得到研究。 因此,该方式来解决 这一点,因为在很多情况下, 将更多的防守写。 使用类似我们 实际的查询功能, 您将在PSet7,我们插上看到 像问号在这里。 而其中的美 查询功能我们 给你的是它抵御这些 所谓的SQL注入攻击,其中 有人欺骗你的代码进入 注入自己的SQL代码。 因为什么查询功能 我们给你会怎么做, 如果使用问号语法 和第二在这里第三个参数, 是什么并把它添加到 输入的用户提供? 这些反斜线引用。 因此,它避开了任何可能 危险的人物。 现在,这看起来奇怪, 但它不容易 因为它不 改变逻辑了 因为整个密码 现在一个单引号,这不是, 事实上,scroob的密码。 所以,还有的是一些笑话 这个多年来。 所以,这是一个合影留念 在停车场的一些怪胎 因此,你可能知道,一些城市 和国尝试扫描您的许可证 板向您或您机票 如果你经历不一样, 在E-Z通的事情。 所以,这个人推测,也许 人们写E-Z通系统 不那么亮了,也许他们 只需连接在一起的字符串, 让他或她不能恶意 不只是完成自己的思想, 但实际上执行了错误的命令, 而我们还没有提到, 但你可能已经猜到。 这除了删除和 插入和更新,并选择, 还有一个叫降关键字, 字面删除一切 在数据库中,这 尤为糟糕。 我们可以在这一点,如果放大 这是一个有点很难看到。 这一点,现在,是一个著名的卡通 这就是奇妙聪明现在 和可以理解的。 [笑] 是啊,爽。 有种出来狂人。 因此,这些话,是 SQL注入攻击。 而且他们很容易避免使用 正确的代码或正确的库。 你会在PSet7看到,这是 为什么我们给你的查询功能。 于是,一对夫妇玩笑 我们认为我们会 让您在我们这里 剩余分钟在一起。 所以,当你从零一周记得,我们 介绍了这两个灯泡哪些 很不错,不仅是因为 他们是漂亮,是丰富多彩的, 而是因为他们支持的东西 所谓的API,应用程序 编程接口和 在CS50迄今为止,我们已经 大多集中在GET和 POST,但事实证明, 还有其他HTTP动词像PUT。 而事实上,这是 从零一周幻灯片 如果你写的代码,发送,由此 一拉PSet6一个HTTP请求 看起来是这样的这一大块文本 在底部,这是所谓的JSON, 或JavaScript对象符号 我们将讨论下周, 您可以打开或关闭或改变 灯像的颜色。 因此,如果CS50也有另外一些 这些灯泡在这里纽黑文 如果你想借钱 他们最终的项目, 也有一些微软 乐队,这是像 手表,你在你的手腕上戴 这同样有这样的API您 可以编写自己的软件为他们。 我们有一个帐户 苹果的iOS代码,以便 如果你有一个苹果的手表或 iPhone或iPad或iPod音乐, 您可以编写代码, 实际运行这些。 我们有一大堆 的Arduinos,这是 小小的电脑 没有的情况下,本质上, 您可以通过USB连接, 通常你自己的Mac或PC, 写这些物理上运行的代码 经常有传感器对他们的设备 这样你就可以与现实世界的互动。 我们有一大堆 的飞跃运动设备, 这是USB设备的Mac和 个人电脑,在这里,再次,在纽黑文。 如果你把它连接到你的Mac, 实际上你可以控制你的电脑 通过编写软件 即通过红外线, 计算出你在哪里人类的手, 即使没有触碰键盘。 我们认为我们会分享快速 窥在此,例如。 [音乐播放] 因此,我们有一个整体 一堆这些东西, 也叫缪臂带 你把在你的前臂 然后你就可以控制实际 世界还是虚拟世界是这样的。 [音乐播放] 或者,我们也有一些谷歌 纸板,这实际上是一样, 一个纸板箱,你可以把你的 脸,但在滑盖手机进去 让你把玻璃您 手机真正接近你的眼睛。 而谷歌纸板 非常便宜$ 10 $ 20 它几乎没有镜片 这稍微偏离转变 在屏幕的人对图像 眼睛给你的深度感 让你真正拥有3D 环境在你的面前。 我们也有一些三星的齿轮,其中 是这种更昂贵的版本, 但可以类似滑动在一个 Android手机,给你幻想 of--或给予经验 虚拟现实。 而在我们的最后两分钟, 我们认为我们会尝试这样做。 如果我能预测什么科尔顿有 这里只是为了激起你的食欲, 让我继续前进,扔 在这里的大屏幕上。 让我杀的灯光。 科尔顿,你想继续 并把你的手机了一会儿 和过加油到 舞台中间? 那你想项目 - 这是科尔顿看到。 现在,在Wi-Fi在这里 没有那么强了该设备 这是超级引人注目, 但科尔顿是字面上 在这片神奇的未来的地方。 他只看到一个图像。 你看到他的左眼和右眼 他的大脑被拼接在一起 在三维 环境在他的脸上。 他只是选择了一个菜单选项在这里。 而如此反复,他戴着这款耳机 与三星手机上这是 无线投射到我们的开销。 现在你在火星上,我觉得呢? COLTON:我想是这样。 我不知道[听不清]。 [笑] DAVID马兰:原来 火星有这些菜单。 COLTON:[听不清]一些很酷 地方,如果我们想要去用于: DAVID马兰:我们在哪里要去? COLTON:[听不清] DAVID马兰:,让我们看看 其中,科尔顿的,现在把我们。 COLTON:[听不清] DAVID马兰:那么,有这么多 不同的地方,你可以把自己。 有FAPIs,通过它,你可以 写游戏或互动的 运行,最终,在手机上。 所以,你真的只是 编写手机应用程序。 但由于软件 和图形处理能力, 现在科尔顿在这 小小的平房。 和在的风险 压倒自己, 科尔顿,我会坚持围绕 而在班今天这里结束 如果你想拿出和发挥。 我们会为他们带来 下周为好。 无需再费周折 这就是它的今天。 我们会看到你下周。 [MUSIC - RAGGA TWINS,“坏男人”]