1 00:00:00,000 --> 00:00:02,405 >> [音乐播放] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 DAVID马兰:好吧,这是CS50。 4 00:00:11,980 --> 00:00:13,740 这是八周的端部。 5 00:00:13,740 --> 00:00:15,887 而今天,我们开始 填写一些作品 6 00:00:15,887 --> 00:00:17,720 当涉及到建设 事情在网络上。 7 00:00:17,720 --> 00:00:20,020 所以,记得在周一 我们花了很多的时间 8 00:00:20,020 --> 00:00:22,530 在PHP中,这是该动态 编程语言 9 00:00:22,530 --> 00:00:26,872 让我们输出,其中包括 东西,HTML和其他这样的内容 10 00:00:26,872 --> 00:00:27,830 我们将要看到的。 11 00:00:27,830 --> 00:00:30,871 但是,我们还没有真正了解了如何 我们要存储任何信息。 12 00:00:30,871 --> 00:00:34,477 事实上,几乎任何超 有趣的网站,你今天的访问 13 00:00:34,477 --> 00:00:36,560 有某种数据库 在后端,对不对? 14 00:00:36,560 --> 00:00:39,540 Facebook的肯定是存储大量数据 关于我们和Gmail存储的所有一切 15 00:00:39,540 --> 00:00:40,210 你的电子邮件。 16 00:00:40,210 --> 00:00:44,150 >> 因此,许多其他网站不只是 静态内容的信息。 17 00:00:44,150 --> 00:00:45,640 这在某种程度上实际动​​态。 18 00:00:45,640 --> 00:00:48,480 您所提供的输入,它更新 该页面为其他人。 19 00:00:48,480 --> 00:00:50,620 你得到的消息,你送 消息,等等。 20 00:00:50,620 --> 00:00:54,250 所以今天,我们来看看更接近 一期工程的基础 21 00:00:54,250 --> 00:00:57,330 你会潜入下一 本周,CS50融资,这 22 00:00:57,330 --> 00:01:00,509 实际上是要你打造 东西不是C,但在PHP。 23 00:01:00,509 --> 00:01:02,550 一个网站,看起来 有点像这样 24 00:01:02,550 --> 00:01:05,810 允许购买和出售 股票,实际上是 25 00:01:05,810 --> 00:01:09,044 会后,实时绘制 股票数据来自雅虎财经。 26 00:01:09,044 --> 00:01:11,960 所以最终,你将有 幻想为自己和用户 27 00:01:11,960 --> 00:01:14,550 那你实际上购买和销售 股票,获得了近实时 28 00:01:14,550 --> 00:01:16,800 更新,管理 投资组合,所有这些都 29 00:01:16,800 --> 00:01:20,310 将要求具有, 最终,用户的数据库。 30 00:01:20,310 --> 00:01:23,330 >> 所以,在你自己的话, 特别是如果你不 31 00:01:23,330 --> 00:01:25,670 超级熟悉电脑 科学或数据库,是什么 32 00:01:25,670 --> 00:01:30,790 你知道一个数据库是 现在,在非技术方面? 33 00:01:30,790 --> 00:01:32,300 它是什么? 34 00:01:32,300 --> 00:01:36,882 你会如何​​形容它 一个室友还是朋友? 35 00:01:36,882 --> 00:01:40,100 >> 听众:[听不清] 信息[听不清] 36 00:01:40,100 --> 00:01:44,430 >> DAVID马兰:所以,信息的列表, 或store--的信息的列表 37 00:01:44,430 --> 00:01:47,160 你可能要存储 有关的东西,比如一个用户。 38 00:01:47,160 --> 00:01:50,190 什么做的用户有 与他们有联系? 39 00:01:50,190 --> 00:01:53,160 如果你在Facebook或用户 Gmail的,有什么特点 40 00:01:53,160 --> 00:01:54,940 我们所有的用户有哪些? 41 00:01:54,940 --> 00:01:58,530 像,什么可能是一些 在电子表格中的列,这是我们 42 00:01:58,530 --> 00:01:59,390 提到最后一次? 43 00:01:59,390 --> 00:02:01,140 因为同样,你可以 认为数据库 44 00:02:01,140 --> 00:02:05,810 真如看上Excel文件或者谷歌 电子表格或Apple号文件。 45 00:02:05,810 --> 00:02:08,280 >> 那么,你怎么想的 当你想到一个用户? 46 00:02:08,280 --> 00:02:11,290 它们有什么? 47 00:02:11,290 --> 00:02:11,790 那是什么? 48 00:02:11,790 --> 00:02:12,470 >> 听众:名称。 49 00:02:12,470 --> 00:02:13,303 >> DAVID马兰:名称。 50 00:02:13,303 --> 00:02:16,840 所以,如果名字一样,大卫·马兰 将是一些用户的名称。 51 00:02:16,840 --> 00:02:17,980 还有什么没有用户有哪些? 52 00:02:17,980 --> 00:02:18,770 >> 听众:一个ID。 53 00:02:18,770 --> 00:02:19,561 >> DAVID马兰:一个ID。 54 00:02:19,561 --> 00:02:23,320 因此,像一个ID号,如您哈佛 ID或您的耶鲁大学网络ID等。 55 00:02:23,320 --> 00:02:24,923 还有什么可能用户有哪些? 56 00:02:24,923 --> 00:02:25,890 >> 听众:密码。 57 00:02:25,890 --> 00:02:29,240 >> DAVID马兰:密码,也许一个 地址,可以是电话号码,也许 58 00:02:29,240 --> 00:02:30,050 电子邮件地址。 59 00:02:30,050 --> 00:02:32,640 所以,有田,这一束束 排序可能失控 60 00:02:32,640 --> 00:02:34,760 很快,一旦你开始 意识到,哦,让我们存储此 61 00:02:34,760 --> 00:02:36,190 让我们存储这个那个。 62 00:02:36,190 --> 00:02:37,657 >> 但是,我们如何真正做到这一点? 63 00:02:37,657 --> 00:02:39,740 如此反复,心智模式 有今天的我们 64 00:02:39,740 --> 00:02:42,320 深入实际的SQL, 结构化查询语言, 65 00:02:42,320 --> 00:02:44,186 是,看起来像这样的数据库。 66 00:02:44,186 --> 00:02:45,310 这只是行和列。 67 00:02:45,310 --> 00:02:48,309 你能想象谷歌电子表格 或任何数量的其他方案。 68 00:02:48,309 --> 00:02:52,130 但是,什么是有关MySQL,这是关键 数据库软件,我们要使用, 69 00:02:52,130 --> 00:02:54,920 自由公开 available--的Facebook应用 70 00:02:54,920 --> 00:02:59,200 它和任何数量的其它websites-- 数据库存储的东西关系性。 71 00:02:59,200 --> 00:03:01,770 和关系数据库 只是意味着一个字面 72 00:03:01,770 --> 00:03:03,672 存储以行和列数据。 73 00:03:03,672 --> 00:03:04,630 就这么简单。 74 00:03:04,630 --> 00:03:07,230 >> 因此,即使是像甲骨文的 你可能也听到了 75 00:03:07,230 --> 00:03:08,271 是关系数据库。 76 00:03:08,271 --> 00:03:10,929 和罩的下面,它 将数据存储在行和列。 77 00:03:10,929 --> 00:03:12,970 而甲骨文向您收取 大量的资金要做到这一点, 78 00:03:12,970 --> 00:03:15,550 而MySQL的费用 你什么的一样。 79 00:03:15,550 --> 00:03:18,790 因此,SQL是要给我们 至少四个操作。 80 00:03:18,790 --> 00:03:23,190 选择数据,就像读的能力 数据,插入,删除和更新数据。 81 00:03:23,190 --> 00:03:25,525 换句话说,这些是 真正的四个按键操作 82 00:03:25,525 --> 00:03:28,950 这将会让我们改变 东西在这些行和列。 83 00:03:28,950 --> 00:03:33,250 >> 我们将利用今天特别工具 学习SQL和它玩 84 00:03:33,250 --> 00:03:34,627 再次调用PHP MyAdmin。 85 00:03:34,627 --> 00:03:35,460 它是基于Web的工具。 86 00:03:35,460 --> 00:03:38,200 总巧合的是, 它是用PHP编写的。 87 00:03:38,200 --> 00:03:42,400 但是,这将给予我们一个图形化 用户界面让我们能够真正 88 00:03:42,400 --> 00:03:46,054 创建这些行和列 然后通过代码与他们交谈。 89 00:03:46,054 --> 00:03:47,970 那么,让我们现在就开始 我认为是坦然 90 00:03:47,970 --> 00:03:51,000 一种有趣的过程 构建网站的后端, 91 00:03:51,000 --> 00:03:54,580 用户不要的部分 见,但肯定做的关心, 92 00:03:54,580 --> 00:03:56,170 因为那是相当的数据是怎么回事。 93 00:03:56,170 --> 00:03:59,570 如此,类似于C和一个 少一点像PHP, 94 00:03:59,570 --> 00:04:04,954 SQL或支持一个数据库 SQL中,具有至少这些数据类型 95 00:04:04,954 --> 00:04:05,870 和其他人一束束。 96 00:04:05,870 --> 00:04:08,107 CHAR,VARCHAR,INT,BIGINT, 十进制和DATETIME。 97 00:04:08,107 --> 00:04:09,940 还有的一个整体 一堆其他的功能, 98 00:04:09,940 --> 00:04:11,940 但让我们通过这样做 实际例子的方式。 99 00:04:11,940 --> 00:04:16,450 >> 我要进入​​CS50 IDE 在这里,在前进,我已经登录 100 00:04:16,450 --> 00:04:19,372 而且我还参观了一个网址 该工具被称为PHP MyAdmin。 101 00:04:19,372 --> 00:04:22,580 而在问题设置七,我们将告诉 你到底怎么去这个接口 102 00:04:22,580 --> 00:04:23,200 为好。 103 00:04:23,200 --> 00:04:25,640 在左上角, 注意到它说的讲座。 104 00:04:25,640 --> 00:04:27,610 而这只是意味着 事先,我创建 105 00:04:27,610 --> 00:04:31,360 一个空数据库名为讲座 有没有在它的电子表格呢。 106 00:04:31,360 --> 00:04:32,600 有没有行和列。 107 00:04:32,600 --> 00:04:34,308 因为第一 事情,我们要做的 108 00:04:34,308 --> 00:04:37,100 在开始创建表 那将存放我们的用户。 109 00:04:37,100 --> 00:04:39,100 >> 因此,从字面上过 这里的权利,我 110 00:04:39,100 --> 00:04:42,070 要告诉数据库 我希望有一个表称为用户。 111 00:04:42,070 --> 00:04:44,845 所以,这就像文件,我 要存储在我所有的数据。 112 00:04:44,845 --> 00:04:45,720 有多少列? 113 00:04:45,720 --> 00:04:47,740 好吧,让我们保持简单了。 114 00:04:47,740 --> 00:04:51,855 我只是想存储像 的用户名和用于用户的名称。 115 00:04:51,855 --> 00:04:53,020 我们会从小事做起。 116 00:04:53,020 --> 00:04:55,370 所以,我想两列总。 117 00:04:55,370 --> 00:04:57,360 而且我要继续前进,然后点击开始。 118 00:04:57,360 --> 00:04:59,210 然后,对于这些 列,我要去 119 00:04:59,210 --> 00:05:04,576 如果互联网do-- cooperates--没事, 120 00:05:04,576 --> 00:05:05,950 所以我们要再试一次。 121 00:05:05,950 --> 00:05:09,180 我要创建一个名为表 有两列,用户点击Go,确定。 122 00:05:09,180 --> 00:05:10,520 现在,我们已经得到了它的真快。 123 00:05:10,520 --> 00:05:12,065 谢谢,非常出色地完成。 124 00:05:12,065 --> 00:05:14,440 好吧,那我们要 这些列被称为? 125 00:05:14,440 --> 00:05:16,080 >> 因此,人会被称为用户名。 126 00:05:16,080 --> 00:05:19,480 所以,我看到这里 - 和接口 坦率地说变得有点难看,最终, 127 00:05:19,480 --> 00:05:21,270 一旦你开始输入所有这些数据。 128 00:05:21,270 --> 00:05:27,450 但是,什么是好的是那种 矛盾的是,我创建列, 129 00:05:27,450 --> 00:05:29,977 但该工具具有呆呆 摆开行 130 00:05:29,977 --> 00:05:31,560 这样我可以配置这些列。 131 00:05:31,560 --> 00:05:33,550 所以,有两个空白有名称下。 132 00:05:33,550 --> 00:05:36,180 与这些领域中的一个予 要叫用户名, 133 00:05:36,180 --> 00:05:38,000 和其他领域我想调用的名称。 134 00:05:38,000 --> 00:05:40,340 >> 现在我不得不选择 数据类型为这些事情。 135 00:05:40,340 --> 00:05:42,330 如此,而在Excel中 和谷歌电子表格, 136 00:05:42,330 --> 00:05:45,531 如果你想要一个列,你从字面上 只需输入姓名或用户名,按Enter键。 137 00:05:45,531 --> 00:05:48,030 也许你把它大胆的脸 仅仅是为了清楚,但仅此而已。 138 00:05:48,030 --> 00:05:50,140 你不指定 类型列。 139 00:05:50,140 --> 00:05:53,790 现在,在谷歌电子表格或Excel中, 可以指定数据的呈现方式。 140 00:05:53,790 --> 00:05:58,120 你可以去格式菜单,你 可以指定显示此像美元符号, 141 00:05:58,120 --> 00:05:59,900 显示此像一个浮点值。 142 00:05:59,900 --> 00:06:01,990 >> 因此,它在精神相似 这就是我们要去做, 143 00:06:01,990 --> 00:06:04,740 但其实这是要逼 数据为特定类型。 144 00:06:04,740 --> 00:06:07,750 现在,尽管刚才我 说,只有少数的数据类型, 145 00:06:07,750 --> 00:06:11,120 这事实上是在 一大堆,而且他们 146 00:06:11,120 --> 00:06:12,910 在不同程度上的特殊性。 147 00:06:12,910 --> 00:06:14,970 而作为一个不谈,你 甚至可以做花哨的东西 148 00:06:14,970 --> 00:06:17,520 就像存储几何 内的数据库。 149 00:06:17,520 --> 00:06:19,250 你可以存放东西 如GPS坐标 150 00:06:19,250 --> 00:06:22,420 居然发现,数学, 是接近别人点。 151 00:06:22,420 --> 00:06:24,128 但是,我们要 保持这个超级简单 152 00:06:24,128 --> 00:06:26,800 而上到这里,所有的 所谓的字符串类型。 153 00:06:26,800 --> 00:06:29,240 >> 所以,这里是一个列表 一大堆的选项。 154 00:06:29,240 --> 00:06:32,740 CHAR,VARCHAR,TINYTEXT, MEDIUMTEXT,LONGTEXT。 155 00:06:32,740 --> 00:06:34,110 而且它是一种势不可挡。 156 00:06:34,110 --> 00:06:37,610 不幸的是,有些 矛盾的是,以C, 157 00:06:37,610 --> 00:06:40,120 一个CHAR是不是一个真正的CHAR。 158 00:06:40,120 --> 00:06:44,170 如果您在数据库中指定 您的数据类型为CHAR, 159 00:06:44,170 --> 00:06:47,390 这意味着,是的,​​这是一个 CHAR,但它是一个或多个字符。 160 00:06:47,390 --> 00:06:49,630 你必须指定 有多少个字符,你想要的。 161 00:06:49,630 --> 00:06:51,636 那么,什么是一个典型的 长度用户名? 162 00:06:51,636 --> 00:06:52,760 是否有限制一般? 163 00:06:52,760 --> 00:06:53,920 >> 听众:[听不清] 164 00:06:53,920 --> 00:06:55,050 >> DAVID马兰:16可能? 165 00:06:55,050 --> 00:06:55,990 类似的东西。 166 00:06:55,990 --> 00:06:57,948 要知道,早在 一天,它曾经是八强。 167 00:06:57,948 --> 00:07:00,289 有时是16,有时候 它比那还要多。 168 00:07:00,289 --> 00:07:02,080 因此,这并不 意思是给我一个字符。 169 00:07:02,080 --> 00:07:04,730 这意味着我必须指定 该字段的长度, 170 00:07:04,730 --> 00:07:07,402 现在,我可能会说16。 171 00:07:07,402 --> 00:07:08,610 而且有一个权衡这里。 172 00:07:08,610 --> 00:07:11,360 所以,我们会看到一个时刻 这意味着之一, 173 00:07:11,360 --> 00:07:14,620 每一个用户名必须为16个字符。 174 00:07:14,620 --> 00:07:18,720 但是且慢,M-A-L-A-N。如果是这样的 我的用户名和我只使用五, 175 00:07:18,720 --> 00:07:23,070 你会建议数据库 做了其他11个字符 176 00:07:23,070 --> 00:07:24,471 我已经预留空间? 177 00:07:24,471 --> 00:07:25,220 你会怎么做? 178 00:07:25,220 --> 00:07:26,480 >> 听众:[听不清] 179 00:07:26,480 --> 00:07:27,160 >> DAVID马兰:是啊,刚 让他们都为空。 180 00:07:27,160 --> 00:07:28,290 让他们的空间。 181 00:07:28,290 --> 00:07:30,816 但可能为空,所以 很多反斜杠零。 182 00:07:30,816 --> 00:07:33,190 因此,在一方面,我们 现在确信,我的用户名 183 00:07:33,190 --> 00:07:34,780 不能超过16个字符。 184 00:07:34,780 --> 00:07:37,590 而另一面是 如果我有一个很长的名字 185 00:07:37,590 --> 00:07:39,940 或者需要一个很长的 用户名像一些你 186 00:07:39,940 --> 00:07:44,840 球员可能在该大学或 在Yale.edu,你不能有一个。 187 00:07:44,840 --> 00:07:47,177 因此事实上,如果你 曾经注册了一个网站 188 00:07:47,177 --> 00:07:49,385 你挨骂了说 您的密码太长 189 00:07:49,385 --> 00:07:52,710 或者您的用户名太长了,这是 仅仅因为一个程序员,当 190 00:07:52,710 --> 00:07:55,500 配置自己的数据库, 决定该字段将 191 00:07:55,500 --> 00:07:57,150 不要超过这个长度。 192 00:07:57,150 --> 00:08:00,580 >> 好吧,那么,如果 我们继续来命名? 193 00:08:00,580 --> 00:08:05,240 应该多长一个 典型的人的名字是什么? 194 00:08:05,240 --> 00:08:07,492 多少个字符,16? 195 00:08:07,492 --> 00:08:09,450 我猜我们可以 发现有人在这个房间 196 00:08:09,450 --> 00:08:13,210 其中,由他或她的第一个加上最后 名称是超过16个字符长。 197 00:08:13,210 --> 00:08:14,850 那么,什么是重要的是,17好? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 更大? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> 听众:[听不清] 203 00:08:21,855 --> 00:08:23,700 DAVID马兰:5000,噢,我的上帝。 204 00:08:23,700 --> 00:08:26,309 所以,这可能是一个不错的 上界,我们可以说。 205 00:08:26,309 --> 00:08:28,350 在这里,我们种得 做出判断调用。 206 00:08:28,350 --> 00:08:30,400 像,没有正确的答案。 207 00:08:30,400 --> 00:08:32,740 无限是不太可能的, 因为我们最终 208 00:08:32,740 --> 00:08:34,781 要have--我们 要运行内存不足。 209 00:08:34,781 --> 00:08:36,909 因此,我们必须做出一个 在某一点主观判断。 210 00:08:36,909 --> 00:08:41,010 >> 非常常见的是,例如, 以use--,让我指定CHAR在这里 211 00:08:41,010 --> 00:08:46,050 作为before-- 255是字面上 在这个数据库软件上限 212 00:08:46,050 --> 00:08:46,700 几年前。 213 00:08:46,700 --> 00:08:48,575 因此,很多人的 只想说,挺好的。 214 00:08:48,575 --> 00:08:49,420 255的极限。 215 00:08:49,420 --> 00:08:50,620 让我们只使用最高。 216 00:08:50,620 --> 00:08:51,870 这是很荒谬的。 217 00:08:51,870 --> 00:08:55,060 就像,如果你输入某人的 命名为200加字, 218 00:08:55,060 --> 00:08:56,140 这有点可笑。 219 00:08:56,140 --> 00:08:59,624 >> 但是,请记住,ASCII不 对于角色的系统。 220 00:08:59,624 --> 00:09:01,540 因此,特别是在一 很多亚洲语言 221 00:09:01,540 --> 00:09:04,248 那里的人物,我们不能 表达对喜欢我的美式键盘 222 00:09:04,248 --> 00:09:08,209 键盘,一些字符实际 占用16位而不是8位。 223 00:09:08,209 --> 00:09:10,250 所以,这其实 是不是所有的不合理 224 00:09:10,250 --> 00:09:12,250 我们需要更多的 空间,如果我们想拟合 225 00:09:12,250 --> 00:09:16,252 除极美大字符 中心的那些我们倾向于讨论。 226 00:09:16,252 --> 00:09:17,460 因此,我们需要一些上界。 227 00:09:17,460 --> 00:09:21,470 我不知道最好的是什么, 但255通常是一个常见的​​一种。 228 00:09:21,470 --> 00:09:22,700 25感觉低。 229 00:09:22,700 --> 00:09:23,857 16,32感觉到低。 230 00:09:23,857 --> 00:09:25,690 我会犯错就在身边 的更高的东西。 231 00:09:25,690 --> 00:09:27,330 但是,有一个权衡,一如既往。 232 00:09:27,330 --> 00:09:31,902 什么是,也许,明显 权衡保留255个字符的 233 00:09:31,902 --> 00:09:33,360 在我的数据库中每个人的名字吗? 234 00:09:33,360 --> 00:09:34,230 >> 听众:[听不清] 235 00:09:34,230 --> 00:09:34,510 >> DAVID马兰:那是什么? 236 00:09:34,510 --> 00:09:35,430 >> 听众:[听不清] 237 00:09:35,430 --> 00:09:37,138 >> DAVID马兰:这是一个 大量的内存,对不对? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N。我也只是浪费250 文字只是为了保存我的名字 239 00:09:42,280 --> 00:09:46,000 防守,以防万一有人 在班上有一个很长的名字。 240 00:09:46,000 --> 00:09:47,940 这似乎是不适当的权衡。 241 00:09:47,940 --> 00:09:52,040 >> 所以,事实证明,SQL, 这个数据库语言, 242 00:09:52,040 --> 00:09:55,480 实际上支持的东西 所谓的VARCHAR或CHAR的变量。 243 00:09:55,480 --> 00:09:59,390 这是一种很好的,这 允许您指定不是一个固定的 244 00:09:59,390 --> 00:10:01,900 宽度,而是可变的宽度。 245 00:10:01,900 --> 00:10:05,060 更具体地,一 字段的最大宽度。 246 00:10:05,060 --> 00:10:08,901 所以,这意味着一个名称可以 不超过250个字符, 247 00:10:08,901 --> 00:10:10,150 但可以肯定是少了。 248 00:10:10,150 --> 00:10:11,733 并且数据库将是聪明的。 249 00:10:11,733 --> 00:10:14,860 如果放在M-A-L-A-N, 它一定会用五年, 250 00:10:14,860 --> 00:10:18,120 也许六个字节像 结尾的空字符, 251 00:10:18,120 --> 00:10:23,330 而不是额外花费 249或250字节不必要的。 252 00:10:23,330 --> 00:10:27,380 >> 因此,这似乎是我应该 已经开始与这个故事。 253 00:10:27,380 --> 00:10:29,140 但总有一个权衡。 254 00:10:29,140 --> 00:10:33,024 因此,一方面,用户名我已经 指定到被硬编码在16 255 00:10:33,024 --> 00:10:34,940 也许这不是 正确的电话,也许它 256 00:10:34,940 --> 00:10:40,040 是的,但为什么不使用 VARCHAR处理的一切? 257 00:10:40,040 --> 00:10:42,020 >> 它的存在是有原因的。 258 00:10:42,020 --> 00:10:46,200 为什么不使用VARCHAR处理的各个领域 其长度不知道提前 259 00:10:46,200 --> 00:10:48,180 如果这似乎是一个伟大的事情,对不对? 260 00:10:48,180 --> 00:10:50,482 只使用尽可能多的空间 你需要达到这个限制? 261 00:10:50,482 --> 00:10:51,271 >> 听众:慢。 262 00:10:51,271 --> 00:10:52,146 DAVID马兰:拼写? 263 00:10:52,146 --> 00:10:53,120 听众:使得它更慢? 264 00:10:53,120 --> 00:10:53,970 DAVID马兰:哦,它的速度较慢。 265 00:10:53,970 --> 00:10:55,720 好,这几乎总是 答案,坦率地说。 266 00:10:55,720 --> 00:10:56,520 就像,什么权衡? 267 00:10:56,520 --> 00:10:58,570 它要么花费更多的空间 或者它花费更多的时间。 268 00:10:58,570 --> 00:11:00,111 所以,在这种情况下,可能会变慢。 269 00:11:00,111 --> 00:11:00,920 为什么呢? 270 00:11:00,920 --> 00:11:05,830 >> 听众:[听不清] 确定[听不清]。 271 00:11:05,830 --> 00:11:06,640 >> DAVID马兰:好。 272 00:11:06,640 --> 00:11:09,670 所以,你可能还记得,即使 PSED5,玩你的方法 273 00:11:09,670 --> 00:11:12,750 到字典中,如果你有 动态分配内存或者保留 274 00:11:12,750 --> 00:11:14,630 生长缓冲,即 实际上可以是缓慢的。 275 00:11:14,630 --> 00:11:16,963 如果你要调用malloc 引擎盖下,也许 276 00:11:16,963 --> 00:11:19,610 这就是MySQL正在做的,所以 肯定有可能出现这种情形。 277 00:11:19,610 --> 00:11:22,430 如果你想办法 回到PSet--甚至 278 00:11:22,430 --> 00:11:26,340 周二,当我们做的东西像 二进制搜索,甚至线性搜索, 279 00:11:26,340 --> 00:11:30,690 大约每一个字漂亮的事情之一 在一列中的一个数据库或每一个字 280 00:11:30,690 --> 00:11:33,690 确切地说是相同的长度,甚至 如果一大堆这些字符 281 00:11:33,690 --> 00:11:37,390 是空白的,是可以使用 对数据的随机存取,对不对? 282 00:11:37,390 --> 00:11:40,310 >> 如果你知道,每一个 字是16个字符了, 283 00:11:40,310 --> 00:11:46,460 你可以使用指针运算,所以 说话,去美国的16,32,48,64, 284 00:11:46,460 --> 00:11:49,589 你可以只跳 立即使用算术 285 00:11:49,589 --> 00:11:51,130 任何在你的数据库的话。 286 00:11:51,130 --> 00:11:54,280 而如果它是一个VARCHAR, 你有什么,而不是必须做的? 287 00:11:54,280 --> 00:11:55,960 >> [电话铃声] 288 00:11:55,960 --> 00:11:58,680 >> 如果它是一个VARCHAR,你 不能使用随机接入。 289 00:11:58,680 --> 00:12:01,341 你必须寻找什么或做什么? 290 00:12:01,341 --> 00:12:01,840 是吗? 291 00:12:01,840 --> 00:12:03,240 >> 听众:[听不清] 292 00:12:03,240 --> 00:12:04,310 >> DAVID马兰:你看 通过whole--跟踪 293 00:12:04,310 --> 00:12:06,518 通过整个名单 寻找什么,最有可能的? 294 00:12:06,518 --> 00:12:08,356 什么样的特殊价值? 295 00:12:08,356 --> 00:12:09,230 听众:[听不清] 296 00:12:09,230 --> 00:12:11,105 DAVID马兰:展望 对于空终结 297 00:12:11,105 --> 00:12:13,637 该标定词语的分离。 298 00:12:13,637 --> 00:12:15,720 如此反复,权衡和 没有正确的答案。 299 00:12:15,720 --> 00:12:18,380 但是,这是在哪里,特别是 当你的用户获得很多 300 00:12:18,380 --> 00:12:21,700 并在服务器上的负载时, 使用人数就变得很高, 301 00:12:21,700 --> 00:12:23,650 这些其实都是平凡的决定。 302 00:12:23,650 --> 00:12:26,640 因此,我们可以将这些作为这一点,但 让我们向下滚动到正确的 303 00:12:26,640 --> 00:12:27,332 这里。 304 00:12:27,332 --> 00:12:30,290 现在,有一对夫妇列 在这里我们必须做出一个主观判断。 305 00:12:30,290 --> 00:12:35,170 是否有意义,以允许用户的 名,一个用户的用户名或用户的 306 00:12:35,170 --> 00:12:36,370 名,为空? 307 00:12:36,370 --> 00:12:37,610 也就是说,只是空白。 308 00:12:37,610 --> 00:12:40,360 感觉有点无厘头,所以我 不会去检查那些箱子。 309 00:12:40,360 --> 00:12:42,670 但事实证明,在 数据库,你可以说, 310 00:12:42,670 --> 00:12:44,620 有人可以有选择地将这个值。 311 00:12:44,620 --> 00:12:47,180 该列没有 实际上在那里。 312 00:12:47,180 --> 00:12:48,570 >> 现在,有这个下拉菜单。 313 00:12:48,570 --> 00:12:50,810 同时注意我仍然 在第一行中出现, 314 00:12:50,810 --> 00:12:52,520 所以我说的是现在的用户名。 315 00:12:52,520 --> 00:12:56,290 而事实证明,一个数据库, 不像一个简单单纯的电子表格, 316 00:12:56,290 --> 00:12:58,520 拥有强大的功能称为索引。 317 00:12:58,520 --> 00:13:02,600 和索引是告诉的方法 数据库事先知道我的人 318 00:13:02,600 --> 00:13:03,900 我比你更聪明。 319 00:13:03,900 --> 00:13:10,430 >> 我知道是什么类型的查询,请选择 或插入或删除或更新, 320 00:13:10,430 --> 00:13:13,182 我的代码将结束 了做这个数据库。 321 00:13:13,182 --> 00:13:14,390 我想读大量的数据。 322 00:13:14,390 --> 00:13:15,681 我想插入大量的数据。 323 00:13:15,681 --> 00:13:17,530 我希望不断 删除了大量数据。 324 00:13:17,530 --> 00:13:21,520 如果我知道我将要 访问字段名一样不少, 325 00:13:21,520 --> 00:13:24,770 我可以抢先告诉 数据库中,我懂得比你多, 326 00:13:24,770 --> 00:13:29,220 我想法令, 你应该指数这一领域。 327 00:13:29,220 --> 00:13:33,200 其中,索引字段或一列 意味着提前数据库 328 00:13:33,200 --> 00:13:37,040 应借鉴一些想法的,比如, 4周,五,六从CS50 329 00:13:37,040 --> 00:13:39,240 实际上建立 类似二进制搜索 330 00:13:39,240 --> 00:13:41,560 树什么的 一般称为乙树 331 00:13:41,560 --> 00:13:43,410 你会学习 在这样一个类CS124 332 00:13:43,410 --> 00:13:46,710 在哈佛,一个算法类, 或任何其他地方。 333 00:13:46,710 --> 00:13:49,570 >> 数据库及智能 谁实现了它的人 334 00:13:49,570 --> 00:13:53,880 会找出如何存储 的信息表 335 00:13:53,880 --> 00:13:57,061 在内存中,以便搜索和 其他的操作速度非常快。 336 00:13:57,061 --> 00:13:58,060 你不必这样做。 337 00:13:58,060 --> 00:14:00,640 您没有实现 线性查找或二进制搜索 338 00:14:00,640 --> 00:14:03,300 或合并排序或选择 排序,任何。 339 00:14:03,300 --> 00:14:06,590 该数据库会为你,如果你告诉 它抢先索引这一领域。 340 00:14:06,590 --> 00:14:09,100 >> 你也可以看到,有 其他一些特点 341 00:14:09,100 --> 00:14:11,010 我们可以告诉数据库执行。 342 00:14:11,010 --> 00:14:16,431 可能是什么意思,如果我选与众不同 从这个菜单,只是凭直觉? 343 00:14:16,431 --> 00:14:16,930 是吗? 344 00:14:16,930 --> 00:14:17,889 >> 听众:[听不清] 345 00:14:17,889 --> 00:14:19,930 DAVID马兰:是的, 用户名必须是唯一的。 346 00:14:19,930 --> 00:14:23,330 这是好事还是坏事 一个数据库,与用户网站? 347 00:14:23,330 --> 00:14:24,965 如果用户名是唯一的? 348 00:14:24,965 --> 00:14:25,880 是的,也许。 349 00:14:25,880 --> 00:14:27,800 如果这是什么 领域,我们用它来登录, 350 00:14:27,800 --> 00:14:31,867 你真的不希望人们有 相同的感觉,或相同的用户名。 351 00:14:31,867 --> 00:14:33,700 因此,我们可以有 数据库执行有这么 352 00:14:33,700 --> 00:14:37,880 现在在我的PHP代码或任何语言, 我没有,比如,检查 353 00:14:37,880 --> 00:14:41,490 一定做到这一点的用户名 存在之前,我让别人注册? 354 00:14:41,490 --> 00:14:46,690 该数据库不会让两个人命名 大卫或马兰斯登记在这种情况下。 355 00:14:46,690 --> 00:14:50,030 >> 和作为题外话,即使这 菜单仅允许您选择一个, 356 00:14:50,030 --> 00:14:54,550 唯一索引是这 超快速的性能指数, 357 00:14:54,550 --> 00:14:56,100 但它也实施唯一性。 358 00:14:56,100 --> 00:14:58,850 我们再回过头来什么 另外两个是指在短短的时刻。 359 00:14:58,850 --> 00:15:00,930 同时,如果我去 我的第二排,这 360 00:15:00,930 --> 00:15:06,230 是用户的名字,我应该说明 该名称应该是唯一的? 361 00:15:06,230 --> 00:15:09,550 不,因为你可以肯定 have--有没有两个大卫 362 00:15:09,550 --> 00:15:11,050 马兰斯在这个房间里,最有可能的。 363 00:15:11,050 --> 00:15:14,290 但是,如果我们选择一个不同的名称, 我们可以肯定有冲突。 364 00:15:14,290 --> 00:15:16,130 >> 回想哈希表等。 365 00:15:16,130 --> 00:15:18,604 所以,我们当然不希望 以使该名称领域独树一帜。 366 00:15:18,604 --> 00:15:21,270 所以,我们只是要离开 随着破折号,破折号,破折号,什么都没有。 367 00:15:21,270 --> 00:15:22,660 而且我要离开 一切孤单。 368 00:15:22,660 --> 00:15:25,035 事实上,大多数这些字段 我们不会去关心。 369 00:15:25,035 --> 00:15:27,830 而当我准备好保存此, 如果互联网合作, 370 00:15:27,830 --> 00:15:35,032 我点击保存,而且非常,非常,非常 慢慢的数据库是否得到保存。 371 00:15:35,032 --> 00:15:37,240 现在我回到这个 接口,这不可否认, 372 00:15:37,240 --> 00:15:38,680 是压倒性的第一眼。 373 00:15:38,680 --> 00:15:42,450 但是,所有我要做的就是点击 就在左上角的Word用户。 374 00:15:42,450 --> 00:15:47,630 我要在这里走了,点击 用户,默认情况下,它 375 00:15:47,630 --> 00:15:50,180 已经执行了一些SQL,但 更详细的介绍了一下。 376 00:15:50,180 --> 00:15:52,654 这是我做的只是一个汇总。 377 00:15:52,654 --> 00:15:55,320 而且不用担心,你看 何况拉丁美洲和瑞典语这里。 378 00:15:55,320 --> 00:16:00,490 这些只是默认 设置,因为MySQL本来, 379 00:16:00,490 --> 00:16:04,000 或者PHP MyAdmin,发生了两个中的一个 要写入一些瑞典人民。 380 00:16:04,000 --> 00:16:06,100 但是,这无关紧要在我们这里的情况。 381 00:16:06,100 --> 00:16:08,280 >> 好吧,那么,为什么 这一切有意思吗? 382 00:16:08,280 --> 00:16:13,050 事实证明,我可以插入数据 成通过编写代码的数据库。 383 00:16:13,050 --> 00:16:15,940 而我继续前进, 在这里我的文件,我 384 00:16:15,940 --> 00:16:19,000 要继续前进,并假装 这被连接到该数据库,该数据库 385 00:16:19,000 --> 00:16:23,040 它不是此刻,却会 是当我们到的问题设置七人。 386 00:16:23,040 --> 00:16:25,640 而且我要继续前进, 执行一个叫做查询功能, 387 00:16:25,640 --> 00:16:28,730 我们会给你的问题 设置SEVEN公司的分销代码,这 388 00:16:28,730 --> 00:16:31,490 至少需要一个参数, 这仅仅是一个字符串。 389 00:16:31,490 --> 00:16:33,460 一串SQL代码。 390 00:16:33,460 --> 00:16:36,700 所以,你要学习如何 写结构化查询语言。 391 00:16:36,700 --> 00:16:41,270 >> 如果我想插入新行到我 数据库,因为有人已经提交 392 00:16:41,270 --> 00:16:47,600 一个形式我的代码,我会从字面上 写INSERT INTO用户以下 393 00:16:47,600 --> 00:16:52,800 字段:用户名, 逗号,名称,价值, 394 00:16:52,800 --> 00:16:57,480 现在我需要插入 像马兰,和报价, 395 00:16:57,480 --> 00:17:01,490 引文结束“大卫·马兰。”现在 即使对那些不熟悉SQL, 396 00:17:01,490 --> 00:17:07,830 为什么我用单引号 这里面绿色的字符串? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 可能是什么原因吗? 399 00:17:13,040 --> 00:17:14,609 >> 请注意,我是相互混合两种语言。 400 00:17:14,609 --> 00:17:18,099 查询是一个PHP函数, 但它需要一个参数。 401 00:17:18,099 --> 00:17:21,740 而这样的说法有其自身是 写在所谓的另一种语言 402 00:17:21,740 --> 00:17:23,500 SQL,结构化查询语言。 403 00:17:23,500 --> 00:17:27,940 所以,一切,我 这里刚刚凸显 404 00:17:27,940 --> 00:17:30,380 就是这种语言称为SQL。 405 00:17:30,380 --> 00:17:36,290 那么,什么是用单引号, 只是作为一个快速的完整性检查? 406 00:17:36,290 --> 00:17:37,324 前进。 407 00:17:37,324 --> 00:17:37,990 他们是字符串。 408 00:17:37,990 --> 00:17:41,590 所以,报价,引文结束马兰和报价, 引文结束大卫·马兰是字符串。 409 00:17:41,590 --> 00:17:45,210 而只是想直观地现在, 知道你知道C和PHP是什么, 410 00:17:45,210 --> 00:17:50,220 我为什么不这样做,这是我平时 使用双引号的字符串? 411 00:17:50,220 --> 00:17:52,310 为什么我不希望这样做? 412 00:17:52,310 --> 00:17:52,810 是吗? 413 00:17:52,810 --> 00:17:53,685 >> 听众:[听不清] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 DAVID马兰:没错。 416 00:17:57,570 --> 00:17:59,653 因为我已经使用 在途中双引号 417 00:17:59,653 --> 00:18:01,929 参数之外 以PHP函数, 418 00:18:01,929 --> 00:18:03,470 我只想混淆解释。 419 00:18:03,470 --> 00:18:04,860 它不知道,做这些一起去? 420 00:18:04,860 --> 00:18:05,735 难道这些一起去? 421 00:18:05,735 --> 00:18:06,810 难道这些一起去? 422 00:18:06,810 --> 00:18:08,070 所以,我交替代替。 423 00:18:08,070 --> 00:18:11,784 >> 或者,我可以做这样的事情, 反斜杠引号和反斜线报价。 424 00:18:11,784 --> 00:18:14,200 坦率地说,这只是开始 得到非常不可读和丑陋。 425 00:18:14,200 --> 00:18:16,790 但是,这将实现 相同的结果为好。 426 00:18:16,790 --> 00:18:19,760 >> 所以,如果我要执行此 现在查询,让我们看看会发生什么。 427 00:18:19,760 --> 00:18:22,740 现在我要去和而继续前进 不是执行的PHP代码,这 428 00:18:22,740 --> 00:18:24,610 在这里,你会玩 在问题设置七, 429 00:18:24,610 --> 00:18:27,200 我要去,而不是去PHP MyAdmin。 430 00:18:27,200 --> 00:18:29,770 而且我手动去 去到SQL标签, 431 00:18:29,770 --> 00:18:31,580 让我放大在界面上。 432 00:18:31,580 --> 00:18:34,007 而且我要粘贴 我刚才输入的东西。 433 00:18:34,007 --> 00:18:36,090 和颜色编码有 改变了一点点,现在, 434 00:18:36,090 --> 00:18:38,750 只是因为节目形式 事情有点不同。 435 00:18:38,750 --> 00:18:41,960 但是请注意,所有我做 是我说的,插入到用户。 436 00:18:41,960 --> 00:18:45,790 我指定,那么,在一个逗号 分隔括号的列表中两个 437 00:18:45,790 --> 00:18:48,850 我想插入的字段, 然后,我从字面上说,值 438 00:18:48,850 --> 00:18:51,510 紧接着又括号, 然后这两个值 439 00:18:51,510 --> 00:18:53,520 欲插件,和 现在好措施, 440 00:18:53,520 --> 00:18:55,010 我把一个分号结尾。 441 00:18:55,010 --> 00:18:56,570 所以,这不是C.这是不PHP的。 442 00:18:56,570 --> 00:18:59,970 这是现在的SQL,而我把它粘贴 这个基于Web的界面, 443 00:18:59,970 --> 00:19:02,710 只是要告诉我, 当我点击进入, 444 00:19:02,710 --> 00:19:08,060 在数据库中执行此查询 运行CS50的IDE内。 445 00:19:08,060 --> 00:19:09,470 >> 因此,这是很好的。 446 00:19:09,470 --> 00:19:12,520 注意,所述一排 插,去超级快, 447 00:19:12,520 --> 00:19:15,190 0.0054秒插入的数据。 448 00:19:15,190 --> 00:19:16,610 所以,这听起来很健康。 449 00:19:16,610 --> 00:19:19,350 它重新格式化我的查询 我在这里只看到它 450 00:19:19,350 --> 00:19:21,730 在那种颜色编码版本。 451 00:19:21,730 --> 00:19:24,540 但现在,如果我点击 浏览,发现,即使 452 00:19:24,540 --> 00:19:29,070 尽管有上有很多杂乱的 在屏幕上,我的表,现在有两排。 453 00:19:29,070 --> 00:19:30,700 >> 所以,让我继续前进,做一套。 454 00:19:30,700 --> 00:19:33,760 取而代之的是,让我 再次去到SQL标签。 455 00:19:33,760 --> 00:19:40,723 这一次,我会插入类似 罗布和他的名字将是罗布鲍登。 456 00:19:40,723 --> 00:19:42,330 鲍登。 457 00:19:42,330 --> 00:19:44,040 让我们点击保存。 458 00:19:44,040 --> 00:19:46,140 哎呀,宁愿去。 459 00:19:46,140 --> 00:19:48,890 >> 再次单击浏览, 现在发现我有两行。 460 00:19:48,890 --> 00:19:52,390 所以,这只是一种方式更加复杂 开放的谷歌电子表格的方式 461 00:19:52,390 --> 00:19:54,010 只输入一行到一个列。 462 00:19:54,010 --> 00:19:57,070 但是,什么是关键的是, 我们现在有语法 463 00:19:57,070 --> 00:20:00,220 与编写代码,以便 最终,我们实际上可以 464 00:20:00,220 --> 00:20:01,790 做一些与此。 465 00:20:01,790 --> 00:20:05,380 回想一下,PHP支持 超级全局变量。 466 00:20:05,380 --> 00:20:08,415 >> 什么是美元内 登录下划线得到PHP? 467 00:20:08,415 --> 00:20:10,290 我们看了看在一个 两个简单的例子。 468 00:20:10,290 --> 00:20:15,640 而在PSet6,记得你有个招呼 点PHP使用这种变量。 469 00:20:15,640 --> 00:20:17,870 是什么在那里去? 470 00:20:17,870 --> 00:20:21,015 或者是什么呢? 471 00:20:21,015 --> 00:20:22,522 大声一点。 472 00:20:22,522 --> 00:20:23,790 >> 听众:[听不清] 473 00:20:23,790 --> 00:20:25,030 >> DAVID马兰:这是一个雪 种子阵列,这 474 00:20:25,030 --> 00:20:27,714 是说的只是一种奇特的方式 阵列具有键值对。 475 00:20:27,714 --> 00:20:28,880 而且按键不是数字。 476 00:20:28,880 --> 00:20:30,420 他们的单词或字符串。 477 00:20:30,420 --> 00:20:32,750 具体而言,什么 那些键值对? 478 00:20:32,750 --> 00:20:35,110 他们在哪里来的呢? 479 00:20:35,110 --> 00:20:35,620 对不起? 480 00:20:35,620 --> 00:20:36,994 >> 听众:[听不清] 481 00:20:36,994 --> 00:20:37,660 DAVID马兰:没有? 482 00:20:37,660 --> 00:20:40,700 哪里做这些关键 值对来自哪里? 483 00:20:40,700 --> 00:20:42,490 再说一遍? 484 00:20:42,490 --> 00:20:44,610 了吗? 485 00:20:44,610 --> 00:20:46,472 我是唯一的一个听证会的东西吗? 486 00:20:46,472 --> 00:20:47,810 >> [笑] 487 00:20:47,810 --> 00:20:49,042 >> 这是正确的,是吗? 488 00:20:49,042 --> 00:20:50,435 >> 听众:[听不清] 489 00:20:50,435 --> 00:20:52,560 DAVID马兰:是啊,他们 来自查询字符串。 490 00:20:52,560 --> 00:20:55,380 所以,如果你在时间倒带 当我们发挥与谷歌 491 00:20:55,380 --> 00:20:59,600 我们已经去了Google.com斜线 搜索问号Q等于猫, 492 00:20:59,600 --> 00:21:03,550 如果我敲回车,如果 谷歌是在PHP实现, 493 00:21:03,550 --> 00:21:07,017 PHP代码,谷歌写道: 将有机会获得美元符号 494 00:21:07,017 --> 00:21:11,600 强调GET其中内 是一个关键称为Q和一个值 495 00:21:11,600 --> 00:21:17,680 称为猫,它可以然后使用 用来做与实际的搜索。 496 00:21:17,680 --> 00:21:20,860 >> 所以,其实,我要去 现在要做的就是回到我的PHP代码 497 00:21:20,860 --> 00:21:23,140 你会再次看到更多的PSet7。 498 00:21:23,140 --> 00:21:25,440 取而代之的堵漏 在硬编码值,这 499 00:21:25,440 --> 00:21:27,630 似乎并不像一个 非常有活力的网站, 500 00:21:27,630 --> 00:21:30,680 我想给你一个传情 你的实际代码会做。 501 00:21:30,680 --> 00:21:32,854 你会投了两个 问号是这样的。 502 00:21:32,854 --> 00:21:34,270 我不知道用户名是什么。 503 00:21:34,270 --> 00:21:37,390 我不知道是什么 名称将是, 504 00:21:37,390 --> 00:21:39,470 但我知道我可以 动态地得到它们。 505 00:21:39,470 --> 00:21:43,420 >> 所以,如果我们现在编写的代码 在谷歌的服务器上运行的代码, 506 00:21:43,420 --> 00:21:46,940 或者,如果这是个招呼点 PHP,附带PSet6, 507 00:21:46,940 --> 00:21:48,650 我要传递到 查询功能 508 00:21:48,650 --> 00:21:51,450 就像printf的,其他两个参数。 509 00:21:51,450 --> 00:21:57,120 GET,报价,引文结束的用户名, 和GET,报价,引文结束的名字。 510 00:21:57,120 --> 00:22:00,720 现在,请注意什么 一般结构是在这里。 511 00:22:00,720 --> 00:22:03,320 我已经得到了左边 呼叫的右手侧, 512 00:22:03,320 --> 00:22:05,480 在PHP这个函数调用查询。 513 00:22:05,480 --> 00:22:08,160 我仍然有作为第一 的说法,文字只是一个字符串。 514 00:22:08,160 --> 00:22:11,000 >> 但文本的字符串 写在一个叫做SQL语言。 515 00:22:11,000 --> 00:22:12,616 坦率地说,这不是一个很大的语言。 516 00:22:12,616 --> 00:22:14,990 我们只是要说说 它正式的今天,真的。 517 00:22:14,990 --> 00:22:17,031 然后在问题设置 七,有相对 518 00:22:17,031 --> 00:22:18,800 几个特点,我们是 要充分利用。 519 00:22:18,800 --> 00:22:22,530 问号,不过,平均插上 值这里插上另一个值 520 00:22:22,530 --> 00:22:23,130 这里。 521 00:22:23,130 --> 00:22:26,010 而通知中,我遗漏了什么 来自各地的quote--该死 522 00:22:26,010 --> 00:22:30,470 它 - 各地报价 标志着这个时候。 523 00:22:30,470 --> 00:22:34,930 我省略报价 周围的问号标记, 524 00:22:34,930 --> 00:22:36,410 对不起,这一次。 525 00:22:36,410 --> 00:22:38,870 >> 那么,什么是好的关于这个 问号功能, 526 00:22:38,870 --> 00:22:42,830 PHP倾向于支持,Ruby和 Python和其他语言, 527 00:22:42,830 --> 00:22:45,730 这也就意味着插件在一些 珍惜在这里,你知道吗? 528 00:22:45,730 --> 00:22:48,300 你找出是否使用 单引号或双引号。 529 00:22:48,300 --> 00:22:50,966 不要打扰我与那些 智力无趣的细节。 530 00:22:50,966 --> 00:22:53,780 但是,要确保它是正确的 所以,我的代码是最终 531 00:22:53,780 --> 00:22:57,010 操作和安全的,这 将不久有一个含义。 532 00:22:57,010 --> 00:23:00,460 >> 现在,有多少争论总量,只是 要清楚,是查询功能回吐? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 任何人想投了两个多? 535 00:23:07,581 --> 00:23:08,080 三? 536 00:23:08,080 --> 00:23:10,001 当然,为什么? 537 00:23:10,001 --> 00:23:10,920 为什么三顶? 538 00:23:10,920 --> 00:23:12,305 >> 听众:[听不清] 539 00:23:12,305 --> 00:23:13,180 DAVID马兰:没错。 540 00:23:13,180 --> 00:23:14,610 第一部分是字符串。 541 00:23:14,610 --> 00:23:18,640 第二个参数是美元符号 强调GET支架的用户名。 542 00:23:18,640 --> 00:23:21,950 第三个参数是 同样的事情,但只是名字。 543 00:23:21,950 --> 00:23:24,590 因此,换句话说,现在 如果我有一个网页表单 544 00:23:24,590 --> 00:23:27,149 这不得不文本字段, 一个用于该用户的用户名, 545 00:23:27,149 --> 00:23:29,690 一为他或她的名字,只是 就像你在一个网站上看到 546 00:23:29,690 --> 00:23:32,120 当您注册 一些网站,这可能 547 00:23:32,120 --> 00:23:35,450 是在后端的代码 实际执行插入现在 548 00:23:35,450 --> 00:23:37,220 到数据库中。 549 00:23:37,220 --> 00:23:40,870 >> 现在,通过对比,让我们快进。 550 00:23:40,870 --> 00:23:43,840 假设一个用户现在 登录和你想 551 00:23:43,840 --> 00:23:48,860 编写检查是否PHP代码 谁刚刚登陆年代的人 552 00:23:48,860 --> 00:23:52,250 实际上是一个用户,你可以 使用非常简单的语法。 553 00:23:52,250 --> 00:23:55,832 你可以说选择,让我们说 明星,其中星级意味着一切。 554 00:23:55,832 --> 00:23:57,540 我不知道我 希望,所以才给我 555 00:23:57,540 --> 00:24:01,585 从表中的所有列 所谓的用户在哪里,这是很好的。 556 00:24:01,585 --> 00:24:03,710 选择支持什么 所谓的谓语,这是 557 00:24:03,710 --> 00:24:06,630 像排位赛你想要的方式。 558 00:24:06,630 --> 00:24:10,590 其中username等于 报价,引文结束马兰。 559 00:24:10,590 --> 00:24:13,680 所以在这里也一样,我已经嵌入 参数内 560 00:24:13,680 --> 00:24:16,110 一个PHP函数,一行SQL代码。 561 00:24:16,110 --> 00:24:18,680 这SQL代码此 时间是从字面上去 562 00:24:18,680 --> 00:24:21,790 搜索报价,解除引用马兰。 563 00:24:21,790 --> 00:24:24,420 >> 现在,这不是那么有用, 所以我打算跳过 564 00:24:24,420 --> 00:24:28,650 而我要放好 这个技巧的布雷迪,并进入 565 00:24:28,650 --> 00:24:30,990 和插件,而不是 问号在这里。 566 00:24:30,990 --> 00:24:33,290 所以,仅仅是明确的,有什么 应我的第二个参数 567 00:24:33,290 --> 00:24:37,480 可如果有人刚刚登录我 要检查,如果他或她实际上是 568 00:24:37,480 --> 00:24:39,265 用户? 569 00:24:39,265 --> 00:24:40,140 听众:[听不清] 570 00:24:40,140 --> 00:24:40,890 DAVID马兰:是的。 571 00:24:40,890 --> 00:24:44,120 我听到了美元符号下划线 获取报价,引文结束用户名。 572 00:24:44,120 --> 00:24:50,040 这应该返回给我 任何行的在我的数据库 573 00:24:50,040 --> 00:24:51,986 有马兰的用户名。 574 00:24:51,986 --> 00:24:54,860 现在有希望,我要找回 零,如果马兰从来没有来过这里, 575 00:24:54,860 --> 00:24:56,290 或者一个,如果他。 576 00:24:56,290 --> 00:24:59,026 我不应该回来 两个或三个或四个。 577 00:24:59,026 --> 00:24:59,526 为什么呢? 578 00:24:59,526 --> 00:25:00,220 >> 听众:[听不清] 579 00:25:00,220 --> 00:25:01,120 >> DAVID马兰:我说的唯一的,对不对? 580 00:25:01,120 --> 00:25:01,750 原因很简单。 581 00:25:01,750 --> 00:25:04,030 因为我说,这是必须 是唯一的,只是逻辑上, 582 00:25:04,030 --> 00:25:07,940 你只能有零个或一个马兰斯 在这个特殊的数据库表中。 583 00:25:07,940 --> 00:25:10,965 现在,顺便说一句,只要你见过 它,即使我一直使用GET 584 00:25:10,965 --> 00:25:14,350 并且即使PSet6仅用于 GET,你当然可以有POST。 585 00:25:14,350 --> 00:25:17,212 而记得,邮政是另一 技术提交信息 586 00:25:17,212 --> 00:25:19,170 从一种形式,但它 不会在URL显示出来。 587 00:25:19,170 --> 00:25:22,690 这是一个更安全一点肯定是 像用户名和密码, 588 00:25:22,690 --> 00:25:25,210 这PSet7会,其实涉及。 589 00:25:25,210 --> 00:25:28,130 >> 因此,让我们做到这一点在PHP MyAdmin看看会发生什么。 590 00:25:28,130 --> 00:25:30,020 我要去到MySQL选项卡。 591 00:25:30,020 --> 00:25:34,450 并注意为默认值 PHP MyAdmin,只是为了尝试是有益的, 592 00:25:34,450 --> 00:25:37,050 是从用户的其中一个选择的明星。 593 00:25:37,050 --> 00:25:39,430 好了,一个是总是正确的,所以 这有傻有效 594 00:25:39,430 --> 00:25:40,400 只是选择了一切。 595 00:25:40,400 --> 00:25:42,691 但是,我要成为一个小 更多的迂腐和手动 596 00:25:42,691 --> 00:25:45,920 键入了择思达用户的。 597 00:25:45,920 --> 00:25:48,294 >> 现在从技术上来说,你可以 引述的表的名称。 598 00:25:48,294 --> 00:25:50,460 这是罕见的,你必须这样做, 但要注意这些都不是 599 00:25:50,460 --> 00:25:52,240 你的正常报价的美式键盘上。 600 00:25:52,240 --> 00:25:54,760 这就是所谓的反引号,这 一般是在顶部左手 601 00:25:54,760 --> 00:25:56,000 角落你的键盘。 602 00:25:56,000 --> 00:25:58,500 但它是罕见的,你会 确实需要费心的是, 603 00:25:58,500 --> 00:25:59,950 所以我就忽略它们无论如何。 604 00:25:59,950 --> 00:26:02,280 所以,现在,让我继续前进,砸去。 605 00:26:02,280 --> 00:26:06,616 有多少行,我应该得到 回来时,我选择从用户的明星? 606 00:26:06,616 --> 00:26:08,407 >> 听众:[听不清] 607 00:26:08,407 --> 00:26:09,990 DAVID马兰:行数,确保万无一失。 608 00:26:09,990 --> 00:26:12,390 但是,有多少在这 具体的故事,现在呢? 609 00:26:12,390 --> 00:26:14,640 二,因为当时 我和有抢。 610 00:26:14,640 --> 00:26:19,370 所以,如果我点击进入,我看到视觉上 我已经得到了回来,的确,两排。 611 00:26:19,370 --> 00:26:22,060 有很多杂乱的 屏幕上,但我只看到两行。 612 00:26:22,060 --> 00:26:28,580 相反,如果我这样做又做 择思达用户的,其中username 613 00:26:28,580 --> 00:26:31,840 等于报价,引文结束 马兰,现在如果我点击进入, 614 00:26:31,840 --> 00:26:33,970 我只打算拿回一行。 615 00:26:33,970 --> 00:26:36,499 最后,如​​果我做 这样的事情,假设 616 00:26:36,499 --> 00:26:38,290 我不关心 让一切, 617 00:26:38,290 --> 00:26:41,020 这是一种毫无意义的,现在, 因为只有两列。 618 00:26:41,020 --> 00:26:43,103 它不象我选择 一个庞大的数据量。 619 00:26:43,103 --> 00:26:46,720 假设我继续前进, 做选择的名字从 620 00:26:46,720 --> 00:26:51,990 用户,其中username等于马兰, 什么是好的关于SQL诚实, 621 00:26:51,990 --> 00:26:54,290 是,它确实少了点 你告诉它做。 622 00:26:54,290 --> 00:26:57,550 这是非常简洁的,但是你从字面上 只是告诉它你想要做什么。 623 00:26:57,550 --> 00:27:01,130 从用户那里选择名称 用户名等于马兰。 624 00:27:01,130 --> 00:27:03,440 它真的是明确的。 625 00:27:03,440 --> 00:27:08,410 所以,现在如果我打去,有多少 行我该怎么回去? 626 00:27:08,410 --> 00:27:10,770 其中,因为它只是马兰,希望。 627 00:27:10,770 --> 00:27:13,100 或零,如果他不 还有,而是一个最大。 628 00:27:13,100 --> 00:27:17,610 >> 有多少列,我会回来? 629 00:27:17,610 --> 00:27:18,450 有多少列? 630 00:27:18,450 --> 00:27:20,658 这一次,我只是去 得到一个,因为我没有 631 00:27:20,658 --> 00:27:22,380 选择明星,这就是一切。 632 00:27:22,380 --> 00:27:27,900 现在,我只选择名字,所以我 刚回到一列一行。 633 00:27:27,900 --> 00:27:31,730 它看起来有点适当地 可笑的,只是在寻找超 634 00:27:31,730 --> 00:27:33,060 从小喜欢这一点。 635 00:27:33,060 --> 00:27:34,290 那么,到底发生了什么? 636 00:27:34,290 --> 00:27:36,890 当你执行一个SQL 使用select查询, 637 00:27:36,890 --> 00:27:38,700 你在说什么 从数据库返回 638 00:27:38,700 --> 00:27:42,970 就像一个临时表 有行和列,也许, 639 00:27:42,970 --> 00:27:46,260 但忽略任何 是不是你真正选择。 640 00:27:46,260 --> 00:27:49,010 因此,这就像如果有人有一个大 所有的学生电子表格 641 00:27:49,010 --> 00:27:51,610 注册一些 学生团体,和你说, 642 00:27:51,610 --> 00:27:55,097 给我所有谁一直在大一 注册我们的学生群体,有什么 643 00:27:55,097 --> 00:27:56,930 在你的同事 学生团体可以做 644 00:27:56,930 --> 00:27:58,430 是他们可能只是手 你整个电子表格。 645 00:27:58,430 --> 00:27:59,742 这就像说选择明星。 646 00:27:59,742 --> 00:28:02,200 这是一个有点恼人,如果 你只想新生。 647 00:28:02,200 --> 00:28:05,640 所以,如果你不是说, 从数据库表中选择星 648 00:28:05,640 --> 00:28:08,470 其中,一年等于 报价,引文结束大一, 649 00:28:08,470 --> 00:28:10,810 就好像你的朋友 在学生组 650 00:28:10,810 --> 00:28:13,770 从字面上突出显示,并 只复制大一行, 651 00:28:13,770 --> 00:28:16,780 粘贴成一个新的谷歌 电子表格或Excel文件, 652 00:28:16,780 --> 00:28:18,860 递给你回来了 仅生成的文件。 653 00:28:18,860 --> 00:28:21,710 这一切是怎么回事 在概念在这里。 654 00:28:21,710 --> 00:28:23,920 >> 所以,最后,我们能做的 一些很花哨的东西 655 00:28:23,920 --> 00:28:26,560 通过存储之类的东西用户名 和密码等。 656 00:28:26,560 --> 00:28:30,310 但是,事实证明,我们应该做的 有点不同莫过于此。 657 00:28:30,310 --> 00:28:34,750 这并不是说聪明,只 存储的用户名和密码。 658 00:28:34,750 --> 00:28:37,790 前面有人,我觉得 到这里,提出一个ID。 659 00:28:37,790 --> 00:28:40,787 现在,一个ID可以像 哈佛ID或耶鲁大学的网络ID, 660 00:28:40,787 --> 00:28:42,870 但它可能是更简单的 在我们的数据库的情况下。 661 00:28:42,870 --> 00:28:45,120 事实上,通常情况下 是有另一列。 662 00:28:45,120 --> 00:28:46,953 我要去 进取,编辑我的表。 663 00:28:46,953 --> 00:28:49,521 如果你玩弄 这个接口PSet7, 664 00:28:49,521 --> 00:28:51,770 你会看到,你可以检查 这里这个按钮,添加 665 00:28:51,770 --> 00:28:53,750 在该表的开头的字段。 666 00:28:53,750 --> 00:28:56,720 现在,如果我点击进入,这是怎么回事 给我的那些形式之一 667 00:28:56,720 --> 00:28:57,600 从早期。 668 00:28:57,600 --> 00:29:00,170 我要添加一个名为ID字段。 669 00:29:00,170 --> 00:29:03,070 而且我要使它成为一个数字类型。 670 00:29:03,070 --> 00:29:05,362 >> 我有一大堆 值的Numerics的。 671 00:29:05,362 --> 00:29:08,677 我只是要选择一个INT和 不用担心不同的尺寸。 672 00:29:08,677 --> 00:29:10,510 我没有指定 的长度或一个值, 673 00:29:10,510 --> 00:29:13,710 因为这将是 32位不管。 674 00:29:13,710 --> 00:29:16,070 属性中,我们没有看到过。 675 00:29:16,070 --> 00:29:18,410 任何兴趣任何这些 菜单选项,这个时候? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 对于INT? 678 00:29:23,745 --> 00:29:24,620 那你求婚? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 没有? 681 00:29:28,445 --> 00:29:29,570 做这些有意义吗? 682 00:29:29,570 --> 00:29:30,536 是啊。 683 00:29:30,536 --> 00:29:31,900 是啊,无符号的,对不对? 684 00:29:31,900 --> 00:29:35,930 >> 一般情况下,如果我们打算给 大家唯一的编号, 685 00:29:35,930 --> 00:29:38,200 就是这个故事 去,我真的只是想 686 00:29:38,200 --> 00:29:41,919 一个人有这样的零数 一和二,三和四。 687 00:29:41,919 --> 00:29:43,710 我并不需要处理 用负数。 688 00:29:43,710 --> 00:29:45,210 这似乎只是过于复杂。 689 00:29:45,210 --> 00:29:48,470 我买4十亿可能的值, 不是四十亿可能的值, 690 00:29:48,470 --> 00:29:50,699 所以我只是一倍 我INT的能力。 691 00:29:50,699 --> 00:29:53,490 顺便说一句,如果你想关联 这有点像脸谱, 692 00:29:53,490 --> 00:29:56,190 早在排序我一天的 Facebook的第一个走了出来, 693 00:29:56,190 --> 00:29:59,510 我相信他们是 利用其MySQL数据库 694 00:29:59,510 --> 00:30:02,856 来存储用户的 标识符,只是一个int。 695 00:30:02,856 --> 00:30:05,230 但当然,还有很多 真正的人在世界上。 696 00:30:05,230 --> 00:30:07,438 有很多假冒的Facebook 占世界。 697 00:30:07,438 --> 00:30:11,701 所以最终,Facebook的溢出 int的大小,四十亿 698 00:30:11,701 --> 00:30:12,200 值。 699 00:30:12,200 --> 00:30:15,032 这就是为什么,如果你看看 四周,有网站 700 00:30:15,032 --> 00:30:16,740 可以告诉你什么 您独有的ID​​是。 701 00:30:16,740 --> 00:30:19,781 如果你从来没有选择一个用户名的 Facebook的,你会看到你的唯一的ID。 702 00:30:19,781 --> 00:30:23,080 我认为这是个人资料点PHP 问号ID等于什么。 703 00:30:23,080 --> 00:30:27,210 这就是现在有点像一个大 INT,或者很长很长,如果你愿意, 704 00:30:27,210 --> 00:30:29,700 这是一个64位的值 什么可比性。 705 00:30:29,700 --> 00:30:33,620 >> 因此,即使在现实世界中做这些 最终的问题有时关系。 706 00:30:33,620 --> 00:30:37,600 而事实证明,在这里,如果我 给我的所有用户一个唯一的ID, 707 00:30:37,600 --> 00:30:41,750 我想成为超级明确的, 微创使这一领域独树一帜。 708 00:30:41,750 --> 00:30:44,750 但事实证明,有一 一块命名今天太 709 00:30:44,750 --> 00:30:46,470 这是一个主键。 710 00:30:46,470 --> 00:30:49,800 如果你正在设计一个数据库 表,事先知道 711 00:30:49,800 --> 00:30:55,580 在该表中的一列 应该和唯一标识行 712 00:30:55,580 --> 00:30:58,500 在表中,要 指定它告诉数据库, 713 00:30:58,500 --> 00:31:00,250 这是我的主键。 714 00:31:00,250 --> 00:31:02,110 有可能是重复的 在其他领域, 715 00:31:02,110 --> 00:31:06,330 但我说的是数据库,这 是我的主,我最重要的领域, 716 00:31:06,330 --> 00:31:08,420 有保证是唯一的。 717 00:31:08,420 --> 00:31:09,660 >> 现在,这似乎是多余的。 718 00:31:09,660 --> 00:31:13,830 现在我提议,我们 添加,点击保存在这里, 719 00:31:13,830 --> 00:31:17,210 现场called--,我要去 继续前进,点击AI, 720 00:31:17,210 --> 00:31:19,720 我们再回过头来 在某一时刻,保存。 721 00:31:19,720 --> 00:31:22,540 现在,我提议 我的表是这样的。 722 00:31:22,540 --> 00:31:26,305 我有一个INT字段名为ID, 所谓用户名的煤焦领域, 723 00:31:26,305 --> 00:31:31,100 所谓的名称一个VARCHAR领域,但ID, 如果它的主,因此唯一的, 724 00:31:31,100 --> 00:31:33,760 为什么我只是浪费 时间推出什么 725 00:31:33,760 --> 00:31:39,140 有效地是一个第二唯一 现场叫号这是一个INT? 726 00:31:39,140 --> 00:31:41,980 >> 用户名,召回,是 已独特的,我们说的。 727 00:31:41,980 --> 00:31:45,350 所以只是在逻辑上,你并不需要 任何数据库经验理由 728 00:31:45,350 --> 00:31:47,570 通过这个,为什么 也许我已经介绍 729 00:31:47,570 --> 00:31:50,065 一个int我唯一的标识呢? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 什么是this--再说一遍? 732 00:31:53,930 --> 00:31:55,580 >> 听众:[听不清] 733 00:31:55,580 --> 00:31:59,534 >> DAVID马兰:随机 访问更容易,为什么呢? 734 00:31:59,534 --> 00:32:00,410 >> 听众:[听不清] 735 00:32:00,410 --> 00:32:02,367 DAVID马兰:是的,这 刚刚访问号码。 736 00:32:02,367 --> 00:32:04,750 所以,如果你觉得这真的 是一个表,像阵列, 737 00:32:04,750 --> 00:32:07,690 现在我唯一标识符 我可以四处跳动。 738 00:32:07,690 --> 00:32:11,520 而比这更好的仍然是, 一个int有多大将是一次吗? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32位或4个字节。 741 00:32:15,800 --> 00:32:17,750 >> 我的用户名有多大要多大? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 最大? 744 00:32:21,990 --> 00:32:22,880 16个字节。 745 00:32:22,880 --> 00:32:26,080 >> 所以,如果你真的关心 你的代码的性能, 746 00:32:26,080 --> 00:32:31,390 回想PSet5,你会喜欢 要搜索的一个四字节的值或一个16 747 00:32:31,390 --> 00:32:32,240 双字节值,对不对? 748 00:32:32,240 --> 00:32:33,810 这真的是这么简单。 749 00:32:33,810 --> 00:32:38,060 你所要做的四倍工作 要搜索的用户名,因为这些 750 00:32:38,060 --> 00:32:38,830 是16个字节。 751 00:32:38,830 --> 00:32:41,320 所以,你必须从字面上 比较所有16个字节是 752 00:32:41,320 --> 00:32:43,140 肯定是的,这是用户名我想要的。 753 00:32:43,140 --> 00:32:46,610 而对于一个INT,可以 这样做只有四个字节。 754 00:32:46,610 --> 00:32:49,212 >> 而作为一个抛开那些 感兴趣的计算机硬件, 755 00:32:49,212 --> 00:32:52,420 事实证明你能适应像 INT或某事的32位值 756 00:32:52,420 --> 00:32:55,330 所谓在计算机中的寄存器 CPU,这意味着它的超, 757 00:32:55,330 --> 00:32:58,400 超快速,即使在最低 计算机硬件水平。 758 00:32:58,400 --> 00:33:00,530 所以,这里只有好处各地。 759 00:33:00,530 --> 00:33:01,530 那么,这是什么意思? 760 00:33:01,530 --> 00:33:04,850 事实上,当你设计一个 数据库表中,几乎所有的时间 761 00:33:04,850 --> 00:33:07,170 你要没有 只有你所关心的数据, 762 00:33:07,170 --> 00:33:09,280 而且像 一个唯一的标识符 763 00:33:09,280 --> 00:33:11,280 因为这会 让我们做其他的事情。 764 00:33:11,280 --> 00:33:13,160 而且,我们绊倒一个问题在这里。 765 00:33:13,160 --> 00:33:15,990 >> 假设用户具有不 只是用户名和名称, 766 00:33:15,990 --> 00:33:19,540 但他们也有像城市 与州和邮政编码,至少 767 00:33:19,540 --> 00:33:20,432 这里是在美国。 768 00:33:20,432 --> 00:33:22,390 所以,我要继续前进 和公正快说, 769 00:33:22,390 --> 00:33:26,180 给我三个多列 在表的末端。 770 00:33:26,180 --> 00:33:28,900 而这将是城, 这将是国家, 771 00:33:28,900 --> 00:33:30,400 这将是邮编。 772 00:33:30,400 --> 00:33:32,710 >> 现在,市,什么样的数据类型 要这样,也许? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 我不知道是什么 最长的名称城市。 776 00:33:37,780 --> 00:33:40,571 某处在美国,有 可能是一些可笑的长字, 777 00:33:40,571 --> 00:33:43,605 所以我们就一起去255,有点 历史或随意。 778 00:33:43,605 --> 00:33:44,730 国家,你要怎么办? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 主观判断,对不对? 781 00:33:50,367 --> 00:33:51,700 什么是可能是最有效的? 782 00:33:51,700 --> 00:33:53,500 多少个字? 783 00:33:53,500 --> 00:33:55,950 也许只有两个,如果我们能 逃脱正是这样做, 784 00:33:55,950 --> 00:33:58,250 象,马马萨诸塞州等等。 785 00:33:58,250 --> 00:34:00,520 所以,我要去两个CHAR值。 786 00:34:00,520 --> 00:34:03,080 >> 邮政编码是一个有趣的。 787 00:34:03,080 --> 00:34:06,679 我们在这里的02138,使 建议我们应该用什么呢? 788 00:34:06,679 --> 00:34:07,470 这是一个INT,对不对? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT,INT,短? 791 00:34:12,800 --> 00:34:14,521 短会工作。 792 00:34:14,521 --> 00:34:15,020 没有? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR或五人,但我想要一个INT。 795 00:34:20,870 --> 00:34:23,710 为什么要推回一个INT? 796 00:34:23,710 --> 00:34:26,820 从这个劝我。 797 00:34:26,820 --> 00:34:29,210 什么是愚蠢的关于一个INT,我的想法? 798 00:34:29,210 --> 00:34:29,871 是啊。 799 00:34:29,871 --> 00:34:31,199 >> 听众:占用更多的内存。 800 00:34:31,199 --> 00:34:32,909 >> DAVID马兰:占用更多的内存。 801 00:34:32,909 --> 00:34:35,310 四个字节,但你 提出一个邮政编码 802 00:34:35,310 --> 00:34:39,000 五字节或有人在为CHAR, 这感觉就像诶,这不是真的 803 00:34:39,000 --> 00:34:39,620 案子。 804 00:34:39,620 --> 00:34:40,489 >> 好了,有趣的故事。 805 00:34:40,489 --> 00:34:43,179 几年前,当我用用 微软的Outlook我的电子邮件, 806 00:34:43,179 --> 00:34:45,150 我最终想切换到Gmail。 807 00:34:45,150 --> 00:34:48,949 所以,我出口我所有的 从Outlook联系人为CSV文件。 808 00:34:48,949 --> 00:34:50,699 逗号分隔值, 这只是意味着我 809 00:34:50,699 --> 00:34:54,060 有我所有的朋友的名字和最后一个 名字和电话号码和邮政编码 810 00:34:54,060 --> 00:34:54,747 和所有的。 811 00:34:54,747 --> 00:34:56,580 然后我做了 打开它的错误 812 00:34:56,580 --> 00:34:58,640 在Excel中,这是一个 电子表格程序, 813 00:34:58,640 --> 00:35:00,289 了解CSV文件,因为我们已经看到了。 814 00:35:00,289 --> 00:35:03,080 但后来,我一定打一样, 指挥或控制S上一个点。 815 00:35:03,080 --> 00:35:06,250 和Excel显然在当时 有其中任何一个特点时它 816 00:35:06,250 --> 00:35:08,100 看到一个数字,它试图有所帮助。 817 00:35:08,100 --> 00:35:11,610 如果这个数字开始 零,它只是摆脱他们。 818 00:35:11,610 --> 00:35:13,420 为什么需要领导 零点的整数? 819 00:35:13,420 --> 00:35:15,140 他们是毫无意义的,数学。 820 00:35:15,140 --> 00:35:17,530 他们不是毫无意义 在美国的邮政系统。 821 00:35:17,530 --> 00:35:19,954 所以,我已经好几年了, 到今天,我还是 822 00:35:19,954 --> 00:35:22,370 有朋友说,当 我需要一个人是难得一遇 823 00:35:22,370 --> 00:35:24,078 解决这些天, 我还是会看到我 824 00:35:24,078 --> 00:35:26,767 在剑桥的朋友, 马萨诸塞州,2138年。 825 00:35:26,767 --> 00:35:29,350 而这很烦人,如果你 试图以编程方式排序 826 00:35:29,350 --> 00:35:30,975 产生信封或只是记下来。 827 00:35:30,975 --> 00:35:33,599 那是因为这个原因, 我选择了错误的数据类型。 828 00:35:33,599 --> 00:35:34,490 所以,我很喜欢你的想法。 829 00:35:34,490 --> 00:35:35,650 让我们用一个煤焦领域。 830 00:35:35,650 --> 00:35:38,340 除了五个大字, 有一个角落的情况下。 831 00:35:38,340 --> 00:35:42,220 如果您仍然发送邮件, 有时邮政编码这些天, 832 00:35:42,220 --> 00:35:45,360 他们一样,加上四个。 833 00:35:45,360 --> 00:35:48,200 因此,我们需要一个连字符,然后 我们需要四个数字。 834 00:35:48,200 --> 00:35:50,330 所以说实话,它可以 去很多不同的方式。 835 00:35:50,330 --> 00:35:52,371 >> 现在,我要保持 它简单,我只是 836 00:35:52,371 --> 00:35:54,780 会说,这是一个 5 CHAR值和我们 837 00:35:54,780 --> 00:35:56,739 要跳过整个仪表板加上四个。 838 00:35:56,739 --> 00:35:58,280 但这些都是种权衡。 839 00:35:58,280 --> 00:36:00,196 你能想到的 产生同样的问题 840 00:36:00,196 --> 00:36:01,860 与电话号码或其他领域。 841 00:36:01,860 --> 00:36:04,350 >> 而现在,这实际上是 一个愚蠢的道路往下走。 842 00:36:04,350 --> 00:36:08,000 假设这两个Rob和我和汉娜 和玛丽亚和[? Davon?]和安迪 843 00:36:08,000 --> 00:36:12,820 和其他的工作人员都住 在剑桥,马萨诸塞州,02138。 844 00:36:12,820 --> 00:36:17,970 这实际上觉得自己很蠢,我很 添加到我的用户表,市,州, 845 00:36:17,970 --> 00:36:18,630 和拉链。 846 00:36:18,630 --> 00:36:20,980 为什么呢? 847 00:36:20,980 --> 00:36:21,960 >> 听众:[听不清] 848 00:36:21,960 --> 00:36:22,918 >> DAVID马兰:再说一遍吗? 849 00:36:22,918 --> 00:36:24,310 听众:[听不清] 850 00:36:24,310 --> 00:36:25,850 >> DAVID马兰:他们总是 要去一起去,好吗? 851 00:36:25,850 --> 00:36:28,660 当事实证明,我们曾经认为 这是事实,直到我们彻底 852 00:36:28,660 --> 00:36:30,570 找遍了整个美国, 和原来有 853 00:36:30,570 --> 00:36:32,653 有一些不同之处 在多个城市有 854 00:36:32,653 --> 00:36:35,060 同一个zip,这是奇怪的。 855 00:36:35,060 --> 00:36:40,580 但是,如果我们现在02138规定的 永远是马萨诸塞州剑桥市, 856 00:36:40,580 --> 00:36:44,910 为什么在世界上,你将存储在 数据库剑桥和MA和02138 857 00:36:44,910 --> 00:36:49,357 对我和汉娜和罗布和 对于[? Davon?]和其他人谁住 858 00:36:49,357 --> 00:36:51,190 这里在剑桥,它的 完全是多余的。 859 00:36:51,190 --> 00:36:54,480 >> 我们应该摆脱 只存放了什么? 860 00:36:54,480 --> 00:36:55,610 只是邮政编码。 861 00:36:55,610 --> 00:36:58,660 不过,如果我们只存储了 邮编,我想,也许, 862 00:36:58,660 --> 00:37:02,160 我的网站知道哪里是02138。 863 00:37:02,160 --> 00:37:03,910 所以,我需要另一个表。 864 00:37:03,910 --> 00:37:04,697 这就是确定。 865 00:37:04,697 --> 00:37:07,530 而事实上,这是一 设计表的设计流程 866 00:37:07,530 --> 00:37:11,472 你会做的PSet7以及由此 要分解出的公共数据。 867 00:37:11,472 --> 00:37:14,430 就像我们已经分解出 常见的代码,并分解出常见的 868 00:37:14,430 --> 00:37:17,380 从CSS,这里的风格 太在数据库中, 869 00:37:17,380 --> 00:37:21,180 如果我只需要02138唯一 识别一个人的故乡, 870 00:37:21,180 --> 00:37:25,020 不存储马萨诸塞州剑桥市的 在表中每一次缝补用户。 871 00:37:25,020 --> 00:37:29,770 >> 相反,有一个单独的表称为 拉链,应该有什么样的列? 872 00:37:29,770 --> 00:37:33,490 也许一个ID字段,只是,因为 的原则,我们现在谈论。 873 00:37:33,490 --> 00:37:35,720 可能是一个zip字段为02138。 874 00:37:35,720 --> 00:37:38,400 然后大概是什么其他列? 875 00:37:38,400 --> 00:37:42,950 城市和国家,但只有一个 行02138,一排为02139, 876 00:37:42,950 --> 00:37:44,772 一行90210。 877 00:37:44,772 --> 00:37:46,730 这是字面上 所有的邮政编码,我知道。 878 00:37:46,730 --> 00:37:49,012 >> 所以,现在,你能做些什么? 879 00:37:49,012 --> 00:37:51,220 这是有问题的,因为 现在我有两个表。 880 00:37:51,220 --> 00:37:54,660 所以,我的用户大多是在这里, 但他们的城市状态信息的 881 00:37:54,660 --> 00:37:55,390 在这儿。 882 00:37:55,390 --> 00:37:58,635 所以,事实证明用SQL,有 实际的方式加盟信息, 883 00:37:58,635 --> 00:38:00,470 你会看到在pset中。 884 00:38:00,470 --> 00:38:03,000 >> 但事实证明,你可以 做这样的事情。 885 00:38:03,000 --> 00:38:10,501 择思达从用户,ON JOIN拉链 用户点缀拉链等于拉链点缀拉链。 886 00:38:10,501 --> 00:38:13,360 这是一个小罗嗦, 无可否认,但这只是 887 00:38:13,360 --> 00:38:17,590 意味着选择一切从 服用我的用户表的过程 888 00:38:17,590 --> 00:38:19,580 和我的拉链表。 889 00:38:19,580 --> 00:38:22,120 加入他们一个 字段它们具有在列中。 890 00:38:22,120 --> 00:38:24,780 因此,从字面上做的事情 这样,给我回来 891 00:38:24,780 --> 00:38:27,360 新的临时表 这是更广泛的,这是更大的, 892 00:38:27,360 --> 00:38:29,450 具有所有的 列从他们两个。 893 00:38:29,450 --> 00:38:33,510 这很简单,将是 语法做这样的事情。 894 00:38:33,510 --> 00:38:35,540 >> 所以,有这种进取, 但也有是怎么回事 895 00:38:35,540 --> 00:38:38,950 是其他的设计决策,你会 必须做出,不仅与索引 896 00:38:38,950 --> 00:38:40,550 但也遇到了挑战。 897 00:38:40,550 --> 00:38:43,360 事实上,还有一个挑战 在任何数据库设计 898 00:38:43,360 --> 00:38:47,930 因此有时两个人可能希望 访问数据库的相同的行 899 00:38:47,930 --> 00:38:48,530 表。 900 00:38:48,530 --> 00:38:51,450 所以,这是我们要 遇到PSet7为好。 901 00:38:51,450 --> 00:38:54,686 >> 不过,我想我会看一眼 攻击是可能的SQL。 902 00:38:54,686 --> 00:38:56,560 什么是一些 可能出现的问题? 903 00:38:56,560 --> 00:38:58,170 所以,你会在PSet7遇到这种。 904 00:38:58,170 --> 00:39:01,874 我们告诉你彻底是什么 对于这个问题的编码解决方案。 905 00:39:01,874 --> 00:39:04,790 但是,如果你把一个更高层次的类, 尤其是在操作系统, 906 00:39:04,790 --> 00:39:06,950 你会遇到 问题原子性, 907 00:39:06,950 --> 00:39:10,080 试图做的问题 多东西一下子 908 00:39:10,080 --> 00:39:11,000 不会中断。 909 00:39:11,000 --> 00:39:14,560 >> 我想我会介绍这个 对于PSet7理念与隐喻 910 00:39:14,560 --> 00:39:18,160 我学会了自己在马戈 塞尔策的CS164操作系统 911 00:39:18,160 --> 00:39:18,990 一流年前。 912 00:39:18,990 --> 00:39:22,230 假设你有这些宿舍之一 在你的宿舍或家里的冰箱, 913 00:39:22,230 --> 00:39:24,474 和你有一个真正的嗜好牛奶。 914 00:39:24,474 --> 00:39:27,140 所以,你从班回家 有一天,你打开冰箱。 915 00:39:27,140 --> 00:39:27,620 哦,该死的。 916 00:39:27,620 --> 00:39:28,870 还有在冰箱里没有牛奶。 917 00:39:28,870 --> 00:39:32,470 所以,你关闭的冰箱, 锁了门,锁定你的宿舍, 918 00:39:32,470 --> 00:39:34,770 走在拐角处 到CVS,在排队, 919 00:39:34,770 --> 00:39:36,312 并开始检查出了一些牛奶。 920 00:39:36,312 --> 00:39:38,978 而这将需要一段时间, 因为那些该死的自助结账 921 00:39:38,978 --> 00:39:40,570 柜台采取永远仍要使用。 922 00:39:40,570 --> 00:39:41,950 所以,同时,你的室友回家。 923 00:39:41,950 --> 00:39:43,470 他或她很喜欢牛奶为好。 924 00:39:43,470 --> 00:39:45,520 他们走进宿舍里, 打开冰箱,哦,实在可恨。 925 00:39:45,520 --> 00:39:46,490 有没有更多的牛奶。 926 00:39:46,490 --> 00:39:49,040 >> 所以,他或她也 去指日可待。 927 00:39:49,040 --> 00:39:51,670 但现在,因为有像两个 或三个或四个CVSes附近, 928 00:39:51,670 --> 00:39:53,800 他们碰巧去之一 不同的人在广场上。 929 00:39:53,800 --> 00:39:55,830 所以现在,几分钟 后来,你们俩 930 00:39:55,830 --> 00:39:58,060 回家,唉,最严重的问题不断。 931 00:39:58,060 --> 00:40:00,967 现在,你有太多的牛奶 因为它会走向末路。 932 00:40:00,967 --> 00:40:03,050 你喜欢牛奶,可是你 真的不喜欢牛奶。 933 00:40:03,050 --> 00:40:06,730 >> 所以,现在,这是一个昂贵的 错误,因为你们俩 934 00:40:06,730 --> 00:40:09,870 制成的基础上作出决定 一些变量的状态 935 00:40:09,870 --> 00:40:12,660 是在过程中 由你而改变, 936 00:40:12,660 --> 00:40:14,560 要去挤奶启动。 937 00:40:14,560 --> 00:40:17,785 那么,什么是可能是一个人 解决这一问题? 938 00:40:17,785 --> 00:40:18,660 听众:[听不清] 939 00:40:18,660 --> 00:40:19,430 DAVID马兰:留一个便条,对不对? 940 00:40:19,430 --> 00:40:21,850 总是留下一张纸条,如果你 熟悉这个节目。 941 00:40:21,850 --> 00:40:23,100 是的,有我们两个人。 942 00:40:23,100 --> 00:40:25,940 所以,总是留下一张纸条,或 从字面上锁定的冰箱 943 00:40:25,940 --> 00:40:28,602 与某种挂锁的或 一些对像的顶部。 944 00:40:28,602 --> 00:40:31,310 但是,这实际上是将 关键的问题,数据库设计, 945 00:40:31,310 --> 00:40:34,710 尤其是当你可能有 多浏览器,多的笔记本电脑, 946 00:40:34,710 --> 00:40:37,450 多个用户都试图 一次更新信息。 947 00:40:37,450 --> 00:40:40,590 特别敏感的信息 像财务信息, 948 00:40:40,590 --> 00:40:43,350 其中有一个股票交易 网站就像你会的建设, 949 00:40:43,350 --> 00:40:47,270 如果要检查多少钱什么 你有,然后如果你有足够的, 950 00:40:47,270 --> 00:40:48,490 买一些股票? 951 00:40:48,490 --> 00:40:50,899 >> 但是,如果别人谁 有一个共同账户与你 952 00:40:50,899 --> 00:40:52,690 是同时尝试 买了一些股票? 953 00:40:52,690 --> 00:40:55,190 因此,他或她是检查 账户余额,你们俩 954 00:40:55,190 --> 00:40:57,540 得到相同 答案,没有牛奶。 955 00:40:57,540 --> 00:41:00,580 或者两者你回来的答案, 你有$ 100的账户。 956 00:41:00,580 --> 00:41:04,680 你们都试图做出决定 买一股的部分公司股票。 957 00:41:04,680 --> 00:41:06,130 >> 而现在,会发生什么? 958 00:41:06,130 --> 00:41:07,140 你有两股? 959 00:41:07,140 --> 00:41:08,420 你有没有股份? 960 00:41:08,420 --> 00:41:10,320 这样的问题可能会出现。 961 00:41:10,320 --> 00:41:11,755 所以,我们会遇到。 962 00:41:11,755 --> 00:41:14,630 SQL注入攻击,幸运的是, 是什么,我们将帮助您, 963 00:41:14,630 --> 00:41:17,430 但这些残暴 常见的这些天还在。 964 00:41:17,430 --> 00:41:18,680 所以,这仅仅是一个例子。 965 00:41:18,680 --> 00:41:21,290 我不作任何声称, 哈佛密码系统 966 00:41:21,290 --> 00:41:23,130 容易受到这种特定攻击。 967 00:41:23,130 --> 00:41:24,160 我们已经尽力了。 968 00:41:24,160 --> 00:41:26,120 但是,你知道,我们 有这样一个领域。 969 00:41:26,120 --> 00:41:29,620 而耶鲁大学的网络ID也有类似的 看着屏幕上的这些日子。 970 00:41:29,620 --> 00:41:33,190 而事实证明,这也许是 PIN系统PHP实现。 971 00:41:33,190 --> 00:41:37,050 >> 而如果它were--它是不是 - 他们 可能看起来像这样的代码。 972 00:41:37,050 --> 00:41:38,210 它们有两个变量。 973 00:41:38,210 --> 00:41:42,495 给我的用户名和密码 从后超全局变量 974 00:41:42,495 --> 00:41:43,970 我们前面谈到。 975 00:41:43,970 --> 00:41:47,310 也许哈佛有一个查询 像选择星级用户的 976 00:41:47,310 --> 00:41:50,005 其中username等于说 和密码等于这一点。 977 00:41:50,005 --> 00:41:51,880 并注意我只是 插上使用 978 00:41:51,880 --> 00:41:55,050 从其他的花括号符号 一天,这意味着只需插入值 979 00:41:55,050 --> 00:41:55,550 这里。 980 00:41:55,550 --> 00:41:57,449 我不使用的 问号技术。 981 00:41:57,449 --> 00:41:59,240 我没有任何第二 或第三个参数。 982 00:41:59,240 --> 00:42:02,350 我只是从字面上 构造了字符串自己。 983 00:42:02,350 --> 00:42:04,930 >> 这个问题,不过,是 如果有人喜欢scroob, 984 00:42:04,930 --> 00:42:09,020 这是一个参照膜, 登录像这样的东西, 985 00:42:09,020 --> 00:42:11,250 我已经删除了点 通常掩盖 986 00:42:11,250 --> 00:42:14,370 密码,如果他是 尤其是恶意 987 00:42:14,370 --> 00:42:18,860 和他的密码可能是12345, 每个称为电影“太空炮弹” 988 00:42:18,860 --> 00:42:21,970 但他批判类型一 五后单引号, 989 00:42:21,970 --> 00:42:24,790 然后从字面上的词或 在空间,然后报价, 990 00:42:24,790 --> 00:42:29,160 引文结束一等于报价之一, 但是请注意,他遗漏了什么? 991 00:42:29,160 --> 00:42:32,700 他省略了报价右侧 他被省略左边的报价。 992 00:42:32,700 --> 00:42:35,170 >> 因为如果这个攻击者 scroob的推定 993 00:42:35,170 --> 00:42:38,160 就是人们谁写 此PHP代码并没有那么亮, 994 00:42:38,160 --> 00:42:42,990 也许他们只是有一些单 引述周围的插值 995 00:42:42,990 --> 00:42:45,210 在大括号的变量? 996 00:42:45,210 --> 00:42:48,620 所以也许,他可以种 中完成他们的思维 997 00:42:48,620 --> 00:42:53,290 对他们而言,但在某种程度上这回事 让他侵入了PIN码系统。 998 00:42:53,290 --> 00:42:55,310 换句话说,假定 这是在代码 999 00:42:55,310 --> 00:42:57,140 我们现在插上什么scroob类型。 1000 00:42:57,140 --> 00:42:58,770 而且它是红色的,因为它是坏的。 1001 00:42:58,770 --> 00:43:01,310 >> 而基础文本 是他所键入的, 1002 00:43:01,310 --> 00:43:05,510 scroob可以欺骗哈佛大学的服务器 为构建SQL查询 1003 00:43:05,510 --> 00:43:07,440 字符串,它看起来是这样的。 1004 00:43:07,440 --> 00:43:11,760 密码等于12345或一等于之一。 1005 00:43:11,760 --> 00:43:14,820 其结果,从逻辑上讲, 的是,这将记录scroob 1006 00:43:14,820 --> 00:43:18,360 如果在他的密码是 12345或者一个平等 1007 00:43:18,360 --> 00:43:22,660 一个,这是当然的总是为真, 这意味着scroob总是得到研究。 1008 00:43:22,660 --> 00:43:26,060 >> 因此,该方式来解决 这一点,因为在很多情况下, 1009 00:43:26,060 --> 00:43:28,140 将更多的防守写。 1010 00:43:28,140 --> 00:43:30,390 使用类似我们 实际的查询功能, 1011 00:43:30,390 --> 00:43:33,980 您将在PSet7,我们插上看到 像问号在这里。 1012 00:43:33,980 --> 00:43:35,980 而其中的美 查询功能我们 1013 00:43:35,980 --> 00:43:40,010 给你的是它抵御这些 所谓的SQL注入攻击,其中 1014 00:43:40,010 --> 00:43:44,260 有人欺骗你的代码进入 注入自己的SQL代码。 1015 00:43:44,260 --> 00:43:47,380 因为什么查询功能 我们给你会怎么做, 1016 00:43:47,380 --> 00:43:51,270 如果使用问号语法 和第二在这里第三个参数, 1017 00:43:51,270 --> 00:43:54,590 是什么并把它添加到 输入的用户提供? 1018 00:43:54,590 --> 00:43:56,060 这些反斜线引用。 1019 00:43:56,060 --> 00:43:58,590 >> 因此,它避开了任何可能 危险的人物。 1020 00:43:58,590 --> 00:44:01,000 现在,这看起来奇怪, 但它不容易 1021 00:44:01,000 --> 00:44:03,260 因为它不 改变逻辑了 1022 00:44:03,260 --> 00:44:06,470 因为整个密码 现在一个单引号,这不是, 1023 00:44:06,470 --> 00:44:07,596 事实上,scroob的密码。 1024 00:44:07,596 --> 00:44:09,845 所以,还有的是一些笑话 这个多年来。 1025 00:44:09,845 --> 00:44:12,570 所以,这是一个合影留念 在停车场的一些怪胎 1026 00:44:12,570 --> 00:44:16,620 因此,你可能知道,一些城市 和国尝试扫描您的许可证 1027 00:44:16,620 --> 00:44:19,460 板向您或您机票 如果你经历不一样, 1028 00:44:19,460 --> 00:44:20,660 在E-Z通的事情。 1029 00:44:20,660 --> 00:44:24,490 所以,这个人推测,也许 人们写E-Z通系统 1030 00:44:24,490 --> 00:44:28,240 不那么亮了,也许他们 只需连接在一起的字符串, 1031 00:44:28,240 --> 00:44:32,190 让他或她不能恶意 不只是完成自己的思想, 1032 00:44:32,190 --> 00:44:35,150 但实际上执行了错误的命令, 而我们还没有提到, 1033 00:44:35,150 --> 00:44:36,380 但你可能已经猜到。 1034 00:44:36,380 --> 00:44:39,820 这除了删除和 插入和更新,并选择, 1035 00:44:39,820 --> 00:44:43,370 还有一个叫降关键字, 字面删除一切 1036 00:44:43,370 --> 00:44:45,300 在数据库中,这 尤为糟糕。 1037 00:44:45,300 --> 00:44:48,760 >> 我们可以在这一点,如果放大 这是一个有点很难看到。 1038 00:44:48,760 --> 00:44:52,300 这一点,现在,是一个著名的卡通 这就是奇妙聪明现在 1039 00:44:52,300 --> 00:44:53,145 和可以理解的。 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [笑] 1042 00:45:04,750 --> 00:45:05,910 >> 是啊,爽。 1043 00:45:05,910 --> 00:45:06,800 有种出来狂人。 1044 00:45:06,800 --> 00:45:08,800 因此,这些话,是 SQL注入攻击。 1045 00:45:08,800 --> 00:45:13,050 而且他们很容易避免使用 正确的代码或正确的库。 1046 00:45:13,050 --> 00:45:15,947 你会在PSet7看到,这是 为什么我们给你的查询功能。 1047 00:45:15,947 --> 00:45:17,780 于是,一对夫妇玩笑 我们认为我们会 1048 00:45:17,780 --> 00:45:19,930 让您在我们这里 剩余分钟在一起。 1049 00:45:19,930 --> 00:45:24,030 所以,当你从零一周记得,我们 介绍了这两个灯泡哪些 1050 00:45:24,030 --> 00:45:26,610 很不错,不仅是因为 他们是漂亮,是丰富多彩的, 1051 00:45:26,610 --> 00:45:29,450 而是因为他们支持的东西 所谓的API,应用程序 1052 00:45:29,450 --> 00:45:31,980 编程接口和 在CS50迄今为止,我们已经 1053 00:45:31,980 --> 00:45:34,440 大多集中在GET和 POST,但事实证明, 1054 00:45:34,440 --> 00:45:37,390 还有其他HTTP动词像PUT。 1055 00:45:37,390 --> 00:45:39,430 >> 而事实上,这是 从零一周幻灯片 1056 00:45:39,430 --> 00:45:44,930 如果你写的代码,发送,由此 一拉PSet6一个HTTP请求 1057 00:45:44,930 --> 00:45:49,647 看起来是这样的这一大块文本 在底部,这是所谓的JSON, 1058 00:45:49,647 --> 00:45:52,230 或JavaScript对象符号 我们将讨论下周, 1059 00:45:52,230 --> 00:45:57,030 您可以打开或关闭或改变 灯像的颜色。 1060 00:45:57,030 --> 00:46:00,480 因此,如果CS50也有另外一些 这些灯泡在这里纽黑文 1061 00:46:00,480 --> 00:46:02,480 如果你想借钱 他们最终的项目, 1062 00:46:02,480 --> 00:46:04,370 也有一些微软 乐队,这是像 1063 00:46:04,370 --> 00:46:07,619 手表,你在你的手腕上戴 这同样有这样的API您 1064 00:46:07,619 --> 00:46:10,040 可以编写自己的软件为他们。 1065 00:46:10,040 --> 00:46:12,490 >> 我们有一个帐户 苹果的iOS代码,以便 1066 00:46:12,490 --> 00:46:15,510 如果你有一个苹果的手表或 iPhone或iPad或iPod音乐, 1067 00:46:15,510 --> 00:46:17,707 您可以编写代码, 实际运行这些。 1068 00:46:17,707 --> 00:46:19,540 我们有一大堆 的Arduinos,这是 1069 00:46:19,540 --> 00:46:22,010 小小的电脑 没有的情况下,本质上, 1070 00:46:22,010 --> 00:46:25,240 您可以通过USB连接, 通常你自己的Mac或PC, 1071 00:46:25,240 --> 00:46:28,810 写这些物理上运行的代码 经常有传感器对他们的设备 1072 00:46:28,810 --> 00:46:30,790 这样你就可以与现实世界的互动。 1073 00:46:30,790 --> 00:46:32,860 我们有一大堆 的飞跃运动设备, 1074 00:46:32,860 --> 00:46:36,500 这是USB设备的Mac和 个人电脑,在这里,再次,在纽黑文。 1075 00:46:36,500 --> 00:46:40,080 如果你把它连接到你的Mac, 实际上你可以控制你的电脑 1076 00:46:40,080 --> 00:46:42,550 通过编写软件 即通过红外线, 1077 00:46:42,550 --> 00:46:46,360 计算出你在哪里人类的手, 即使没有触碰键盘。 1078 00:46:46,360 --> 00:46:49,135 我们认为我们会分享快速 窥在此,例如。 1079 00:46:49,135 --> 00:46:51,428 >> [音乐播放] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 因此,我们有一个整体 一堆这些东西, 1082 00:47:57,590 --> 00:48:01,040 也叫缪臂带 你把在你的前臂 1083 00:48:01,040 --> 00:48:04,595 然后你就可以控制实际 世界还是虚拟世界是这样的。 1084 00:48:04,595 --> 00:48:06,471 >> [音乐播放] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 或者,我们也有一些谷歌 纸板,这实际上是一样, 1087 00:49:20,920 --> 00:49:24,841 一个纸板箱,你可以把你的 脸,但在滑盖手机进去 1088 00:49:24,841 --> 00:49:27,590 让你把玻璃您 手机真正接近你的眼睛。 1089 00:49:27,590 --> 00:49:30,190 而谷歌纸板 非常便宜$ 10 $ 20 1090 00:49:30,190 --> 00:49:32,230 它几乎没有镜片 这稍微偏离转变 1091 00:49:32,230 --> 00:49:35,900 在屏幕的人对图像 眼睛给你的深度感 1092 00:49:35,900 --> 00:49:39,550 让你真正拥有3D 环境在你的面前。 1093 00:49:39,550 --> 00:49:42,927 我们也有一些三星的齿轮,其中 是这种更昂贵的版本, 1094 00:49:42,927 --> 00:49:46,010 但可以类似滑动在一个 Android手机,给你幻想 1095 00:49:46,010 --> 00:49:48,309 of--或给予经验 虚拟现实。 1096 00:49:48,309 --> 00:49:50,850 而在我们的最后两分钟, 我们认为我们会尝试这样做。 1097 00:49:50,850 --> 00:49:55,250 如果我能预测什么科尔顿有 这里只是为了激起你的食欲, 1098 00:49:55,250 --> 00:49:58,442 让我继续前进,扔 在这里的大屏幕上。 1099 00:49:58,442 --> 00:49:59,400 让我杀的灯光。 1100 00:49:59,400 --> 00:50:02,290 科尔顿,你想继续 并把你的手机了一会儿 1101 00:50:02,290 --> 00:50:05,171 和过加油到 舞台中间? 1102 00:50:05,171 --> 00:50:07,420 那你想项目 - 这是科尔顿看到。 1103 00:50:07,420 --> 00:50:10,560 >> 现在,在Wi-Fi在这里 没有那么强了该设备 1104 00:50:10,560 --> 00:50:13,870 这是超级引人注目, 但科尔顿是字面上 1105 00:50:13,870 --> 00:50:15,710 在这片神奇的未来的地方。 1106 00:50:15,710 --> 00:50:16,796 他只看到一个图像。 1107 00:50:16,796 --> 00:50:19,920 你看到他的左眼和右眼 他的大脑被拼接在一起 1108 00:50:19,920 --> 00:50:22,260 在三维 环境在他的脸上。 1109 00:50:22,260 --> 00:50:24,319 他只是选择了一个菜单选项在这里。 1110 00:50:24,319 --> 00:50:27,360 而如此反复,他戴着这款耳机 与三星手机上这是 1111 00:50:27,360 --> 00:50:29,080 无线投射到我们的开销。 1112 00:50:29,080 --> 00:50:30,349 现在你在火星上,我觉得呢? 1113 00:50:30,349 --> 00:50:31,140 COLTON:我想是这样。 1114 00:50:31,140 --> 00:50:32,181 我不知道[听不清]。 1115 00:50:32,181 --> 00:50:34,250 [笑] 1116 00:50:34,250 --> 00:50:36,374 >> DAVID马兰:原来 火星有这些菜单。 1117 00:50:36,374 --> 00:50:41,590 >> COLTON:[听不清]一些很酷 地方,如果我们想要去用于: 1118 00:50:41,590 --> 00:50:43,330 >> DAVID马兰:我们在哪里要去? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON:[听不清] 1120 00:50:45,837 --> 00:50:48,170 DAVID马兰:,让我们看看 其中,科尔顿的,现在把我们。 1121 00:50:48,170 --> 00:50:48,961 COLTON:[听不清] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> DAVID马兰:那么,有这么多 不同的地方,你可以把自己。 1124 00:50:56,380 --> 00:51:00,590 有FAPIs,通过它,你可以 写游戏或互动的 1125 00:51:00,590 --> 00:51:01,950 运行,最终,在手机上。 1126 00:51:01,950 --> 00:51:03,908 所以,你真的只是 编写手机应用程序。 1127 00:51:03,908 --> 00:51:06,380 但由于软件 和图形处理能力, 1128 00:51:06,380 --> 00:51:08,765 现在科尔顿在这 小小的平房。 1129 00:51:08,765 --> 00:51:10,515 和在的风险 压倒自己, 1130 00:51:10,515 --> 00:51:13,330 科尔顿,我会坚持围绕 而在班今天这里结束 1131 00:51:13,330 --> 00:51:14,300 如果你想拿出和发挥。 1132 00:51:14,300 --> 00:51:16,350 我们会为他们带来 下周为好。 1133 00:51:16,350 --> 00:51:18,420 无需再费周折 这就是它的今天。 1134 00:51:18,420 --> 00:51:21,990 我们会看到你下周。 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - RAGGA TWINS,“坏男人”] 1136 00:51:24,140 --> 00:55:23,146