1 00:00:00,000 --> 00:00:02,405 >> [Speel van musiek] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 David Malan: Alle reg, dit is CS50. 4 00:00:11,980 --> 00:00:13,740 Dit is die einde van die week agt. 5 00:00:13,740 --> 00:00:15,887 En vandag, het ons begin in 'n paar stukkies in te vul 6 00:00:15,887 --> 00:00:17,720 wanneer dit kom by die bou van dinge op die web. 7 00:00:17,720 --> 00:00:20,020 So, onthou dat op Maandag ons spandeer baie meer tyd 8 00:00:20,020 --> 00:00:22,530 op PHP, wat hierdie dinamiese programmeertaal wat 9 00:00:22,530 --> 00:00:26,872 laat ons uitset onder dinge, HTML en ander sulke inhoud 10 00:00:26,872 --> 00:00:27,830 dat ons sal wil sien. 11 00:00:27,830 --> 00:00:30,871 Maar ons het nie regtig gekyk na hoe ons gaan om enige inligting te stoor. 12 00:00:30,871 --> 00:00:34,477 Inderdaad, amper enige van die super interessante webwerwe wat jy besoek vandag 13 00:00:34,477 --> 00:00:36,560 'n soort van databasis op die agterkant, reg? 14 00:00:36,560 --> 00:00:39,540 Facebook winkels beslis baie data oor almal van ons en Gmail winkels al 15 00:00:39,540 --> 00:00:40,210 van jou e-pos. 16 00:00:40,210 --> 00:00:44,150 >> En so baie ander plekke is nie net statiese inhoud wat inligting. 17 00:00:44,150 --> 00:00:45,640 Dit is eintlik dinamiese in een of ander manier. 18 00:00:45,640 --> 00:00:48,480 Jy insette lewer, dit updates die bladsye vir ander mense. 19 00:00:48,480 --> 00:00:50,620 Jy boodskappe, stuur jou boodskappe, en so meer. 20 00:00:50,620 --> 00:00:54,250 So vandag, ons kyk nader aan die fondamente van 'n projek 21 00:00:54,250 --> 00:00:57,330 dat jy duik in die volgende week, CS50 Finansies, wat 22 00:00:57,330 --> 00:01:00,509 is eintlik gaan hê jy bou iets wat nie in C, maar in PHP. 23 00:01:00,509 --> 00:01:02,550 'N webwerf wat 'n lyk bietjie iets soos hierdie 24 00:01:02,550 --> 00:01:05,810 wat dit moontlik maak te koop en verkoop aandele wat eintlik 25 00:01:05,810 --> 00:01:09,044 gaan vestig op die regte tyd voorraad data van Yahoo Finansies. 26 00:01:09,044 --> 00:01:11,960 En so uiteindelik, sal jy die illusie vir jouself en vir gebruikers 27 00:01:11,960 --> 00:01:14,550 wat jy eintlik koop en verkoop aandele en kry byna real time 28 00:01:14,550 --> 00:01:16,800 updates, bestuur van 'n portefeulje, wat almal 29 00:01:16,800 --> 00:01:20,310 gaan om te vereis dat, uiteindelik 'n databasis van die gebruikers. 30 00:01:20,310 --> 00:01:23,330 >> So, in jou eie woorde, veral as jy nie 31 00:01:23,330 --> 00:01:25,670 super vertroud is met die rekenaar wetenskap of databasisse, wat 32 00:01:25,670 --> 00:01:30,790 jy 'n databasis te weet om te wees nou, in nontechnical terme? 33 00:01:30,790 --> 00:01:32,300 Wat is dit? 34 00:01:32,300 --> 00:01:36,882 Hoe sou jy dit beskryf 'n kamermaat of 'n vriend? 35 00:01:36,882 --> 00:01:40,100 >> GEHOOR: [onhoorbaar] inligting [onhoorbaar] 36 00:01:40,100 --> 00:01:44,430 >> David Malan: So, 'n lys van inligting, of 'n store-- 'n lys van inligting 37 00:01:44,430 --> 00:01:47,160 wat jy dalk wil om te stoor oor iets, soos 'n gebruiker. 38 00:01:47,160 --> 00:01:50,190 En wat doen gebruikers wat verband hou met hulle? 39 00:01:50,190 --> 00:01:53,160 As jy 'n gebruiker op Facebook of is Gmail, wat is die eienskappe 40 00:01:53,160 --> 00:01:54,940 dat ons almal gebruikers? 41 00:01:54,940 --> 00:01:58,530 Soos wat dalk 'n paar van die kolomme in die spreadsheet wat ons 42 00:01:58,530 --> 00:01:59,390 verwys laaste keer? 43 00:01:59,390 --> 00:02:01,140 Omdat weer, kan jy dink aan 'n databasis 44 00:02:01,140 --> 00:02:05,810 regtig so 'n fancy Excel lêer of Google Sigblad of Apple Nommers lêer. 45 00:02:05,810 --> 00:02:08,280 >> So, wat dink jy van wanneer jy dink van 'n gebruiker? 46 00:02:08,280 --> 00:02:11,290 Wat doen hulle? 47 00:02:11,290 --> 00:02:11,790 Wat is dit? 48 00:02:11,790 --> 00:02:12,470 >> GEHOOR: 'n naam. 49 00:02:12,470 --> 00:02:13,303 >> David Malan: 'n naam. 50 00:02:13,303 --> 00:02:16,840 So as naam, soos, David Malan sou die naam van 'n paar gebruikers te wees. 51 00:02:16,840 --> 00:02:17,980 Wat doen 'n gebruiker te hê? 52 00:02:17,980 --> 00:02:18,770 >> GEHOOR: 'n ID. 53 00:02:18,770 --> 00:02:19,561 >> David Malan: 'n ID. 54 00:02:19,561 --> 00:02:23,320 So, soos 'n ID-nommer, soos jou Harvard ID of jou Yale Net ID of die wil. 55 00:02:23,320 --> 00:02:24,923 Wat anders kan 'n gebruiker te hê? 56 00:02:24,923 --> 00:02:25,890 >> GEHOOR: Wagwoord. 57 00:02:25,890 --> 00:02:29,240 >> David Malan: 'n wagwoord, miskien 'n adres, miskien 'n telefoonnommer, miskien 58 00:02:29,240 --> 00:02:30,050 'n e-pos adres. 59 00:02:30,050 --> 00:02:32,640 So, daar is trosse van velde en dit kon soort van spiraal buite beheer 60 00:02:32,640 --> 00:02:34,760 vinnig so gou as jy begin besef, o, laat ons die winkel 61 00:02:34,760 --> 00:02:36,190 en laat ons dit en dat te stoor. 62 00:02:36,190 --> 00:02:37,657 >> Maar hoe weet ons eintlik doen? 63 00:02:37,657 --> 00:02:39,740 So weer, die geestelike model om vir vandag soos ons 64 00:02:39,740 --> 00:02:42,320 duik in die werklike SQL, Structured Query Language, 65 00:02:42,320 --> 00:02:44,186 is 'n databasis wat lyk soos hierdie. 66 00:02:44,186 --> 00:02:45,310 Dis net rye en kolomme. 67 00:02:45,310 --> 00:02:48,309 En jy kan dink Google Spreadsheets of enige aantal ander programme. 68 00:02:48,309 --> 00:02:52,130 Maar wat is die sleutel oor MySQL, wat is die databasis sagteware wat ons gaan gebruik, 69 00:02:52,130 --> 00:02:54,920 die vrylik openlik available Facebook gebruike 70 00:02:54,920 --> 00:02:59,200 dit en 'n aantal ander websites-- databasis stoor dinge verhoudings. 71 00:02:59,200 --> 00:03:01,770 En 'n relasionele databasis beteken net een wat letterlik 72 00:03:01,770 --> 00:03:03,672 slaan sy data in rye en kolomme. 73 00:03:03,672 --> 00:03:04,630 Dit is so eenvoudig soos dit. 74 00:03:04,630 --> 00:03:07,230 >> So, selfs iets soos Oracle dat jy dalk oor die algemeen het gehoor van 75 00:03:07,230 --> 00:03:08,271 is 'n relasionele databasis. 76 00:03:08,271 --> 00:03:10,929 En onder die enjinkap, is dit winkels data in rye en kolomme. 77 00:03:10,929 --> 00:03:12,970 En Oracle koste 'n baie geld om dit te doen, 78 00:03:12,970 --> 00:03:15,550 terwyl MySQL aanklagte jy het niks vir dieselfde. 79 00:03:15,550 --> 00:03:18,790 So, SQL gaan om te gee ons ten minste vier bedrywighede. 80 00:03:18,790 --> 00:03:23,190 Die vermoë om data te kies, soos lees data, voeg, te verwyder, en update data. 81 00:03:23,190 --> 00:03:25,525 Met ander woorde, dit is regtig die vier belangrike bedrywighede 82 00:03:25,525 --> 00:03:28,950 wat gaan ons toelaat om te verander dinge in die rye en kolomme. 83 00:03:28,950 --> 00:03:33,250 >> Die instrument wat ons veral sal gebruik vandag SQL leer en te speel met dit 84 00:03:33,250 --> 00:03:34,627 weer genoem PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Dit is web-gebaseerde hulpmiddel. 86 00:03:35,460 --> 00:03:38,200 Totale toeval dat dit is geskryf in PHP. 87 00:03:38,200 --> 00:03:42,400 Maar dit gaan vir ons 'n grafiese gee gebruikerskoppelvlak sodat ons kan eintlik 88 00:03:42,400 --> 00:03:46,054 skep hierdie rye en kolomme en dan met hulle praat via code. 89 00:03:46,054 --> 00:03:47,970 So, laat ons nou begin om wat ek dink is eerlik 90 00:03:47,970 --> 00:03:51,000 soort van die pret proses van die bou van die agterkant van webtuistes, 91 00:03:51,000 --> 00:03:54,580 die dele wat gebruikers nie sien nie, maar sekerlik nie omgee, 92 00:03:54,580 --> 00:03:56,170 want dit is eerder se data gaan. 93 00:03:56,170 --> 00:03:59,570 So, soortgelyk aan C en 'n bietjie minder soos PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, of 'n databasis wat ondersteun SQL, het ten minste hierdie data tipes 95 00:04:04,954 --> 00:04:05,870 en trosse van ander. 96 00:04:05,870 --> 00:04:08,107 CHAR, VARCHAR, INT, BIGINT, DESIMALE en DATETIME. 97 00:04:08,107 --> 00:04:09,940 En daar is 'n hele n klomp van die ander funksies, 98 00:04:09,940 --> 00:04:11,940 maar laat ons dit doen deur manier van die werklike voorbeeld. 99 00:04:11,940 --> 00:04:16,450 >> Ek gaan in CS50 IDE om te gaan waar in advance, het ek geteken 100 00:04:16,450 --> 00:04:19,372 en ek het ook 'n besoek van 'n URL vir hierdie instrument genoem PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 En in die sewe probleem is, sal ons vertel jou presies hoe om hierdie koppelvlak te kry 102 00:04:22,580 --> 00:04:23,200 ook. 103 00:04:23,200 --> 00:04:25,640 Op die boonste linker hoek sien dit sê lesing. 104 00:04:25,640 --> 00:04:27,610 En wat net beteken dat in advance, ek geskep 105 00:04:27,610 --> 00:04:31,360 'n leë databasis genaamd lesing wat nog nie sigblaaie in. 106 00:04:31,360 --> 00:04:32,600 Daar is geen rye en kolomme. 107 00:04:32,600 --> 00:04:34,308 Omdat die eerste ding wat ons gaan doen 108 00:04:34,308 --> 00:04:37,100 is begin om 'n tafel te skep wat gaan ons gebruikers te stoor. 109 00:04:37,100 --> 00:04:39,100 >> So, letterlik oor hier om die reg, ek is 110 00:04:39,100 --> 00:04:42,070 gaan na die databasis te vertel Ek wil 'n tabel genaamd Gebruikers. 111 00:04:42,070 --> 00:04:44,845 So, dit is soos die lêer wat ek wil al my data stoor in. 112 00:04:44,845 --> 00:04:45,720 En hoeveel kolomme? 113 00:04:45,720 --> 00:04:47,740 Wel, laat ons hou dit eenvoudig vir nou. 114 00:04:47,740 --> 00:04:51,855 Ek wil net om te slaan soos 'n gebruikersnaam en 'n naam vir 'n gebruiker. 115 00:04:51,855 --> 00:04:53,020 Ons begin klein. 116 00:04:53,020 --> 00:04:55,370 So, ek wil twee kolomme totaal. 117 00:04:55,370 --> 00:04:57,360 En ek gaan om voort te gaan en klik op Go. 118 00:04:57,360 --> 00:04:59,210 En dan, want hierdie kolomme, wat ek gaan 119 00:04:59,210 --> 00:05:04,576 om do-- as dit internet cooperates-- alles reg, 120 00:05:04,576 --> 00:05:05,950 so ons gaan om weer te probeer nie. 121 00:05:05,950 --> 00:05:09,180 Ek gaan 'n tabel genaamd skep Gebruikers met twee kolomme, kliek Gaan OK. 122 00:05:09,180 --> 00:05:10,520 Nou het ons het dit baie vinnig. 123 00:05:10,520 --> 00:05:12,065 Dankie, baie goed gedoen. 124 00:05:12,065 --> 00:05:14,440 Alle reg, so wat wil ons hierdie kolomme genoem te word? 125 00:05:14,440 --> 00:05:16,080 >> So, een gaan genoem word Gebruikersnaam. 126 00:05:16,080 --> 00:05:19,480 So, al wat ek sien here-- en die koppelvlak eerlik kry 'n bietjie lelik uiteindelik, 127 00:05:19,480 --> 00:05:21,270 sodra jy begin tik in al hierdie data. 128 00:05:21,270 --> 00:05:27,450 Maar wat is lekker is dat die soort van Vreemd genoeg, ek skep kolomme, 129 00:05:27,450 --> 00:05:29,977 maar die instrument het dwaas gelê het in rye 130 00:05:29,977 --> 00:05:31,560 sodat ek hierdie kolomme kan instel. 131 00:05:31,560 --> 00:05:33,550 So, daar is twee spasies daar onder Naam. 132 00:05:33,550 --> 00:05:36,180 En een van hierdie velde ek wil Gebruikersnaam genoem, 133 00:05:36,180 --> 00:05:38,000 en die ander in die veld wil ek Naam noem. 134 00:05:38,000 --> 00:05:40,340 >> En nou, ek het om van te kies datatipes vir hierdie dinge. 135 00:05:40,340 --> 00:05:42,330 So, terwyl dit in Excel en Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 as jy 'n kolom wil jy letterlik tik net Naam of Gebruikersnaam, druk Enter. 137 00:05:45,531 --> 00:05:48,030 Miskien het jy dit vet gesig te maak net vir duidelikheid, maar dit is dit. 138 00:05:48,030 --> 00:05:50,140 Jy hoef nie spesifiseer die tipes van die kolomme. 139 00:05:50,140 --> 00:05:53,790 Nou in Google Spreadsheets of Excel, jy kan bepaal hoe die data gelewer word. 140 00:05:53,790 --> 00:05:58,120 Jy kan gaan na die menu Formatering en jy kan spesifiseer wys soos hierdie dollar teken 141 00:05:58,120 --> 00:05:59,900 wys hierdie soos 'n drywende punt waarde. 142 00:05:59,900 --> 00:06:01,990 >> So, dit is soortgelyk in die gees aan dat dit wat ons gaan doen, 143 00:06:01,990 --> 00:06:04,740 maar dit is eintlik gaan om te dwing die data om 'n sekere soort wees. 144 00:06:04,740 --> 00:06:07,750 Nou, selfs al is 'n oomblik gelede het ek het gesê daar is net 'n paar tipes data, 145 00:06:07,750 --> 00:06:11,120 daar is eintlik 'n hele klomp, en hulle is 146 00:06:11,120 --> 00:06:12,910 in wisselende grade van spesifisiteit. 147 00:06:12,910 --> 00:06:14,970 En as 'n eenkant, jy kan selfs fancy dinge te doen 148 00:06:14,970 --> 00:06:17,520 soos stoor geometrieën binnekant van 'n databasis. 149 00:06:17,520 --> 00:06:19,250 Jy kan dinge te stoor soos GPS koördinate 150 00:06:19,250 --> 00:06:22,420 en eintlik vind, wiskundig, punte wat naby aan ander. 151 00:06:22,420 --> 00:06:24,128 Maar ons gaan hou hierdie super eenvoudige 152 00:06:24,128 --> 00:06:26,800 en optrek na hier, al die sogenaamde string tipes. 153 00:06:26,800 --> 00:06:29,240 >> So, hier is 'n lys van 'n hele klomp van opsies. 154 00:06:29,240 --> 00:06:32,740 CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 En dit is soort van oorweldigend. 156 00:06:34,110 --> 00:06:37,610 En ongelukkig ietwat paradoksaal om C, 157 00:06:37,610 --> 00:06:40,120 'n CHAR is nie regtig 'n CHAR. 158 00:06:40,120 --> 00:06:44,170 As jy spesifiseer in 'n databasis dat jou data tipe is CHAR, 159 00:06:44,170 --> 00:06:47,390 dit beteken dat ja, dit is 'n CHAR, maar dit is een of meer karakters. 160 00:06:47,390 --> 00:06:49,630 En jy het om te spesifiseer hoeveel karakters wat jy wil. 161 00:06:49,630 --> 00:06:51,636 So, wat is 'n tipiese lengte vir 'n gebruikersnaam? 162 00:06:51,636 --> 00:06:52,760 Is daar 'n beperking tipies? 163 00:06:52,760 --> 00:06:53,920 >> GEHOOR: [onhoorbaar] 164 00:06:53,920 --> 00:06:55,050 >> David Malan: 16 miskien? 165 00:06:55,050 --> 00:06:55,990 Iets soos dit. 166 00:06:55,990 --> 00:06:57,948 Jy weet, terug in die dag, dit gebruik om te wees agt. 167 00:06:57,948 --> 00:07:00,289 Soms is dit 16, soms dit is selfs meer as dit. 168 00:07:00,289 --> 00:07:02,080 En so, beteken dit nie beteken gee my 'n CHAR. 169 00:07:02,080 --> 00:07:04,730 Dit beteken ek moet spesifiseer die lengte van die veld, 170 00:07:04,730 --> 00:07:07,402 en nou kan ek iets soos 16 sê. 171 00:07:07,402 --> 00:07:08,610 En daar is 'n kompromis hier. 172 00:07:08,610 --> 00:07:11,360 So, sal ons sien in 'n oomblik dat dit beteken een 173 00:07:11,360 --> 00:07:14,620 elke gebruikersnaam moet 16 karakters wees. 174 00:07:14,620 --> 00:07:18,720 Maar wag 'n minuut, M-A-L-A-N. As dit my gebruikersnaam en ek is maar net die gebruik van vyf, 175 00:07:18,720 --> 00:07:23,070 wat sou jy voorstel dat die databasis om te doen vir die ander 11 karakters wat 176 00:07:23,070 --> 00:07:24,471 Ek het voorbehou ruimte vir? 177 00:07:24,471 --> 00:07:25,220 Wat sal jy doen? 178 00:07:25,220 --> 00:07:26,480 >> GEHOOR: [onhoorbaar] 179 00:07:26,480 --> 00:07:27,160 >> David Malan: Ja, net maak hulle almal null. 180 00:07:27,160 --> 00:07:28,290 Maak hulle ruimtes. 181 00:07:28,290 --> 00:07:30,816 Maar waarskynlik nul, so 'n baie backslash nulle. 182 00:07:30,816 --> 00:07:33,190 So, aan die een kant, ons het nou seker gemaak dat my gebruikersnaam 183 00:07:33,190 --> 00:07:34,780 kan nie meer as 16 karakters wees. 184 00:07:34,780 --> 00:07:37,590 En die ander kant van wat dat as ek het 'n baie lang naam 185 00:07:37,590 --> 00:07:39,940 of wou 'n baie lang gebruikersnaam soos sommige van julle 186 00:07:39,940 --> 00:07:44,840 ouens dalk in daardie kollege of op Yale.edu, kan jy nie een het nie. 187 00:07:44,840 --> 00:07:47,177 En so in werklikheid, as jy het ooit geregistreer vir 'n webwerf 188 00:07:47,177 --> 00:07:49,385 en jy geskree en gesê jou wagwoord is te lank 189 00:07:49,385 --> 00:07:52,710 of jou gebruikersnaam is te lank, dit is bloot omdat 'n programmeerder, wanneer 190 00:07:52,710 --> 00:07:55,500 instel sy of haar databasis, besluit dat hierdie gebied sal 191 00:07:55,500 --> 00:07:57,150 wees nie meer as dit lank. 192 00:07:57,150 --> 00:08:00,580 >> Alle reg, so what as ons voortgaan om te noem? 193 00:08:00,580 --> 00:08:05,240 Hoe lank moet 'n Noem tipiese menslike wees? 194 00:08:05,240 --> 00:08:07,492 Hoeveel karakters, 16? 195 00:08:07,492 --> 00:08:09,450 Ek vermoed ons kon kry iemand in die kamer 196 00:08:09,450 --> 00:08:13,210 waar deur sy of haar eerste plus laaste naam is langer as 16 karakters. 197 00:08:13,210 --> 00:08:14,850 So, wat is beter as dit, 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 Groter? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> GEHOOR: [onhoorbaar] 203 00:08:21,855 --> 00:08:23,700 David Malan: 5000, oh my God. 204 00:08:23,700 --> 00:08:26,309 So, dit is waarskynlik 'n ordentlike boonste verbind het, sal ons sê. 205 00:08:26,309 --> 00:08:28,350 En hier is ons soort het om 'n oordeel te bel. 206 00:08:28,350 --> 00:08:30,400 Soos, is daar geen regte antwoord hier. 207 00:08:30,400 --> 00:08:32,740 Oneindige is nie heeltemal moontlik, want ons is uiteindelik 208 00:08:32,740 --> 00:08:34,781 gaan have-- ons gaan uit van die geheue te hardloop. 209 00:08:34,781 --> 00:08:36,909 So, ons het 'n stel oordeel oproep op 'n sekere punt. 210 00:08:36,909 --> 00:08:41,010 >> Baie algemeen sou wees, byvoorbeeld, om use-- en laat my CHAR hier spesifiseer 211 00:08:41,010 --> 00:08:46,050 as before-- 255 was letterlik die boonste limiet op hierdie databasis sagteware 212 00:08:46,050 --> 00:08:46,700 jare terug. 213 00:08:46,700 --> 00:08:48,575 En so, 'n baie van die mens wil net sê, fyn. 214 00:08:48,575 --> 00:08:49,420 255 is die limiet. 215 00:08:49,420 --> 00:08:50,620 Laat ons net die maksimum gebruik. 216 00:08:50,620 --> 00:08:51,870 En dit is redelik belaglik. 217 00:08:51,870 --> 00:08:55,060 Soos, as jy tik iemand se naam vir 200 plus karakters, 218 00:08:55,060 --> 00:08:56,140 dat 'n bietjie belaglik. 219 00:08:56,140 --> 00:08:59,624 >> Maar, onthou dat ASCII is nie die enigste stelsel vir karakters. 220 00:08:59,624 --> 00:09:01,540 En so nie, veral in 'n baie van Asiatiese tale 221 00:09:01,540 --> 00:09:04,248 waar daar karakters wat ons nie kan nie druk op keyboards soos my Amerikaanse 222 00:09:04,248 --> 00:09:08,209 sleutelbord, sommige van die karakters eintlik neem 16 stukkies in plaas van agt bisse. 223 00:09:08,209 --> 00:09:10,250 En so is dit eintlik is nie al wat onredelik 224 00:09:10,250 --> 00:09:12,250 dat ons meer moet ruimte as ons wil aan te pas 225 00:09:12,250 --> 00:09:16,252 groter is as die karakters baie Amerikaanse sentriese wat ons het geneig om te bespreek. 226 00:09:16,252 --> 00:09:17,460 So, moet ons 'n paar bogrens. 227 00:09:17,460 --> 00:09:21,470 Ek weet nie wat die beste een is, maar 255 is oor die algemeen 'n algemene een. 228 00:09:21,470 --> 00:09:22,700 25 voel laag. 229 00:09:22,700 --> 00:09:23,857 16, 32 voel laag. 230 00:09:23,857 --> 00:09:25,690 Ek sou dwaal op die kant van iets hoër. 231 00:09:25,690 --> 00:09:27,330 Maar daar is 'n kompromis, soos altyd. 232 00:09:27,330 --> 00:09:31,902 Wat is die, miskien, voor die hand liggend kompromis van die reservering 255 karakters 233 00:09:31,902 --> 00:09:33,360 vir almal se naam in my databasis? 234 00:09:33,360 --> 00:09:34,230 >> GEHOOR: [onhoorbaar] 235 00:09:34,230 --> 00:09:34,510 >> David Malan: Wat is dit? 236 00:09:34,510 --> 00:09:35,430 >> GEHOOR: [onhoorbaar] 237 00:09:35,430 --> 00:09:37,138 >> David Malan: Dit is 'n baie van die geheue, reg? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Ek het nou net vermors 250 karakters net om my naam te stoor 239 00:09:42,280 --> 00:09:46,000 verdediging, net in geval iemand in die klas het 'n baie lang naam. 240 00:09:46,000 --> 00:09:47,940 Dit lyk soos 'n onnodige nadeel. 241 00:09:47,940 --> 00:09:52,040 >> So, dit blyk dat SQL, hierdie databasis taal, 242 00:09:52,040 --> 00:09:55,480 eintlik iets ondersteun genoem VARCHAR of Variable CHAR. 243 00:09:55,480 --> 00:09:59,390 En dit is 'n soort van die mooi in hierdie kan jy 'n vaste spesifiseer nie 244 00:09:59,390 --> 00:10:01,900 breedte, maar eerder 'n veranderlike breedte. 245 00:10:01,900 --> 00:10:05,060 En meer spesifiek, 'n maksimum wydte van die veld. 246 00:10:05,060 --> 00:10:08,901 So, beteken dit dat 'n naam kan nie meer as 250 karakters, 247 00:10:08,901 --> 00:10:10,150 maar dit kan beslis minder wees. 248 00:10:10,150 --> 00:10:11,733 En die databasis gaan slim wees. 249 00:10:11,733 --> 00:10:14,860 As jy sit in M-A-L-A-N, dit gaan slegs om te gebruik vyf 250 00:10:14,860 --> 00:10:18,120 Miskien ses grepe vir soos 'n sleep null karakter, 251 00:10:18,120 --> 00:10:23,330 en nie spandeer 'n bykomende 249 of 250 grepe onnodig. 252 00:10:23,330 --> 00:10:27,380 >> So, dit lyk soos ek moet begin het met hierdie storie. 253 00:10:27,380 --> 00:10:29,140 Maar daar is altyd 'n nadeel. 254 00:10:29,140 --> 00:10:33,024 So, aan die een kant, 'n gebruikersnaam Ek het gespesifiseerde om hard gekodeer op 16, 255 00:10:33,024 --> 00:10:34,940 en miskien was dit nie die regte oproep, miskien is dit 256 00:10:34,940 --> 00:10:40,040 is nie, maar hoekom dit nie gebruik VARCHARs vir alles? 257 00:10:40,040 --> 00:10:42,020 >> Dit bestaan ​​vir 'n rede. 258 00:10:42,020 --> 00:10:46,200 Hoekom VARCHARs nie gebruik vir elke veld waarvan die lengte jy nie vooraf weet 259 00:10:46,200 --> 00:10:48,180 As dit lyk na 'n groot ding wees, reg? 260 00:10:48,180 --> 00:10:50,482 Gebruik slegs soveel ruimte as wat jy nodig het om hierdie limiet? 261 00:10:50,482 --> 00:10:51,271 >> GEHOOR: stadiger. 262 00:10:51,271 --> 00:10:52,146 David Malan: Speller? 263 00:10:52,146 --> 00:10:53,120 GEHOOR: Maak dit stadiger? 264 00:10:53,120 --> 00:10:53,970 David Malan: O, dit is stadiger. 265 00:10:53,970 --> 00:10:55,720 Goed, dit is byna altyd die antwoord, eerlik. 266 00:10:55,720 --> 00:10:56,520 Soos, wat is die nadeel? 267 00:10:56,520 --> 00:10:58,570 Dit kos meer ruimte óf of dit kos meer tyd. 268 00:10:58,570 --> 00:11:00,111 So, in hierdie geval, is dit dalk stadiger wees. 269 00:11:00,111 --> 00:11:00,920 Hoekom? 270 00:11:00,920 --> 00:11:05,830 >> GEHOOR: [onhoorbaar] bepaling [onhoorbaar]. 271 00:11:05,830 --> 00:11:06,640 >> David Malan: Goed. 272 00:11:06,640 --> 00:11:09,670 So, kan jy onthou uit selfs PSED5, speel met jou benadering 273 00:11:09,670 --> 00:11:12,750 die woordeboek as jy toeken geheue dinamies of hou 274 00:11:12,750 --> 00:11:14,630 'n groeiende buffer, wat eintlik kan wees stadig. 275 00:11:14,630 --> 00:11:16,963 As jy moet malloc noem onder die enjinkap en miskien 276 00:11:16,963 --> 00:11:19,610 dit is wat MySQL doen, so sekerlik wat kan die geval wees. 277 00:11:19,610 --> 00:11:22,430 En as jy dink manier terug na PSet-- of selfs 278 00:11:22,430 --> 00:11:26,340 weke twee, toe ons het dinge soos binêre soek of selfs lineêre soek, 279 00:11:26,340 --> 00:11:30,690 een van die mooi dinge oor elke woord in 'n databasis of elke woord in 'n kolom 280 00:11:30,690 --> 00:11:33,690 om presies dieselfde lengte, selfs As 'n hele klomp van die karakters 281 00:11:33,690 --> 00:11:37,390 is leeg is, is dat jy kan gebruik ewetoeganklike op jou data, reg? 282 00:11:37,390 --> 00:11:40,310 >> As jy weet dat elke woord is 16 karakters weg, 283 00:11:40,310 --> 00:11:46,460 kan jy wyser rekenkundige gebruik, om so te spreek, en gaan ons 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 en jy kan net spring onmiddellik met behulp van rekenkundige 285 00:11:49,589 --> 00:11:51,130 aan enige van die woorde in jou databasis. 286 00:11:51,130 --> 00:11:54,280 Terwyl as dit is 'n VARCHAR, Wat doen jy in plaas daarvan het om te doen? 287 00:11:54,280 --> 00:11:55,960 >> [Telefoon lui] 288 00:11:55,960 --> 00:11:58,680 >> As dit is 'n VARCHAR jy kan nie ewetoeganklike gebruik. 289 00:11:58,680 --> 00:12:01,341 Wat jy het om te kyk vir, of doen? 290 00:12:01,341 --> 00:12:01,840 Ja? 291 00:12:01,840 --> 00:12:03,240 >> GEHOOR: [onhoorbaar] 292 00:12:03,240 --> 00:12:04,310 >> David Malan: Kyk deur die whole-- spoor 293 00:12:04,310 --> 00:12:06,518 deur die hele lys soek vir wat, waarskynlik? 294 00:12:06,518 --> 00:12:08,356 Watter soort spesiale waarde? 295 00:12:08,356 --> 00:12:09,230 GEHOOR: [onhoorbaar] 296 00:12:09,230 --> 00:12:11,105 David Malan: soek vir die null terminators 297 00:12:11,105 --> 00:12:13,637 dat baken die skeiding van woorde. 298 00:12:13,637 --> 00:12:15,720 So weer 'n nadeel, en daar is geen regte antwoord. 299 00:12:15,720 --> 00:12:18,380 Maar dit is waar, veral wanneer jou gebruikers kry baie wees 300 00:12:18,380 --> 00:12:21,700 en jou las op jou bedieners, die aantal mense wat dit gebruik kry hoog, 301 00:12:21,700 --> 00:12:23,650 dit is eintlik triviaal besluite. 302 00:12:23,650 --> 00:12:26,640 So, kan ons hierdie verlaat as dit nie, maar laat se rol af na die regte 303 00:12:26,640 --> 00:12:27,332 hier. 304 00:12:27,332 --> 00:12:30,290 Nou, daar is 'n paar van die kolomme waar ons om 'n oordeel te bel. 305 00:12:30,290 --> 00:12:35,170 Maak dit sin om 'n gebruiker toelaat se noem, gebruikersnaam 'n gebruiker se of 'n gebruiker se 306 00:12:35,170 --> 00:12:36,370 naam, nul wees? 307 00:12:36,370 --> 00:12:37,610 Dit is, net leeg. 308 00:12:37,610 --> 00:12:40,360 Voel 'n bietjie nonsens, so ek is gaan nie daardie bokse te gaan. 309 00:12:40,360 --> 00:12:42,670 Maar dit blyk in 'n databasis, kan jy sê: 310 00:12:42,670 --> 00:12:44,620 iemand kan opsioneel het hierdie waarde. 311 00:12:44,620 --> 00:12:47,180 Hierdie kolom het nie om daar eintlik. 312 00:12:47,180 --> 00:12:48,570 >> Nou, daar is dié drop down menu. 313 00:12:48,570 --> 00:12:50,810 En sien ek is nog steeds daar die eerste ry, 314 00:12:50,810 --> 00:12:52,520 so ek praat gebruikersnaam nou. 315 00:12:52,520 --> 00:12:56,290 En dit blyk dat 'n databasis, Anders as 'n eenvoudige spreadsheet blote, 316 00:12:56,290 --> 00:12:58,520 het 'n kragtige funksies genoem indekse. 317 00:12:58,520 --> 00:13:02,600 En 'n indeks is 'n manier van vertel die databasis vooruit dat ek die menslike 318 00:13:02,600 --> 00:13:03,900 is slimmer as jy. 319 00:13:03,900 --> 00:13:10,430 >> Ek weet watter soorte navrae, kies of voeg of te verwyder of te werk, 320 00:13:10,430 --> 00:13:13,182 dat my kode gaan eindig up doen op hierdie databasis. 321 00:13:13,182 --> 00:13:14,390 Ek wil 'n baie data te lees. 322 00:13:14,390 --> 00:13:15,681 Ek wil 'n baie data in te voeg. 323 00:13:15,681 --> 00:13:17,530 Ek wil voortdurend verwyder 'n baie data. 324 00:13:17,530 --> 00:13:21,520 As ek weet dat ek gaan wees toegang tot 'n veld soos Gebruikersnaam 'n baie, 325 00:13:21,520 --> 00:13:24,770 Ek kan preemptively vertel die databasis, ek meer as jy weet, 326 00:13:24,770 --> 00:13:29,220 en ek wil verbod wat jy moet indeks hierdie gebied. 327 00:13:29,220 --> 00:13:33,200 Waar kruip 'n veld of 'n kolom beteken dat die databasis in advance 328 00:13:33,200 --> 00:13:37,040 moet 'n paar idees te leen van, soos, week vier en vyf en ses van CS50 329 00:13:37,040 --> 00:13:39,240 en eintlik opbou iets soos 'n binêre soek 330 00:13:39,240 --> 00:13:41,560 boom of iets algemeen bekend as 'n B boom 331 00:13:41,560 --> 00:13:43,410 dat jy sal leer in 'n klas soos CS124 332 00:13:43,410 --> 00:13:46,710 by Harvard, 'n algoritmes klas, of enige aantal ander plekke. 333 00:13:46,710 --> 00:13:49,570 >> Die databasis en die smart mense wat dit geïmplementeer 334 00:13:49,570 --> 00:13:53,880 sal uitvind hoe om te stoor tafel van die inligting 335 00:13:53,880 --> 00:13:57,061 in die geheue, sodat navrae en ander bedrywighede is super vinnig. 336 00:13:57,061 --> 00:13:58,060 Jy hoef nie om dit te doen. 337 00:13:58,060 --> 00:14:00,640 Jy hoef nie te implementeer lineêre soek of binêre soek 338 00:14:00,640 --> 00:14:03,300 of saamsmelt soort of seleksie soort, enige van daardie. 339 00:14:03,300 --> 00:14:06,590 Die databasis doen dit vir jou as jy vertel dit preemptively na die indeks hierdie gebied. 340 00:14:06,590 --> 00:14:09,100 >> En jy kan ook sien, is daar 'n ander eienskappe 341 00:14:09,100 --> 00:14:11,010 ons kan vertel van die databasis te dwing. 342 00:14:11,010 --> 00:14:16,431 Wat kan dit beteken as ek kies Unieke Van hierdie spyskaart, net intuïtief? 343 00:14:16,431 --> 00:14:16,930 Ja? 344 00:14:16,930 --> 00:14:17,889 >> GEHOOR: [onhoorbaar] 345 00:14:17,889 --> 00:14:19,930 David Malan: Ja, die gebruikersnaam moet uniek wees. 346 00:14:19,930 --> 00:14:23,330 Is dit 'n goeie ding of n slegte ding vir 'n databasis, vir 'n webwerf met die gebruikers? 347 00:14:23,330 --> 00:14:24,965 Moet gebruikers uniek wees? 348 00:14:24,965 --> 00:14:25,880 Ja, waarskynlik. 349 00:14:25,880 --> 00:14:27,800 As dit is wat die gebied ons gebruik om aan te meld, 350 00:14:27,800 --> 00:14:31,867 jy nie regtig wil mense met dieselfde gevoel of dieselfde gebruikersnaam. 351 00:14:31,867 --> 00:14:33,700 Dus, kan ons die het databasis te dwing wat so 352 00:14:33,700 --> 00:14:37,880 wat nou in my PHP-kode of enige taal, Ek het nie ', byvoorbeeld, kyk 353 00:14:37,880 --> 00:14:41,490 noodwendig beteken dit gebruikersnaam bestaan ​​voordat ek laat iemand te registreer? 354 00:14:41,490 --> 00:14:46,690 Die databasis sal nie toelaat dat twee mense met die naam David of Malans registreer in hierdie geval. 355 00:14:46,690 --> 00:14:50,030 >> En as 'n eenkant, selfs al is dit menu kan jy net een te kies, 356 00:14:50,030 --> 00:14:54,550 'n unieke indeks is een wat geïndekseer vir super vinnige prestasie, 357 00:14:54,550 --> 00:14:56,100 maar dit dwing ook uniekheid. 358 00:14:56,100 --> 00:14:58,850 En ons sal terug te kom wat die ander twee beteken in net 'n oomblik. 359 00:14:58,850 --> 00:15:00,930 Intussen, as ek gaan na my tweede ry, wat 360 00:15:00,930 --> 00:15:06,230 is die naam van die gebruiker se moet ek spesifiseer dat die naam moet uniek wees? 361 00:15:06,230 --> 00:15:09,550 Nee, want jy kan beslis have-- daar is geen twee David 362 00:15:09,550 --> 00:15:11,050 Malans in hierdie kamer, waarskynlik. 363 00:15:11,050 --> 00:15:14,290 Maar as ons kies 'n ander naam, ons kan sekerlik botsings. 364 00:15:14,290 --> 00:15:16,130 >> Dink terug aan tafels en dies hash. 365 00:15:16,130 --> 00:15:18,604 So, ons het beslis nie wil hê om die veld naam uniek maak. 366 00:15:18,604 --> 00:15:21,270 So, ons gaan net om te laat dat stamp nie, stamp nie, stamp nie, niks. 367 00:15:21,270 --> 00:15:22,660 En ek gaan om te verlaat alles alleen. 368 00:15:22,660 --> 00:15:25,035 Trouens, die meeste van hierdie velde ons sal nie hoef te bekommer oor. 369 00:15:25,035 --> 00:15:27,830 En wanneer ek gereed is om hierdie te red, indien die internet saam, 370 00:15:27,830 --> 00:15:35,032 Ek klik op Save, en baie, baie, baie stadig nie die databasis gered. 371 00:15:35,032 --> 00:15:37,240 En nou is ek terug na hierdie koppelvlak, wat weliswaar, 372 00:15:37,240 --> 00:15:38,680 is oorweldigend op die eerste oogopslag. 373 00:15:38,680 --> 00:15:42,450 Maar al wat ek gaan doen is kliek op die woord Gebruikers links bo. 374 00:15:42,450 --> 00:15:47,630 Ek gaan hier gaan, kliek Gebruikers, en by verstek, is dit 375 00:15:47,630 --> 00:15:50,180 het uitgevoer paar SQL, maar meer oor dit in 'n oomblik. 376 00:15:50,180 --> 00:15:52,654 Hier is net 'n opsomming van wat ek gedoen het. 377 00:15:52,654 --> 00:15:55,320 En nie bekommerd te wees dat jy sien melding gemaak van Latyns-en Sweedse hier. 378 00:15:55,320 --> 00:16:00,490 Dit is net die standaard instellings, want MySQL oorspronklik, 379 00:16:00,490 --> 00:16:04,000 of PHP MyAdmin, een van die twee gebeur geskryf moet word deur 'n paar mense Sweedse. 380 00:16:04,000 --> 00:16:06,100 Maar dit is irrelevant in ons geval hier. 381 00:16:06,100 --> 00:16:08,280 >> Alle reg, so hoekom is dit alles interessante? 382 00:16:08,280 --> 00:16:13,050 Dit blyk uit, ek kan data in te voeg in 'n databasis deur te skryf kode. 383 00:16:13,050 --> 00:16:15,940 En ek gaan voort en in my lêer hier, ek is 384 00:16:15,940 --> 00:16:19,000 gaan om voort te gaan en te maak asof soos dit is bedraad om die databasis, wat 385 00:16:19,000 --> 00:16:23,040 dit is nie op die oomblik nie, maar dit sal wees wanneer ons by die probleem die sewe. 386 00:16:23,040 --> 00:16:25,640 En ek gaan om voort te gaan en voer 'n funksie genoem navraag, 387 00:16:25,640 --> 00:16:28,730 wat ons aan julle sal gee in die probleem die sewe se verspreiding kode, wat 388 00:16:28,730 --> 00:16:31,490 neem ten minste een argument, wat net 'n string. 389 00:16:31,490 --> 00:16:33,460 'N string van SQL-kode. 390 00:16:33,460 --> 00:16:36,700 So, jy oor om te leer hoe om is skryf Structured Query Language. 391 00:16:36,700 --> 00:16:41,270 >> As ek wil 'n nuwe ry voeg in my databasis omdat iemand voorgelê 392 00:16:41,270 --> 00:16:47,600 'n vorm om my kode, sou ek letterlik skryf voeg in die volgende gebruikers 393 00:16:47,600 --> 00:16:52,800 velde: gebruikersnaam, komma, naam, die waardes, 394 00:16:52,800 --> 00:16:57,480 en nou moet ek voeg iets soos Malan, en kwotasie, 395 00:16:57,480 --> 00:17:01,490 unquote 'David Malan. " En nou selfs vir diegene wat nie vertroud met SQL, 396 00:17:01,490 --> 00:17:07,830 Daarom gebruik ek enkele aanhalings binnekant van hierdie groen string? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Wat kan die rede wees hier? 399 00:17:13,040 --> 00:17:14,609 >> Let Ek is mede-vermenging twee tale. 400 00:17:14,609 --> 00:17:18,099 Query is 'n PHP funksie, maar dit neem 'n argument. 401 00:17:18,099 --> 00:17:21,740 En dat argument het om homself te wees geskryf in 'n ander taal, die sogenaamde 402 00:17:21,740 --> 00:17:23,500 SQL, Structured Query Language. 403 00:17:23,500 --> 00:17:27,940 So, alles wat ek het nou net hier uitgelig 404 00:17:27,940 --> 00:17:30,380 is hierdie taal genoem SQL. 405 00:17:30,380 --> 00:17:36,290 So, wat is die enkele aanhalings, net soos 'n vinnige gesonde verstand tjek? 406 00:17:36,290 --> 00:17:37,324 Gaan voort. 407 00:17:37,324 --> 00:17:37,990 Hulle is snare. 408 00:17:37,990 --> 00:17:41,590 So, haal, unquote Malan en kwotasie, unquote David Malan is snare. 409 00:17:41,590 --> 00:17:45,210 En net te dink nou intuïtief, weet wat jy weet oor C en PHP, 410 00:17:45,210 --> 00:17:50,220 Hoekom het ek nie hierdie wat ek gewoonlik doen, gebruik dubbele aanhalingstekens vir strykers? 411 00:17:50,220 --> 00:17:52,310 Hoekom het ek wil nie om dit te doen? 412 00:17:52,310 --> 00:17:52,810 Ja? 413 00:17:52,810 --> 00:17:53,685 >> GEHOOR: [onhoorbaar] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 David Malan: Presies. 416 00:17:57,570 --> 00:17:59,653 Omdat ek reeds gebruik dubbele aanhalingstekens op die pad 417 00:17:59,653 --> 00:18:01,929 buite die argument die PHP funksie, 418 00:18:01,929 --> 00:18:03,470 Ek wil net verwar die tolk. 419 00:18:03,470 --> 00:18:04,860 Dit sal nie weet nie, moenie dit saam gaan? 420 00:18:04,860 --> 00:18:05,735 Moenie hierdie saam te gaan? 421 00:18:05,735 --> 00:18:06,810 Moenie hierdie saam te gaan? 422 00:18:06,810 --> 00:18:08,070 So, ek wissel plaas. 423 00:18:08,070 --> 00:18:11,784 >> Of ek kan iets soos dit te doen, backslash kwotasie of backslash kwotasie. 424 00:18:11,784 --> 00:18:14,200 Eerlik, wat net begin kry baie deurmekaar en lelik. 425 00:18:14,200 --> 00:18:16,790 Maar dit sal bereik dieselfde resultaat as well. 426 00:18:16,790 --> 00:18:19,760 >> So, as ek na hierdie voer navraag nou, laat ons sien wat gebeur. 427 00:18:19,760 --> 00:18:22,740 Ek gaan nou en eerder voort te gaan as voer die PHP-kode, wat 428 00:18:22,740 --> 00:18:24,610 is waar jy sal speel in die probleem stel sewe 429 00:18:24,610 --> 00:18:27,200 Ek gaan plaas toe gaan PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 En ek met die hand gaan om te gaan na die blad SQL, 431 00:18:29,770 --> 00:18:31,580 en laat my zoom in op die koppelvlak. 432 00:18:31,580 --> 00:18:34,007 En ek gaan om te plak in die ding wat ek net getik. 433 00:18:34,007 --> 00:18:36,090 En die kleurkodering het verander 'n bietjie nou, 434 00:18:36,090 --> 00:18:38,750 net omdat die program formate dinge 'n bietjie anders. 435 00:18:38,750 --> 00:18:41,960 Maar let dat alles wat ek gedoen het is ek gesê het, voeg in Gebruikers. 436 00:18:41,960 --> 00:18:45,790 Ek het gespesifiseer, dan, in 'n komma geskei aangehaalde Lys die twee 437 00:18:45,790 --> 00:18:48,850 velde wat ek wil voeg, en dan Ek het letterlik gesê waardes 438 00:18:48,850 --> 00:18:51,510 gevolg deur 'n ander hakie, en dan sal die twee waardes 439 00:18:51,510 --> 00:18:53,520 Ek wil plug-in, en nou vir 'n goeie maat, 440 00:18:53,520 --> 00:18:55,010 Ek sal 'n kommapunt sit aan die einde. 441 00:18:55,010 --> 00:18:56,570 So, dit is nie C. Dit is nie PHP. 442 00:18:56,570 --> 00:18:59,970 Dit is nou SQL, en ek plak dit in hierdie web-gebaseerde koppelvlak wat 443 00:18:59,970 --> 00:19:02,710 net gaan om my te laat, so gou as ek klik Gaan 444 00:19:02,710 --> 00:19:08,060 voer hierdie navraag op die databasis hardloop binnekant van CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> So dit is goed. 446 00:19:09,470 --> 00:19:12,520 Kennis dat gesê een ry ingevoeg, het super vinnig, 447 00:19:12,520 --> 00:19:15,190 0,0054 sekondes om die data in te voeg. 448 00:19:15,190 --> 00:19:16,610 So, dit klink mooi gesond. 449 00:19:16,610 --> 00:19:19,350 Dit microverfilmde my navraag vir my hier net om dit te sien 450 00:19:19,350 --> 00:19:21,730 in soort van kleurgekodeerde weergawe. 451 00:19:21,730 --> 00:19:24,540 Maar nou as ek klik Kyk, let dat, selfs 452 00:19:24,540 --> 00:19:29,070 al is daar is 'n baie van die warboel op die skerm, my tafel het nou twee rye. 453 00:19:29,070 --> 00:19:30,700 >> So, laat my gaan voort en 'n ander te doen. 454 00:19:30,700 --> 00:19:33,760 In plaas van hierdie, laat my gaan na die blad SQL weer. 455 00:19:33,760 --> 00:19:40,723 En hierdie keer sal ek iets soos voeg Rob en sy naam sal wees Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Kom ons Kliek Save. 458 00:19:44,040 --> 00:19:46,140 Oeps, eerder Gaan. 459 00:19:46,140 --> 00:19:48,890 >> Klik op Blaai weer en nou sien ek het twee rye. 460 00:19:48,890 --> 00:19:52,390 So, dit is net 'n manier meer komplekse manier van die opening Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 en net tik 'n ry in 'n kolom. 462 00:19:54,010 --> 00:19:57,070 Maar wat is die sleutel, is dat ons het nou die sintaksis 463 00:19:57,070 --> 00:20:00,220 waarmee kode te skryf sodat Uiteindelik, kan ons eintlik 464 00:20:00,220 --> 00:20:01,790 doen 'n paar, en dit. 465 00:20:01,790 --> 00:20:05,380 Onthou dat PHP ondersteun super globale veranderlikes. 466 00:20:05,380 --> 00:20:08,415 >> Wat is die binnekant van dollar teken underscore Kry PHP? 467 00:20:08,415 --> 00:20:10,290 Ons het 'n blik op 'n of twee eenvoudige voorbeelde. 468 00:20:10,290 --> 00:20:15,640 En in PSet6, onthou jy hallo dot PHP wat hierdie veranderlike gebruik. 469 00:20:15,640 --> 00:20:17,870 Wat gaan daar? 470 00:20:17,870 --> 00:20:21,015 Of wat is dit? 471 00:20:21,015 --> 00:20:22,522 'N bietjie harder. 472 00:20:22,522 --> 00:20:23,790 >> GEHOOR: [onhoorbaar] 473 00:20:23,790 --> 00:20:25,030 >> David Malan: Dit is 'n sneeu nageslag van skikking, wat 474 00:20:25,030 --> 00:20:27,714 is net 'n fancy manier om te sê 'n skikking wat sleutel waarde pare het. 475 00:20:27,714 --> 00:20:28,880 En die sleutels is nie numeriese. 476 00:20:28,880 --> 00:20:30,420 Hulle is woorde of snare. 477 00:20:30,420 --> 00:20:32,750 En spesifiek, wat is dié sleutel waarde pare? 478 00:20:32,750 --> 00:20:35,110 Waar kom hulle vandaan? 479 00:20:35,110 --> 00:20:35,620 Jammer? 480 00:20:35,620 --> 00:20:36,994 >> GEHOOR: [onhoorbaar] 481 00:20:36,994 --> 00:20:37,660 David Malan: Geen? 482 00:20:37,660 --> 00:20:40,700 Waar kom dié sleutel waarde pare vandaan? 483 00:20:40,700 --> 00:20:42,490 Weer sê? 484 00:20:42,490 --> 00:20:44,610 Weer? 485 00:20:44,610 --> 00:20:46,472 Is ek die enigste een verhoor iets? 486 00:20:46,472 --> 00:20:47,810 >> [Gelag] 487 00:20:47,810 --> 00:20:49,042 >> Dit is reg, ja? 488 00:20:49,042 --> 00:20:50,435 >> GEHOOR: [onhoorbaar] 489 00:20:50,435 --> 00:20:52,560 David Malan: Ja, hulle kom uit die navraag string. 490 00:20:52,560 --> 00:20:55,380 So, as jy rewind in die tyd van wanneer ons gespeel het met Google 491 00:20:55,380 --> 00:20:59,600 en ons het tot Google.com slash gegaan soek vraagteken q gelyk katte, 492 00:20:59,600 --> 00:21:03,550 as ek druk Enter en as Google geïmplementeer in PHP, 493 00:21:03,550 --> 00:21:07,017 PHP kode wat Google het sou toegang tot dollar teken het 494 00:21:07,017 --> 00:21:11,600 onderstreep AOO binnekant van wat is 'n belangrike genoem Q en 'n waarde 495 00:21:11,600 --> 00:21:17,680 genoem katte wat dit dan kan gebruik gebruik om 'n werklike search doen met. 496 00:21:17,680 --> 00:21:20,860 >> So, in werklikheid, wat ek gaan nou doen is terug te gaan na my PHP-kode 497 00:21:20,860 --> 00:21:23,140 dat jy weer sal sien meer van in PSet7. 498 00:21:23,140 --> 00:21:25,440 En in plaas van die steek in harde gekodeerde waardes wat 499 00:21:25,440 --> 00:21:27,630 lyk nie soos 'n baie dinamiese webwerf, 500 00:21:27,630 --> 00:21:30,680 Ek gaan vir jou 'n teaser van gee wat die werklike kode sou doen. 501 00:21:30,680 --> 00:21:32,854 Jy sal in twee sit vraagtekens soos hierdie. 502 00:21:32,854 --> 00:21:34,270 Ek weet nie wat die gebruikersnaam is. 503 00:21:34,270 --> 00:21:37,390 Ek weet nie wat die naam gaan wees, 504 00:21:37,390 --> 00:21:39,470 maar ek weet ek kan kry hulle dinamiese. 505 00:21:39,470 --> 00:21:43,420 >> Dus, as die kode wat ons nou skryf is die kode wat uitgevoer word op Google se bedieners, 506 00:21:43,420 --> 00:21:46,940 of indien dit hallo dot PHP, wat kom met PSet6, 507 00:21:46,940 --> 00:21:48,650 Ek gaan om te slaag in die navraag funksie 508 00:21:48,650 --> 00:21:51,450 net soos printf, twee ander argumente. 509 00:21:51,450 --> 00:21:57,120 KRY, haal, unquote gebruikersnaam, en kry, haal, unquote naam. 510 00:21:57,120 --> 00:22:00,720 En nou, let op wat die algemene struktuur is hier. 511 00:22:00,720 --> 00:22:03,320 Ek het aan die linkerkant kant van die oproep, 512 00:22:03,320 --> 00:22:05,480 hierdie funksie genoem navraag in PHP. 513 00:22:05,480 --> 00:22:08,160 Ek het nog steeds as 'n eerste argument, net 'n string van die teks. 514 00:22:08,160 --> 00:22:11,000 >> Maar dat string teks is geskryf in 'n taal, die sogenaamde SQL. 515 00:22:11,000 --> 00:22:12,616 En eerlik, dit is nie 'n groot taal. 516 00:22:12,616 --> 00:22:14,990 Ons gaan net om te praat oor dit formeel vandag, regtig. 517 00:22:14,990 --> 00:22:17,031 En dan in die probleem stel sewe, daar is relatief 518 00:22:17,031 --> 00:22:18,800 paar eienskappe wat ons gaan hefboom. 519 00:22:18,800 --> 00:22:22,530 Die vraagtekens, al is, beteken prop in 'n waarde hier en plug in 'n ander waarde 520 00:22:22,530 --> 00:22:23,130 hier. 521 00:22:23,130 --> 00:22:26,010 En kennis, het ek uitgelaat wat van regoor die quote-- damn 522 00:22:26,010 --> 00:22:30,470 it-- rondom die kwotasie punte hierdie tyd. 523 00:22:30,470 --> 00:22:34,930 Ek het die kwotasie uitgelaat punte rondom die vraagteken, 524 00:22:34,930 --> 00:22:36,410 Jammer, hierdie keer. 525 00:22:36,410 --> 00:22:38,870 >> So, wat is lekker oor hierdie vraagteken funksie wat 526 00:22:38,870 --> 00:22:42,830 PHP is geneig om te ondersteun, Ruby en Python en ander tale, 527 00:22:42,830 --> 00:22:45,730 dit beteken net plug in sommige waardeer hier en weet jy wat? 528 00:22:45,730 --> 00:22:48,300 Jy uitvind of om te gebruik aanhalingstekens of dubbele aanhalingstekens. 529 00:22:48,300 --> 00:22:50,966 Moet my nie lastig met dié intellektueel oninteressant besonderhede. 530 00:22:50,966 --> 00:22:53,780 Maar, maak seker dit is korrek sodat my kode is uiteindelik 531 00:22:53,780 --> 00:22:57,010 operasionele en veilige, wat sal 'n betekenis het kort voor lank. 532 00:22:57,010 --> 00:23:00,460 >> Nou, hoeveel argumente totaal, net om duidelik wees, is die soektog funksie neem? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Iemand wil hê om te stem vir meer as twee? 535 00:23:07,581 --> 00:23:08,080 Drie? 536 00:23:08,080 --> 00:23:10,001 Seker nie, hoekom? 537 00:23:10,001 --> 00:23:10,920 Hoekom drie? 538 00:23:10,920 --> 00:23:12,305 >> GEHOOR: [onhoorbaar] 539 00:23:12,305 --> 00:23:13,180 David Malan: Presies. 540 00:23:13,180 --> 00:23:14,610 Die eerste deel is die string. 541 00:23:14,610 --> 00:23:18,640 Die tweede argument is dollar teken onderstreep AOO gebruikersnaam bracket. 542 00:23:18,640 --> 00:23:21,950 En die derde argument is die dieselfde ding, maar net die naam. 543 00:23:21,950 --> 00:23:24,590 So met ander woorde, wat nou as ek 'n web vorm 544 00:23:24,590 --> 00:23:27,149 wat moes teks velde, een vir die gebruiker gebruikersnaam se 545 00:23:27,149 --> 00:23:29,690 een vir sy of haar naam, net soos jy sou in 'n webwerf te sien 546 00:23:29,690 --> 00:23:32,120 wanneer jy registreer vir sommige webwerf, kan dit 547 00:23:32,120 --> 00:23:35,450 wees die kode op die agterkant wat eintlik nie die invoeging nou 548 00:23:35,450 --> 00:23:37,220 in die databasis. 549 00:23:37,220 --> 00:23:40,870 >> Nou daarenteen, laat ons vinnig vorentoe. 550 00:23:40,870 --> 00:23:43,840 Veronderstel 'n gebruiker is nou meld in en jy wil 551 00:23:43,840 --> 00:23:48,860 PHP-kode wat tjeks of skryf die persoon wat is net aangemeld 552 00:23:48,860 --> 00:23:52,250 is eintlik 'n gebruiker, kan jy gebruik eenvoudig sintaksis. 553 00:23:52,250 --> 00:23:55,832 Jy kan sê SELECT, kom ons sê Star, waar sterre beteken alles. 554 00:23:55,832 --> 00:23:57,540 Ek weet nie wat ek wil, so gee my net 555 00:23:57,540 --> 00:24:01,585 al die kolomme van die tafel genoem gebruikers waar, en dit is lekker. 556 00:24:01,585 --> 00:24:03,710 Kies ondersteun wat is bekend as 'n gesegde wat 557 00:24:03,710 --> 00:24:06,630 soos 'n manier om te kwalifiseer wat jy wil. 558 00:24:06,630 --> 00:24:10,590 Waar gebruikersnaam gelyk quote, unquote Malan. 559 00:24:10,590 --> 00:24:13,680 So ook hier, het ek ingesluit binne-in die argument 560 00:24:13,680 --> 00:24:16,110 om 'n PHP funksie, 'n lyn van SQL-kode. 561 00:24:16,110 --> 00:24:18,680 En dat SQL-kode hierdie tyd letterlik gaan 562 00:24:18,680 --> 00:24:21,790 om te soek na quote, unquote Malan. 563 00:24:21,790 --> 00:24:24,420 >> Nou dit is nie al wat nuttig, so ek gaan om te slaan wat 564 00:24:24,420 --> 00:24:28,650 en ek gaan sit weg hierdie wenk van Brady, en gaan 565 00:24:28,650 --> 00:24:30,990 en plug-in plaas 'n vraagteken hier. 566 00:24:30,990 --> 00:24:33,290 So, net om duidelik te wees, wat moet my tweede argument 567 00:24:33,290 --> 00:24:37,480 word as iemand net aangemeld en ek wil om te kyk of hy of sy is eintlik 568 00:24:37,480 --> 00:24:39,265 'n gebruiker? 569 00:24:39,265 --> 00:24:40,140 GEHOOR: [onhoorbaar] 570 00:24:40,140 --> 00:24:40,890 David Malan: Ja. 571 00:24:40,890 --> 00:24:44,120 Ek hoor dollar teken underscore KRY quote, unquote gebruikersnaam. 572 00:24:44,120 --> 00:24:50,040 En dat moet terugkeer na my enige van die rye in my databasis 573 00:24:50,040 --> 00:24:51,986 dat 'n rekening van Malan. 574 00:24:51,986 --> 00:24:54,860 Nou hopelik, ek gaan om terug te kry nul as Malan se hier nooit, 575 00:24:54,860 --> 00:24:56,290 of een of hy. 576 00:24:56,290 --> 00:24:59,026 Ek moet nie terug te kry twee of drie of vier. 577 00:24:59,026 --> 00:24:59,526 Hoekom? 578 00:24:59,526 --> 00:25:00,220 >> GEHOOR: [onhoorbaar] 579 00:25:00,220 --> 00:25:01,120 >> David Malan: Ek het gesê unieke, reg? 580 00:25:01,120 --> 00:25:01,750 Eenvoudige rede. 581 00:25:01,750 --> 00:25:04,030 Want ek het gesê dit het tot uniek wees, net logies, 582 00:25:04,030 --> 00:25:07,940 Jy kan slegs een of nul Malans in hierdie spesifieke databasis tabel. 583 00:25:07,940 --> 00:25:10,965 Nou as 'n eenkant, net sodat jy gesien het dit, alhoewel ek hou die gebruik van AOO 584 00:25:10,965 --> 00:25:14,350 en selfs al PSet6 slegs gebruik , Kan jy seker Post. 585 00:25:14,350 --> 00:25:17,212 En onthou dat Post is 'n ander tegniek vir die indiening van inligting 586 00:25:17,212 --> 00:25:19,170 uit 'n vorm, maar dit nie opdaag nie in die URL. 587 00:25:19,170 --> 00:25:22,690 Dit is 'n bietjie meer veilig beslis vir dinge soos gebruikersname en wagwoorde, 588 00:25:22,690 --> 00:25:25,210 wat PSet7 sal, in werklikheid, te betrek. 589 00:25:25,210 --> 00:25:28,130 >> So, laat ons dit doen in PHP MyAdmin en kyk wat gebeur. 590 00:25:28,130 --> 00:25:30,020 Ek gaan om te gaan na die blad MySQL. 591 00:25:30,020 --> 00:25:34,450 En sien dat die standaard waarde vir PHP MyAdmin, net om te probeer om behulpsaam te wees, 592 00:25:34,450 --> 00:25:37,050 is om sterre te kies uit gebruikers waar 'n mens. 593 00:25:37,050 --> 00:25:39,430 Wel, een is altyd waar is, so dit het die dom effektiewe 594 00:25:39,430 --> 00:25:40,400 van net kies alles. 595 00:25:40,400 --> 00:25:42,691 Maar ek gaan 'n bietjie te wees meer pedanties en met die hand 596 00:25:42,691 --> 00:25:45,920 tik SELECT ster van die gebruikers. 597 00:25:45,920 --> 00:25:48,294 >> Nou tegnies, kan jy haal die naam van die tafels. 598 00:25:48,294 --> 00:25:50,460 Dit is selde dat jy moet, maar kennis van hierdie is nie 599 00:25:50,460 --> 00:25:52,240 jou normale aanhalings op die Amerikaanse sleutelbord. 600 00:25:52,240 --> 00:25:54,760 Dit is die sogenaamde backtick, wat is oor die algemeen aan die linkerkant top hand 601 00:25:54,760 --> 00:25:56,000 hoek van jou sleutelbord. 602 00:25:56,000 --> 00:25:58,500 Maar dit is selde dat jy sal werklik nodig om te pla met wat, 603 00:25:58,500 --> 00:25:59,950 so sal Ek hulle net laat in elk geval. 604 00:25:59,950 --> 00:26:02,280 So nou, laat my gaan voort en tref gaan. 605 00:26:02,280 --> 00:26:06,616 En hoeveel rye moet ek terug toe ek ster van die gebruikers kies? 606 00:26:06,616 --> 00:26:08,407 >> GEHOOR: [onhoorbaar] 607 00:26:08,407 --> 00:26:09,990 David Malan: Die aantal rye, seker nie. 608 00:26:09,990 --> 00:26:12,390 Maar hoeveel van hierdie beton storie nou? 609 00:26:12,390 --> 00:26:14,640 Twee, want daar was my en daar was Rob. 610 00:26:14,640 --> 00:26:19,370 Dus, as ek op Go, ek sien dat die visueel Ek het terug gekry, ja, twee rye. 611 00:26:19,370 --> 00:26:22,060 Daar is 'n baie van die warboel van die skerm, maar ek sien net twee rye. 612 00:26:22,060 --> 00:26:28,580 In teenstelling hiermee, as ek dit weer doen en doen SELECT ster van die gebruikers, waar gebruikersnaam 613 00:26:28,580 --> 00:26:31,840 gelyk quote, unquote Malan, nou as ek klik Gaan 614 00:26:31,840 --> 00:26:33,970 Ek gaan net een ry terug te kry. 615 00:26:33,970 --> 00:26:36,499 En laastens, as ek dit doen iets soos hierdie, veronderstel 616 00:26:36,499 --> 00:26:38,290 dat ek nie omgee om alles, 617 00:26:38,290 --> 00:26:41,020 wat is 'n soort van betekenisloos nou, want daar is slegs twee kolomme. 618 00:26:41,020 --> 00:26:43,103 Dit is nie soos ek kies 'n groot hoeveelheid van die data. 619 00:26:43,103 --> 00:26:46,720 Dink ek gaan voort en moenie KIES naam 620 00:26:46,720 --> 00:26:51,990 gebruikers, waar gebruikersnaam gelyk Malan, wat is lekker oor SQL eerlik, 621 00:26:51,990 --> 00:26:54,290 is dat dit regtig net doen wat jy vertel dit te doen. 622 00:26:54,290 --> 00:26:57,550 Dit is redelik bondige, maar jy letterlik sê net dit wat jy wil doen. 623 00:26:57,550 --> 00:27:01,130 Kies naam van die gebruikers, waar die gebruikersnaam gelyk Malan. 624 00:27:01,130 --> 00:27:03,440 En dit is regtig so duidelik. 625 00:27:03,440 --> 00:27:08,410 So, nou as ek getref Go, hoeveel rye gaan ek om terug te kry? 626 00:27:08,410 --> 00:27:10,770 Een, want dit is net Malan, hopelik. 627 00:27:10,770 --> 00:27:13,100 Of zero as hy nie daar, maar een maksimaal. 628 00:27:13,100 --> 00:27:17,610 >> En hoeveel kolomme ek terug? 629 00:27:17,610 --> 00:27:18,450 Hoeveel kolomme? 630 00:27:18,450 --> 00:27:20,658 Hierdie tyd, is ek net gaan om een ​​te kry, want ek het nie 631 00:27:20,658 --> 00:27:22,380 Kies ster wat is alles. 632 00:27:22,380 --> 00:27:27,900 Nou is ek kies net die naam, sodat ek net terug te kry een kolom en een ry. 633 00:27:27,900 --> 00:27:31,730 En dit lyk soort van toepaslik belaglik, net op soek super 634 00:27:31,730 --> 00:27:33,060 klein soos hierdie. 635 00:27:33,060 --> 00:27:34,290 So, wat is regtig gebeur? 636 00:27:34,290 --> 00:27:36,890 Wanneer jy 'n SQL navraag gebruik van te kies, 637 00:27:36,890 --> 00:27:38,700 wat jy kry terug van die databasis 638 00:27:38,700 --> 00:27:42,970 is soos 'n tydelike tabel met rye en kolomme, miskien, 639 00:27:42,970 --> 00:27:46,260 maar dat niks laat dat was nie eintlik deur jou gekies. 640 00:27:46,260 --> 00:27:49,010 So, dit is soos wanneer iemand het 'n groot spreadsheet van al die studente 641 00:27:49,010 --> 00:27:51,610 geregistreer vir 'n paar student-groep, en jy sê, 642 00:27:51,610 --> 00:27:55,097 gee my al die eerstejaars wat het geregistreer vir ons student groep, wat 643 00:27:55,097 --> 00:27:56,930 jou kollega in die student groep kan doen 644 00:27:56,930 --> 00:27:58,430 is hulle kan net hand jy kan die hele spreadsheet. 645 00:27:58,430 --> 00:27:59,742 Dit is soos om te sê kies ster. 646 00:27:59,742 --> 00:28:02,200 En dit is 'n bietjie irriterend as jy net wou die eerstejaars. 647 00:28:02,200 --> 00:28:05,640 En so, as jy plaas gesê kies ster van databasis tabel 648 00:28:05,640 --> 00:28:08,470 waar jaar gelyk quote, unquote eerstejaars, 649 00:28:08,470 --> 00:28:10,810 dit is asof jou vriend in die student groep 650 00:28:10,810 --> 00:28:13,770 letterlik uitgelig en gekopieer net die eerstejaars rye, 651 00:28:13,770 --> 00:28:16,780 geplak hulle in 'n nuwe Google Sigblad of 'n Excel-lêer, 652 00:28:16,780 --> 00:28:18,860 en oorhandig jou terug die net as gevolg lêer. 653 00:28:18,860 --> 00:28:21,710 Dit is al wat gaan op konseptueel hier. 654 00:28:21,710 --> 00:28:23,920 >> So op die ou end, kan ons doen 'n paar mooi fancy dinge 655 00:28:23,920 --> 00:28:26,560 deur dinge te stoor soos gebruikers en wagwoorde en dies meer. 656 00:28:26,560 --> 00:28:30,310 Maar, dit blyk, moet ons doen 'n bietjie anders as dit. 657 00:28:30,310 --> 00:28:34,750 Dit is nie dat die smart slegs stoor 'n gebruikersnaam en 'n wagwoord. 658 00:28:34,750 --> 00:28:37,790 Iemand het vroeër, dink ek af hier, het voorgestel 'n ID. 659 00:28:37,790 --> 00:28:40,787 Nou 'n ID kan wees soos 'n Harvard ID of Yale se Net ID, 660 00:28:40,787 --> 00:28:42,870 maar dit kon nog makliker wees in ons databasis geval. 661 00:28:42,870 --> 00:28:45,120 En inderdaad, die gemeenskaplike geval is aan 'n ander kolom. 662 00:28:45,120 --> 00:28:46,953 En ek gaan om te gaan voort en my tafel te wysig. 663 00:28:46,953 --> 00:28:49,521 En as jy om te speel met hierdie koppelvlak vir PSet7, 664 00:28:49,521 --> 00:28:51,770 sal jy sien dat jy kan kyk hierdie knoppie hier en voeg 665 00:28:51,770 --> 00:28:53,750 'n veld by die begin van die tafel. 666 00:28:53,750 --> 00:28:56,720 As ek dan nou op Go, dit gaan my een van daardie vorms gee 667 00:28:56,720 --> 00:28:57,600 van vroeër. 668 00:28:57,600 --> 00:29:00,170 Ek gaan 'n veld met die naam ID voeg. 669 00:29:00,170 --> 00:29:03,070 En ek gaan om dit te 'n numeriese tipe te maak. 670 00:29:03,070 --> 00:29:05,362 >> Ek het 'n hele klomp van waardes vir numerieke. 671 00:29:05,362 --> 00:29:08,677 Ek is net gaan 'n INT te kies en nie bekommerd wees oor die uiteenlopende groottes. 672 00:29:08,677 --> 00:29:10,510 Ek hoef nie te spesifiseer 'n lengte of 'n waarde, 673 00:29:10,510 --> 00:29:13,710 want dit gaan wees 32 stukkies nie saak wat. 674 00:29:13,710 --> 00:29:16,070 Eienskappe, het ons nie voor sien. 675 00:29:16,070 --> 00:29:18,410 Belang in enige van hierdie kieslys opsies hierdie tyd? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Vir 'n INT? 678 00:29:23,745 --> 00:29:24,620 Wat het jy voor? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Geen? 681 00:29:28,445 --> 00:29:29,570 Het enige van hierdie maak sin? 682 00:29:29,570 --> 00:29:30,536 Ja. 683 00:29:30,536 --> 00:29:31,900 Ja, unsigned, reg? 684 00:29:31,900 --> 00:29:35,930 >> Oor die algemeen, as ons gaan om te gee almal 'n unieke nommer, wat 685 00:29:35,930 --> 00:29:38,200 is waar hierdie storie is gaan, het ek regtig wil net 686 00:29:38,200 --> 00:29:41,919 'n persoon om die nommer soos nul hê en een en twee en drie en vier. 687 00:29:41,919 --> 00:29:43,710 Ek het nie nodig om te gaan met negatiewe getalle. 688 00:29:43,710 --> 00:29:45,210 Dit lyk net soos onnodige kompleksiteit. 689 00:29:45,210 --> 00:29:48,470 Ek wil 4000000000 moontlike waardes, nie 4000000000 moontlike waardes, 690 00:29:48,470 --> 00:29:50,699 sodat ek net verdubbel die kapasiteit van my INT. 691 00:29:50,699 --> 00:29:53,490 As 'n eenkant, as jy wil om te hou verband hierdie om iets soos Facebook, 692 00:29:53,490 --> 00:29:56,190 terug in soort van my dag toe Facebook eerste uitgekom het, 693 00:29:56,190 --> 00:29:59,510 Ek glo wat hulle die gebruik van hul MySQL databasis 694 00:29:59,510 --> 00:30:02,856 te slaan 'n gebruiker se identifiseerder, was net 'n INT. 695 00:30:02,856 --> 00:30:05,230 Maar natuurlik, daar is 'n baie van die werklike mense in die wêreld. 696 00:30:05,230 --> 00:30:07,438 Daar is 'n baie valse Facebook rekeninge in die wêreld. 697 00:30:07,438 --> 00:30:11,701 En so uiteindelik, Facebook oorstroom die grootte van 'n INT, 'n 4000000000 698 00:30:11,701 --> 00:30:12,200 waarde. 699 00:30:12,200 --> 00:30:15,032 Dit is waarom, as jy kyk rond en daar is webwerwe 700 00:30:15,032 --> 00:30:16,740 wat kan vertel wat jou unieke ID is. 701 00:30:16,740 --> 00:30:19,781 En as jy nog nooit in 'n gebruikersnaam kies Facebook, sal jy sien jou unieke ID. 702 00:30:19,781 --> 00:30:23,080 Ek dink dit is profiel dot PHP vraagteken ID gelyk iets. 703 00:30:23,080 --> 00:30:27,210 Dit is nou iets soos 'n groot INT, of 'n lang lang as jy wil, 704 00:30:27,210 --> 00:30:29,700 wat is 'n 64-bit waarde of iets vergelykbaar. 705 00:30:29,700 --> 00:30:33,620 >> So, selfs in die werklike wêreld hierdie dinge te doen kwessies uiteindelik soms saak. 706 00:30:33,620 --> 00:30:37,600 En dit blyk hier, as ek gee al my gebruikers 'n unieke ID, 707 00:30:37,600 --> 00:30:41,750 Ek wil super eksplisiete wees en minimaal maak hierdie veld uniek. 708 00:30:41,750 --> 00:30:44,750 Maar dit blyk daar is een stuk naam vandag te 709 00:30:44,750 --> 00:30:46,470 dit is 'n primêre sleutel. 710 00:30:46,470 --> 00:30:49,800 As jy 'n databasis is ontwerp tafel en jy vooraf weet 711 00:30:49,800 --> 00:30:55,580 dat een van die kolomme in die tabel moet en sal uniek rye identifiseer 712 00:30:55,580 --> 00:30:58,500 in die tabel, wat jy wil spesifiseer dit en vertel die databasis, 713 00:30:58,500 --> 00:31:00,250 dit is my primêre sleutel. 714 00:31:00,250 --> 00:31:02,110 Daar is dalk duplikate in ander velde, 715 00:31:02,110 --> 00:31:06,330 maar ek sê die databasis wat hierdie is my primêre, my belangrikste veld 716 00:31:06,330 --> 00:31:08,420 dit is gewaarborg om uniek te wees. 717 00:31:08,420 --> 00:31:09,660 >> Nou, dit lyk oorbodig. 718 00:31:09,660 --> 00:31:13,830 Ek is nou voor dat ons voeg deur te kliek Save hier 719 00:31:13,830 --> 00:31:17,210 'n veld called-- en ek gaan om voort te gaan en klik AI, 720 00:31:17,210 --> 00:31:19,720 ons sal terug te kom wat in 'n oomblik, Slaan. 721 00:31:19,720 --> 00:31:22,540 Ek is nou dat die voorstel my tafel lyk. 722 00:31:22,540 --> 00:31:26,305 Ek het 'n INT veld genaamd ID, 'n CHAR veld genaamd Gebruikersnaam, 723 00:31:26,305 --> 00:31:31,100 'n VARCHAR veld genaamd Naam nie, maar ID, As dit is primêre en dus uniek, 724 00:31:31,100 --> 00:31:33,760 hoekom het ek net mors tyd wat die bekendstelling van 725 00:31:33,760 --> 00:31:39,140 effektief is 'n tweede unieke veld genaamd ID dit is 'n INT? 726 00:31:39,140 --> 00:31:41,980 >> Gebruikersnaam, onthou, was reeds unieke, het ons gesê. 727 00:31:41,980 --> 00:31:45,350 Dus net logies, het jy nie nodig 'n databasis ervaring rede 728 00:31:45,350 --> 00:31:47,570 deur middel van hierdie, waarom kan ek bekendgestel 729 00:31:47,570 --> 00:31:50,065 'n INT as my unieke identifiseerder sowel? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Wat this-- weer sê? 732 00:31:53,930 --> 00:31:55,580 >> GEHOOR: [onhoorbaar] 733 00:31:55,580 --> 00:31:59,534 >> David Malan: Random toegang is makliker, hoekom? 734 00:31:59,534 --> 00:32:00,410 >> GEHOOR: [onhoorbaar] 735 00:32:00,410 --> 00:32:02,367 David Malan: Ja, dit is net toegang nommers. 736 00:32:02,367 --> 00:32:04,750 So, as jy dink van hierdie waarlik is 'n tabel, soos 'n skikking, 737 00:32:04,750 --> 00:32:07,690 nou het ek unieke identifiseerders dat ek kan spring rond. 738 00:32:07,690 --> 00:32:11,520 En beter as wat nog is dat Hoe groot is 'n INT weer gaan wees? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 stukkies of vier grepe. 741 00:32:15,800 --> 00:32:17,750 >> Hoe groot is my gebruikersnaam gaan wees? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maksimaal? 744 00:32:21,990 --> 00:32:22,880 16 grepe. 745 00:32:22,880 --> 00:32:26,080 >> So, as jy regtig omgee oor die prestasie van jou kode, 746 00:32:26,080 --> 00:32:31,390 dink terug aan PSet5, sou jy verkies om te soek na 'n vier byte waarde of 'n 16 747 00:32:31,390 --> 00:32:32,240 byte waarde, reg? 748 00:32:32,240 --> 00:32:33,810 Dit is regtig so eenvoudig soos dit. 749 00:32:33,810 --> 00:32:38,060 Jy moet vier keer soveel werk te doen om te soek vir gebruikers omdat diegene 750 00:32:38,060 --> 00:32:38,830 16 grepe. 751 00:32:38,830 --> 00:32:41,320 So, jy moet letterlik vergelyk al 16 grepe wees 752 00:32:41,320 --> 00:32:43,140 seker ja, dit is gebruikersnaam wat ek wil. 753 00:32:43,140 --> 00:32:46,610 Whereas vir 'n INT, jy kan doen dit met net vier grepe. 754 00:32:46,610 --> 00:32:49,212 >> En as 'n eenkant vir diegene belangstel in die rekenaar hardeware, 755 00:32:49,212 --> 00:32:52,420 dit blyk jy kan iets soos pas 'n INT of 'n 32-bit waarde in iets 756 00:32:52,420 --> 00:32:55,330 bekend as 'n register in 'n rekenaar CPU, wat beteken dit is super, 757 00:32:55,330 --> 00:32:58,400 super vinnig, selfs op die laagste vlak van hardeware van die rekenaar. 758 00:32:58,400 --> 00:33:00,530 So, daar is net voordele rondom. 759 00:33:00,530 --> 00:33:01,530 So, wat beteken dit? 760 00:33:01,530 --> 00:33:04,850 In werklikheid, as jy die ontwerp van ' databasis tabel, byna almal van die tyd 761 00:33:04,850 --> 00:33:07,170 gaan jy nie slegs die data wat jy omgee, 762 00:33:07,170 --> 00:33:09,280 maar ook iets soos 'n unieke identifiseerder 763 00:33:09,280 --> 00:33:11,280 want dit gaan laat ons doen ander dinge. 764 00:33:11,280 --> 00:33:13,160 En laat ons reis oor 'n probleem hier. 765 00:33:13,160 --> 00:33:15,990 >> Veronderstel dat gebruikers nie net name en name, 766 00:33:15,990 --> 00:33:19,540 maar hulle het ook dinge soos stede en state en zip codes, ten minste 767 00:33:19,540 --> 00:33:20,432 hier in die VSA. 768 00:33:20,432 --> 00:33:22,390 So, ek gaan om voort te gaan en net vinnig sê, 769 00:33:22,390 --> 00:33:26,180 gee my drie kolomme aan die einde van die tafel. 770 00:33:26,180 --> 00:33:28,900 En dit gaan wees City, dit gaan Staat, 771 00:33:28,900 --> 00:33:30,400 en dit gaan Zip wees. 772 00:33:30,400 --> 00:33:32,710 >> Nou tipes City, wat data moet dit wees, miskien? 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 Ek weet nie wat die langste naam van die stad is. 776 00:33:37,780 --> 00:33:40,571 Iewers in Amerika, is daar waarskynlik 'n paar belaglik lang woord, 777 00:33:40,571 --> 00:33:43,605 so laat ons net saam met 255, ietwat histories of arbitrêr. 778 00:33:43,605 --> 00:33:44,730 Staat, wat jy wil om dit te doen? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Oordeel oproep, reg? 781 00:33:50,367 --> 00:33:51,700 Wat is miskien die mees doeltreffende? 782 00:33:51,700 --> 00:33:53,500 Hoeveel karakters? 783 00:33:53,500 --> 00:33:55,950 Miskien net twee, as ons kan wegkom met net doen, 784 00:33:55,950 --> 00:33:58,250 soos, MA vir Massachusetts en so meer. 785 00:33:58,250 --> 00:34:00,520 So, ek gaan 'n CHAR waarde van twee gaan. 786 00:34:00,520 --> 00:34:03,080 >> Poskode is 'n interessante een. 787 00:34:03,080 --> 00:34:06,679 Ons is hier in 02.138, sodat stel voor ons wat moet gebruik? 788 00:34:06,679 --> 00:34:07,470 Dit is 'n INT, reg? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 INT, INT, kort? 791 00:34:12,800 --> 00:34:14,521 Kort sal werk. 792 00:34:14,521 --> 00:34:15,020 Geen? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 CHAR of vyf, maar ek wil 'n INT. 795 00:34:20,870 --> 00:34:23,710 Hoekom terug te stoot op 'n INT? 796 00:34:23,710 --> 00:34:26,820 Oorreed my uit hierdie. 797 00:34:26,820 --> 00:34:29,210 Wat is stupid oor 'n INT, my idee? 798 00:34:29,210 --> 00:34:29,871 Ja. 799 00:34:29,871 --> 00:34:31,199 >> GEHOOR: Neem meer geheue. 800 00:34:31,199 --> 00:34:32,909 >> David Malan: Neem meer geheue. 801 00:34:32,909 --> 00:34:35,310 Vier grepe, maar jy is stel 'n kode 802 00:34:35,310 --> 00:34:39,000 as vyf grepe of iemand was as 'n CHAR, wat voel soos eh, dit is nie regtig 803 00:34:39,000 --> 00:34:39,620 die geval. 804 00:34:39,620 --> 00:34:40,489 >> Wel, pret storie. 805 00:34:40,489 --> 00:34:43,179 Jare gelede, toe ek gebruik om te gebruik Microsoft Outlook vir my e-pos, 806 00:34:43,179 --> 00:34:45,150 Ek wou uiteindelik oor te skakel na Gmail. 807 00:34:45,150 --> 00:34:48,949 En so, uitgevoer ek al my kontakte van Outlook as 'n CSV-lêer. 808 00:34:48,949 --> 00:34:50,699 Kommas geskei waardes, wat net bedoel ek 809 00:34:50,699 --> 00:34:54,060 het al my vriende name en laaste name en telefoonnommers en zip kodes 810 00:34:54,060 --> 00:34:54,747 en almal van daardie. 811 00:34:54,747 --> 00:34:56,580 En dan het ek die fout van die opening van dit 812 00:34:56,580 --> 00:34:58,640 in Excel, wat 'n spreadsheet program wat 813 00:34:58,640 --> 00:35:00,289 verstaan ​​CSV lêers soos ons gesien het. 814 00:35:00,289 --> 00:35:03,080 Maar dan moet ek getref het, soos, Opdrag of Control S op 'n punt. 815 00:35:03,080 --> 00:35:06,250 En Excel blykbaar by die tyd het 'n funksie waardeur enige tyd dit 816 00:35:06,250 --> 00:35:08,100 het 'n nommer, dit probeer om behulpsaam te wees. 817 00:35:08,100 --> 00:35:11,610 En as dat die getal begin met nulle, sou dit net ontslae te raak van hulle. 818 00:35:11,610 --> 00:35:13,420 Hoekom het jy nodig voorste nulle op heelgetalle? 819 00:35:13,420 --> 00:35:15,140 Hulle is betekenisloos, wiskundig. 820 00:35:15,140 --> 00:35:17,530 Hulle is nie betekenisloos in die US Postal-stelsel. 821 00:35:17,530 --> 00:35:19,954 So, het ek het vir die jaar, tot vandag toe, nog steeds ek 822 00:35:19,954 --> 00:35:22,370 het vriende dat wanneer die seldsame geval dat ek iemand nodig is 823 00:35:22,370 --> 00:35:24,078 spreek hierdie dae, Ek sal nog steeds sien dat ek 824 00:35:24,078 --> 00:35:26,767 het 'n vriend in Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 En dit is irriterende as jy probeer om programmaties soort 826 00:35:29,350 --> 00:35:30,975 genereer koeverte of net jota dit neer. 827 00:35:30,975 --> 00:35:33,599 En dit is as gevolg van hierdie rede, Ek het die verkeerde tipe data. 828 00:35:33,599 --> 00:35:34,490 So, ek is lief vir jou idee. 829 00:35:34,490 --> 00:35:35,650 Kom ons gebruik 'n CHAR veld. 830 00:35:35,650 --> 00:35:38,340 Vyf karakters, behalwe daar is 'n hoek geval. 831 00:35:38,340 --> 00:35:42,220 As jy nog steeds e-pos stuur, soms rits kodes deesdae 832 00:35:42,220 --> 00:35:45,360 hulle is, soos, plus vier. 833 00:35:45,360 --> 00:35:48,200 So, 'n koppelteken en dan moet ons ons moet vier getalle. 834 00:35:48,200 --> 00:35:50,330 So om eerlik te wees, dit kan gaan baie verskillende maniere. 835 00:35:50,330 --> 00:35:52,371 >> Vir nou, ek gaan hou dit eenvoudig en ek is net 836 00:35:52,371 --> 00:35:54,780 gaan om te sê dat dit 'n vyf CHAR waarde en ons is 837 00:35:54,780 --> 00:35:56,739 gaan die hele dash plus vier slaan. 838 00:35:56,739 --> 00:35:58,280 Maar dit is die aard van die werkinge. 839 00:35:58,280 --> 00:36:00,196 En jy kan dink van die dieselfde probleme wat voortspruit 840 00:36:00,196 --> 00:36:01,860 met telefoonnommers of ander velde. 841 00:36:01,860 --> 00:36:04,350 >> En nou, dit is eintlik 'n dwase pad om te gaan. 842 00:36:04,350 --> 00:36:08,000 Veronderstel beide Rob en ek en Hannah en Maria en [? Davon?] En Andy 843 00:36:08,000 --> 00:36:12,820 en die ander op die personeel almal leef in Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Dit voel eintlik stupid dat ek toe te voeg tot my gebruikers tafel, stad, staat, 845 00:36:17,970 --> 00:36:18,630 en rits. 846 00:36:18,630 --> 00:36:20,980 Hoekom? 847 00:36:20,980 --> 00:36:21,960 >> GEHOOR: [onhoorbaar] 848 00:36:21,960 --> 00:36:22,918 >> David Malan: Weer sê? 849 00:36:22,918 --> 00:36:24,310 GEHOOR: [onhoorbaar] 850 00:36:24,310 --> 00:36:25,850 >> David Malan: Hulle is altyd gaan om saam te gaan, reg? 851 00:36:25,850 --> 00:36:28,660 Wanneer dit blyk, het ons gebruik om te dink dit die geval was, totdat ons uitvoerig 852 00:36:28,660 --> 00:36:30,570 deursoek die hele VSA, en daar blyk dat 853 00:36:30,570 --> 00:36:32,653 is 'n paar teenstrydighede waar verskeie dorpe het 854 00:36:32,653 --> 00:36:35,060 dieselfde zip, wat is vreemd. 855 00:36:35,060 --> 00:36:40,580 Maar, as ons stipuleer vir nou dat 02.138 is altyd Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 hoekom in die wêreld sou jy slaan in jou databasis Cambridge en MA en 02.138 857 00:36:44,910 --> 00:36:49,357 vir my en vir Hannah en Rob en vir [? Davon?] En vir ander wat leef 858 00:36:49,357 --> 00:36:51,190 hier in Cambridge, dit is perfek oorbodig. 859 00:36:51,190 --> 00:36:54,480 >> Ons moet wegkom met net die stoor wat? 860 00:36:54,480 --> 00:36:55,610 Net die kode. 861 00:36:55,610 --> 00:36:58,660 Maar dan, as ons net die stoor kode, wil ek, waarskynlik, 862 00:36:58,660 --> 00:37:02,160 vir my website om te weet waar 02.138 is. 863 00:37:02,160 --> 00:37:03,910 So, ek moet 'n ander tafel. 864 00:37:03,910 --> 00:37:04,697 En dit is OK. 865 00:37:04,697 --> 00:37:07,530 En in die feit, dit is een van die ontwerp prosesse van die ontwerp van tabelle 866 00:37:07,530 --> 00:37:11,472 dat jy sal doen in PSet7 sowel waardeur jy wil om faktor gemeenskaplike data. 867 00:37:11,472 --> 00:37:14,430 Net soos ons het is factoring uit algemene kode en factoring gemeenskaplike 868 00:37:14,430 --> 00:37:17,380 style uit CSS, hier Ook in die databasis, 869 00:37:17,380 --> 00:37:21,180 as ek moet net 02138 om uniek identifiseer iemand se tuisdorp, 870 00:37:21,180 --> 00:37:25,020 nie stoor Cambridge, Mass vir elke darn gebruiker in jou tafel. 871 00:37:25,020 --> 00:37:29,770 >> In plaas daarvan, het 'n afsonderlike tabel genoem Poskodes wat behoort te hê wat kolomme? 872 00:37:29,770 --> 00:37:33,490 Waarskynlik 'n ID-veld, net omdat, die beginsels wat ons praat nou. 873 00:37:33,490 --> 00:37:35,720 Waarskynlik 'n rits veld 02138. 874 00:37:35,720 --> 00:37:38,400 En dan waarskynlik wat ander kolomme? 875 00:37:38,400 --> 00:37:42,950 Stad en die staat nie, maar net een ry vir 02.138, een ry vir 02.139, 876 00:37:42,950 --> 00:37:44,772 een ry vir 90.210. 877 00:37:44,772 --> 00:37:46,730 En dit is letterlik al die zip codes wat ek ken. 878 00:37:46,730 --> 00:37:49,012 >> So nou, wat kan jy doen? 879 00:37:49,012 --> 00:37:51,220 Dit is problematies, want nou Ek het twee tafels. 880 00:37:51,220 --> 00:37:54,660 So, my gebruikers is meestal hier, maar hul stad staat se inligting 881 00:37:54,660 --> 00:37:55,390 hier. 882 00:37:55,390 --> 00:37:58,635 So, dit blyk met SQL, daar is eintlik 'n manier om inligting aan te sluit, 883 00:37:58,635 --> 00:38:00,470 en jy sal sien dit in die PSet. 884 00:38:00,470 --> 00:38:03,000 >> Maar dit blyk jy kan iets soos dit te doen. 885 00:38:03,000 --> 00:38:10,501 SELECT ster van die gebruikers, sluit aan by Poskodes OP gebruikers dot zip gelyk Poskodes dot ritssluiter. 886 00:38:10,501 --> 00:38:13,360 Wat is 'n bietjie langdradig, weliswaar, maar dit net 887 00:38:13,360 --> 00:38:17,590 beteken kies alles uit die proses van die neem van my gebruikers tafel 888 00:38:17,590 --> 00:38:19,580 en my Poskodes tafel. 889 00:38:19,580 --> 00:38:22,120 Saam met hulle op die een gebied hulle in kolom. 890 00:38:22,120 --> 00:38:24,780 So, letterlik om iets te doen soos hierdie, en gee my terug 891 00:38:24,780 --> 00:38:27,360 'n nuwe tydelike tafel dit is wyer, dit is groter, 892 00:38:27,360 --> 00:38:29,450 wat al die kolomme van beide van hulle. 893 00:38:29,450 --> 00:38:33,510 En dat, heel eenvoudig, sou wees om die sintaksis vir iets soos dit te doen. 894 00:38:33,510 --> 00:38:35,540 >> So, daar is dié wat voorlê, maar daar gaan 895 00:38:35,540 --> 00:38:38,950 om ander ontwerp besluite wees wat jy sal het om te maak, nie net met indekse 896 00:38:38,950 --> 00:38:40,550 maar ook hardloop in uitdagings. 897 00:38:40,550 --> 00:38:43,360 Trouens, daar is 'n uitdaging in 'n databasis ontwerp 898 00:38:43,360 --> 00:38:47,930 waardeur soms twee mense dalk wil om toegang tot die dieselfde rye van die databasis 899 00:38:47,930 --> 00:38:48,530 tafel. 900 00:38:48,530 --> 00:38:51,450 So, dit is iets wat ons sal teëkom in PSet7 as well. 901 00:38:51,450 --> 00:38:54,686 >> Maar ek het gedink ek wil kyk na een aanval wat moontlik in SQL. 902 00:38:54,686 --> 00:38:56,560 Wat is 'n paar van die probleme wat kan ontstaan? 903 00:38:56,560 --> 00:38:58,170 So, sal jy dit teëkom in PSet7. 904 00:38:58,170 --> 00:39:01,874 En ons vertel wat die volstrekte kodering oplossing vir hierdie probleem is. 905 00:39:01,874 --> 00:39:04,790 Maar as jy 'n hoër vlak te neem klas, veral in bedryfstelsels, 906 00:39:04,790 --> 00:39:06,950 jy gaan teëkom 'n kwessie van atomiciteit, 907 00:39:06,950 --> 00:39:10,080 die probleem van probeer om te doen verskeie dinge op een slag 908 00:39:10,080 --> 00:39:11,000 sonder onderbreking. 909 00:39:11,000 --> 00:39:14,560 >> En ek het gedink ek wil hierdie stel idee vir PSet7 met 'n metafoor 910 00:39:14,560 --> 00:39:18,160 wat ek geleer myself in Margo Seltzer se CS164 bedryfstelsels 911 00:39:18,160 --> 00:39:18,990 klas jaar gelede. 912 00:39:18,990 --> 00:39:22,230 Veronderstel dat jy een van hierdie dorm yskaste in jou koshuiskamer of huis, 913 00:39:22,230 --> 00:39:24,474 en jy het 'n ware gevoel vir melk. 914 00:39:24,474 --> 00:39:27,140 En so, jy by die huis kom van klasse een dag, jy die yskas oopmaak. 915 00:39:27,140 --> 00:39:27,620 O, damn dit. 916 00:39:27,620 --> 00:39:28,870 Daar is geen melk in die yskas. 917 00:39:28,870 --> 00:39:32,470 So, jy die yskas sluit, sluit die deur, sluit jou dorm, 918 00:39:32,470 --> 00:39:34,770 loop om die draai om CVS, kry in die lyn, 919 00:39:34,770 --> 00:39:36,312 en begin uitcheck vir 'n paar melk. 920 00:39:36,312 --> 00:39:38,978 En dit gaan 'n rukkie neem, omdat diegene damn self afhandeling 921 00:39:38,978 --> 00:39:40,570 tellers te neem vir ewig om in elk geval te gebruik. 922 00:39:40,570 --> 00:39:41,950 So intussen, jou kamermaat by die huis kom. 923 00:39:41,950 --> 00:39:43,470 Hy of sy hou regtig melk as well. 924 00:39:43,470 --> 00:39:45,520 Hulle kom in die koshuiskamer, maak die yskas, o, darn dit. 925 00:39:45,520 --> 00:39:46,490 Daar is geen melk meer. 926 00:39:46,490 --> 00:39:49,040 >> So, hy of sy ook gaan om die draai. 927 00:39:49,040 --> 00:39:51,670 Maar nou, omdat daar is soos twee of drie of vier CVSes buurt, 928 00:39:51,670 --> 00:39:53,800 dit gebeur om te gaan na een van die verskillende kinders in die vierkant. 929 00:39:53,800 --> 00:39:55,830 En so nou, 'n paar minute later, albei van julle 930 00:39:55,830 --> 00:39:58,060 huis kom en ugh, ergste probleem ooit. 931 00:39:58,060 --> 00:40:00,967 Nou het jy te veel melk want dit gaan suur gaan. 932 00:40:00,967 --> 00:40:03,050 En jy wil melk, maar jy hou nie regtig melk. 933 00:40:03,050 --> 00:40:06,730 >> So nou, dit was 'n duur fout, want beide van julle 934 00:40:06,730 --> 00:40:09,870 'n besluit geneem gebaseer op die toestand van sommige veranderlike wat 935 00:40:09,870 --> 00:40:12,660 was in die proses van verander word deur jou, 936 00:40:12,660 --> 00:40:14,560 die inisieerder van plan om melk te kry. 937 00:40:14,560 --> 00:40:17,785 So, wat is dalk 'n menslike oplossing vir die probleem? 938 00:40:17,785 --> 00:40:18,660 GEHOOR: [onhoorbaar] 939 00:40:18,660 --> 00:40:19,430 David Malan: Laat 'n aantekening, reg? 940 00:40:19,430 --> 00:40:21,850 Altyd laat 'n nota, as jy vertroud is met die show. 941 00:40:21,850 --> 00:40:23,100 Ja, daar is twee van ons. 942 00:40:23,100 --> 00:40:25,940 So, altyd 'n nota verlaat, of letterlik sluit die yskas 943 00:40:25,940 --> 00:40:28,602 met 'n soort van slot of iets oor die top soos dit. 944 00:40:28,602 --> 00:40:31,310 Maar dit is eintlik gaan wees sleutel probleem met databasis ontwerp, 945 00:40:31,310 --> 00:40:34,710 veral as jy dalk verskeie implementeer, verskeie skootrekenaars, 946 00:40:34,710 --> 00:40:37,450 verskeie gebruikers al probeer om update inligting op 'n keer. 947 00:40:37,450 --> 00:40:40,590 Veral sensitiewe inligting soos finansiële inligting, 948 00:40:40,590 --> 00:40:43,350 waardeur 'n-beurs webwerf soos jy sal gebou word, 949 00:40:43,350 --> 00:40:47,270 wat as jy wil om te kyk hoeveel geld jy het en dan as jy genoeg het, 950 00:40:47,270 --> 00:40:48,490 koop 'n paar voorraad? 951 00:40:48,490 --> 00:40:50,899 >> Maar wat as iemand anders wat het 'n gesamentlike rekening met jou 952 00:40:50,899 --> 00:40:52,690 is terselfdertyd probeer sommige voorraad te koop? 953 00:40:52,690 --> 00:40:55,190 So, hy of sy beheer van die rekening balans, beide van julle 954 00:40:55,190 --> 00:40:57,540 terug te kry dieselfde antwoord, daar is geen melk. 955 00:40:57,540 --> 00:41:00,580 Of albei van julle terug te kry die antwoord, jy het $ 100 in die rekening. 956 00:41:00,580 --> 00:41:04,680 Beide van julle probeer om die besluit te neem een deel van 'n maatskappy voorraad te koop. 957 00:41:04,680 --> 00:41:06,130 >> En nou, wat gebeur? 958 00:41:06,130 --> 00:41:07,140 Jy het twee aandele? 959 00:41:07,140 --> 00:41:08,420 Jy het geen aandele? 960 00:41:08,420 --> 00:41:10,320 Probleme soos wat kan ontstaan. 961 00:41:10,320 --> 00:41:11,755 So, sal ons teëkom nie. 962 00:41:11,755 --> 00:41:14,630 SQL-inspuiting aanvalle, gelukkig, is iets wat ons sal jou help met, 963 00:41:14,630 --> 00:41:17,430 maar hierdie is afgrijselijk algemeen deesdae steeds. 964 00:41:17,430 --> 00:41:18,680 So, dit is net 'n voorbeeld. 965 00:41:18,680 --> 00:41:21,290 Ek maak geen eise wat Harvard PIN stelsel is 966 00:41:21,290 --> 00:41:23,130 kwesbaar vir hierdie spesifieke aanval. 967 00:41:23,130 --> 00:41:24,160 Ons het probeer. 968 00:41:24,160 --> 00:41:26,120 Maar, jy weet dat ons 'n veld soos hierdie. 969 00:41:26,120 --> 00:41:29,620 En Yale se Net ID het 'n soortgelyke soek screen hierdie dae. 970 00:41:29,620 --> 00:41:33,190 En dit blyk, dat ons dalk die PIN stelsel geïmplementeer in PHP. 971 00:41:33,190 --> 00:41:37,050 >> En as dit were-- dis not-- hulle dalk kode wat lyk soos hierdie te hê. 972 00:41:37,050 --> 00:41:38,210 Hulle het twee veranderlikes. 973 00:41:38,210 --> 00:41:42,495 Gee my die gebruikersnaam en wagwoord uit die post super globale veranderlike 974 00:41:42,495 --> 00:41:43,970 dat ons gepraat oor vroeër. 975 00:41:43,970 --> 00:41:47,310 Miskien Harvard het 'n navraag soos SELECT ster van die gebruikers 976 00:41:47,310 --> 00:41:50,005 waar gebruikersnaam gelyk dat wagwoord gelyk nie. 977 00:41:50,005 --> 00:41:51,880 En sien dat ek net steek dit in die gebruik van 978 00:41:51,880 --> 00:41:55,050 die krullerige brace notasie van die ander dag, wat net beteken prop in 'n waarde 979 00:41:55,050 --> 00:41:55,550 hier. 980 00:41:55,550 --> 00:41:57,449 Ek is nie die gebruik van die vraagteken tegniek. 981 00:41:57,449 --> 00:41:59,240 Ek het nie die tweede of derde argumente. 982 00:41:59,240 --> 00:42:02,350 Ek is net letterlik bou die string myself. 983 00:42:02,350 --> 00:42:04,930 >> Die probleem is egter dat As iemand soos 'n scroob, 984 00:42:04,930 --> 00:42:09,020 wat is 'n verwysing na 'n film, inteken met iets soos hierdie, 985 00:42:09,020 --> 00:42:11,250 en ek het die punte verwyder wat gewoonlik bedek 986 00:42:11,250 --> 00:42:14,370 wagwoorde, wat as hy veral kwaadwillige 987 00:42:14,370 --> 00:42:18,860 en sy wagwoord dalk is 12.345, per die film genaamd "Space Balls," 988 00:42:18,860 --> 00:42:21,970 maar hy krities tipes n enkele aanhaling na die vyf, 989 00:42:21,970 --> 00:42:24,790 dan letterlik die woord of in die ruimte, en dan quote, 990 00:42:24,790 --> 00:42:29,160 unquote een gelyk quote een Maar let hy weggelaat wat? 991 00:42:29,160 --> 00:42:32,700 Hy is weggelaat die kwotasie op die regte en hy is weggelaat die kwotasie aan die linkerkant. 992 00:42:32,700 --> 00:42:35,170 >> Want as hierdie aanvaller scroob se vermoede 993 00:42:35,170 --> 00:42:38,160 is dat die mense wat geskryf het hierdie PHP-kode was nie so helder, 994 00:42:38,160 --> 00:42:42,990 Miskien het hulle net 'n paar enkele haal om die interpolasie 995 00:42:42,990 --> 00:42:45,210 van 'n veranderlike in krulhakies? 996 00:42:45,210 --> 00:42:48,620 En so miskien het, kon hy die soort van hul denke te voltooi 997 00:42:48,620 --> 00:42:53,290 vir hulle, maar op 'n manier wat gaan om hom te laat gekap in die PIN-stelsel. 998 00:42:53,290 --> 00:42:55,310 Met ander woorde, veronderstel dat dit die kode 999 00:42:55,310 --> 00:42:57,140 en ons het nou prop in wat scroob getik. 1000 00:42:57,140 --> 00:42:58,770 En dit is rooi, want dit is sleg. 1001 00:42:58,770 --> 00:43:01,310 >> En die onderliggende teks is wat hy getik in, 1002 00:43:01,310 --> 00:43:05,510 scroob kon bediener Harvard se mislei in die bou van 'n SQL navraag 1003 00:43:05,510 --> 00:43:07,440 string wat lyk soos hierdie. 1004 00:43:07,440 --> 00:43:11,760 Wagwoord gelyk 12345 of een is gelyk aan een. 1005 00:43:11,760 --> 00:43:14,820 Die gevolg van wat, logies, is dat hierdie scroob sal aanmeld 1006 00:43:14,820 --> 00:43:18,360 in as sy wagwoord is 12345 of as een gelykes 1007 00:43:18,360 --> 00:43:22,660 een, wat natuurlik altyd waar, wat beteken scroob kry altyd in. 1008 00:43:22,660 --> 00:43:26,060 >> En so het die manier om vas te stel dit, soos in 'n baie van die gevalle, 1009 00:43:26,060 --> 00:43:28,140 sou wees om meer defensief te skryf. 1010 00:43:28,140 --> 00:43:30,390 Om iets soos gebruik ons werklike navraag funksie, wat 1011 00:43:30,390 --> 00:43:33,980 jy sal sien in PSet7, waar ons prop in iets soos vraagtekens hier. 1012 00:43:33,980 --> 00:43:35,980 En die skoonheid van die navraag funksie wat ons 1013 00:43:35,980 --> 00:43:40,010 gee is dit verdedig teen hierdie sogenaamde SQL-inspuiting aanvalle, waar 1014 00:43:40,010 --> 00:43:44,260 iemand tricking jou kode in spuit sy of haar eie SQL-kode. 1015 00:43:44,260 --> 00:43:47,380 Want wat die navraag funksie ons gee jou sal eintlik doen, 1016 00:43:47,380 --> 00:43:51,270 as jy die vraagteken sintaksis gebruik en 'n tweede en 'n derde argument hier, 1017 00:43:51,270 --> 00:43:54,590 is wat het dit toe te voeg tot die insette wat die gebruiker verskaf? 1018 00:43:54,590 --> 00:43:56,060 Diegene backslash haal. 1019 00:43:56,060 --> 00:43:58,590 >> So, dit ontsnap enige potensieel gevaarlike karakters. 1020 00:43:58,590 --> 00:44:01,000 Dit lyk vreemd nou, maar dit is nie kwesbaar 1021 00:44:01,000 --> 00:44:03,260 omdat dit nie die logika nie verander 1022 00:44:03,260 --> 00:44:06,470 want dit geheel wagwoord nou 'n enkele aanhaling dit is nie, 1023 00:44:06,470 --> 00:44:07,596 in werklikheid, wagwoord scroob se. 1024 00:44:07,596 --> 00:44:09,845 So, daar is 'n paar grappies oor hierdie oor die jare. 1025 00:44:09,845 --> 00:44:12,570 So, dit was 'n foto geneem van sommige geek in 'n parkeerterrein 1026 00:44:12,570 --> 00:44:16,620 waardeur jy kan weet dat sommige stede en state probeer om jou lisensie te scan 1027 00:44:16,620 --> 00:44:19,460 plaat aan u of kaartjie wetsontwerp jy as jy deur gaan sonder, soos, 1028 00:44:19,460 --> 00:44:20,660 Die e-Z Pass ding. 1029 00:44:20,660 --> 00:44:24,490 So, hierdie persoon vermoed dat miskien die mense die skryf van die E-Z Pass stelsel 1030 00:44:24,490 --> 00:44:28,240 was nie so helder, en miskien is hulle net saam saamgevoeg n string, 1031 00:44:28,240 --> 00:44:32,190 sodat hy of sy kan nie kwaadwillig nie net hul gedagtes te voltooi, 1032 00:44:32,190 --> 00:44:35,150 maar eintlik 'n slegte opdrag uit te voer, wat ons nog nie genoem het, 1033 00:44:35,150 --> 00:44:36,380 maar jy kan seker raai. 1034 00:44:36,380 --> 00:44:39,820 Dat bykomend tot verwyder en voeg en werk en kies, 1035 00:44:39,820 --> 00:44:43,370 daar is ook 'n navraag genoem drop, wat letterlik verwyder alles 1036 00:44:43,370 --> 00:44:45,300 in die databasis, wat is veral sleg. 1037 00:44:45,300 --> 00:44:48,760 >> Ons kan zoom in op hierdie of dit is 'n bietjie moeilik om te sien. 1038 00:44:48,760 --> 00:44:52,300 Dit, nou, is 'n bekende strokiesprent dit is wonderlik slim nou 1039 00:44:52,300 --> 00:44:53,145 en verstaanbaar. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Gelag] 1042 00:45:04,750 --> 00:45:05,910 >> Ja, cool. 1043 00:45:05,910 --> 00:45:06,800 Soort geeking uit. 1044 00:45:06,800 --> 00:45:08,800 So het hierdie, dan, is SQL-inspuiting aanvalle. 1045 00:45:08,800 --> 00:45:13,050 En hulle is so maklik om te vermy deur die gebruik van die regte kode of die reg biblioteke. 1046 00:45:13,050 --> 00:45:15,947 En jy sal sien in PSet7, dit is Daarom gee ons jou die navraag funksie. 1047 00:45:15,947 --> 00:45:17,780 So, 'n paar van die teasers dat ons gedink ons ​​wil 1048 00:45:17,780 --> 00:45:19,930 gee jou hier in ons oorblywende minute saam. 1049 00:45:19,930 --> 00:45:24,030 So, as jy onthou van week nul, ons bekendgestel hierdie twee gloeilampe wat 1050 00:45:24,030 --> 00:45:26,610 is mooi, nie net omdat hulle is redelik en is kleurvol, 1051 00:45:26,610 --> 00:45:29,450 maar omdat hulle iets te ondersteun genoem 'n API, 'n Aansoek 1052 00:45:29,450 --> 00:45:31,980 Programming Interface En in CS50 dusver, het ons 1053 00:45:31,980 --> 00:45:34,440 meestal gefokus op AOO en POST, maar dit blyk 1054 00:45:34,440 --> 00:45:37,390 daar is ander HTTP werkwoorde soos PUT. 1055 00:45:37,390 --> 00:45:39,430 >> En in die feit, dit was 'n skyfie van week nul 1056 00:45:39,430 --> 00:45:44,930 waardeur as jy skryf kode wat stuur a la PSet6 n HTTP-versoek dat 1057 00:45:44,930 --> 00:45:49,647 lyk met hierdie stuk van die teks aan die onderkant, wat genoem word into 1058 00:45:49,647 --> 00:45:52,230 of JavaScript Object Notasie dat ons sal praat oor die volgende week, 1059 00:45:52,230 --> 00:45:57,030 jy kan draai op of af of verandering die kleur van die ligte soos dié. 1060 00:45:57,030 --> 00:46:00,480 So as CS50 het ook bykomend tot 'n van daardie gloeilampe hier in New Haven 1061 00:46:00,480 --> 00:46:02,480 As jy wil om te leen hulle vir die finale projekte, 1062 00:46:02,480 --> 00:46:04,370 ook 'n paar Microsoft Bands, wat soos 1063 00:46:04,370 --> 00:46:07,619 horlosies wat jy dra om jou pols wat insgelyks 'n API sodat jy 1064 00:46:07,619 --> 00:46:10,040 kan jou eie sagteware te skryf vir hulle. 1065 00:46:10,040 --> 00:46:12,490 >> Ons het 'n rekening by Apple se iOS-kode so 1066 00:46:12,490 --> 00:46:15,510 dat as jy 'n Apple Watch of 'n iPhone of 'n iPad of 'n iPod, 1067 00:46:15,510 --> 00:46:17,707 kan jy die kode te skryf wat eintlik loop op hulle. 1068 00:46:17,707 --> 00:46:19,540 Ons het 'n hele klomp van Arduinos, wat 1069 00:46:19,540 --> 00:46:22,010 klein bietjie rekenaars sonder gevalle wese, 1070 00:46:22,010 --> 00:46:25,240 wat jy kan koppel via USB, tipies om jou eie Mac of PC, 1071 00:46:25,240 --> 00:46:28,810 skryf kode wat op hierdie fisiese loop toestelle wat dikwels sensors op hulle 1072 00:46:28,810 --> 00:46:30,790 sodat jy kan kommunikeer met die werklike wêreld. 1073 00:46:30,790 --> 00:46:32,860 Ons het 'n hele klomp van Leap Motion toestelle, 1074 00:46:32,860 --> 00:46:36,500 wat USB toestelle vir Macs is en Rekenaars, hier en weer in New Haven. 1075 00:46:36,500 --> 00:46:40,080 En as jy dit te koppel aan jou Mac, jy kan eintlik jou rekenaar te beheer 1076 00:46:40,080 --> 00:46:42,550 deur te skryf sagteware wat via infrarooi strale, 1077 00:46:42,550 --> 00:46:46,360 figure uit waar jou menslike hande is, selfs sonder om te raak van jou sleutelbord. 1078 00:46:46,360 --> 00:46:49,135 Ons het gedink ons ​​wil deel 'n vinnige blik op hierdie, byvoorbeeld. 1079 00:46:49,135 --> 00:46:51,428 >> [Speel van musiek] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 So, ons het 'n hele n klomp van hierdie dinge, 1082 00:47:57,590 --> 00:48:01,040 Ook genoem Myo armbandjies wat jy oor jou voorarm 1083 00:48:01,040 --> 00:48:04,595 en dan kan jy beheer oor die werklike wêreld of die virtuele wêreld soos hierdie. 1084 00:48:04,595 --> 00:48:06,471 >> [Speel van musiek] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 Of, het ons ook 'n paar Google Karton, wat is letterlik, soos, 1087 00:49:20,920 --> 00:49:24,841 'n kartondoos wat jy kan op sit jou gesig, maar skyfie in jou selfoon in dit 1088 00:49:24,841 --> 00:49:27,590 sodat jy die glas jou telefoon regtig naby aan jou oë. 1089 00:49:27,590 --> 00:49:30,190 En Google karton is baie goedkoop by $ 10 of $ 20. 1090 00:49:30,190 --> 00:49:32,230 En dit het min lense wat effens af verskuiwing 1091 00:49:32,230 --> 00:49:35,900 die beeld op die skerm vir jou menslike oë vir julle 'n gevoel van diepte te gee 1092 00:49:35,900 --> 00:49:39,550 sodat jy eintlik 'n 3D omgewing in die voorkant van jou. 1093 00:49:39,550 --> 00:49:42,927 Ons het ook 'n paar Samsung Gear, wat is die duurder weergawe van hierdie, 1094 00:49:42,927 --> 00:49:46,010 maar wat kan insgelyks gly in 'n Android-selfoon en gee jou die illusie 1095 00:49:46,010 --> 00:49:48,309 of-- of gee die ervaring van virtuele realiteit. 1096 00:49:48,309 --> 00:49:50,850 En in ons laaste twee minute, Ons het gedink ons ​​wil probeer om dit te doen. 1097 00:49:50,850 --> 00:49:55,250 As ek kan projekteer wat Colton het hier net jou eetlus aan te wakker, 1098 00:49:55,250 --> 00:49:58,442 laat my gaan voort en gooi op die groot skerm hier. 1099 00:49:58,442 --> 00:49:59,400 Laat my die ligte dood te maak. 1100 00:49:59,400 --> 00:50:02,290 Colton, wil jy om voort te gaan en sit op jou sel vir 'n oomblik 1101 00:50:02,290 --> 00:50:05,171 en kom op oor na die middel van die verhoog? 1102 00:50:05,171 --> 00:50:07,420 En wil jy project-- dit is wat Colton sien. 1103 00:50:07,420 --> 00:50:10,560 >> Nou, die Wi-Fi in hier is nie so sterk vir hierdie toestel 1104 00:50:10,560 --> 00:50:13,870 dat dit super dwingende, maar Colton is letterlik 1105 00:50:13,870 --> 00:50:15,710 in hierdie magiese futuristiese plek. 1106 00:50:15,710 --> 00:50:16,796 Hy sien net een beeld. 1107 00:50:16,796 --> 00:50:19,920 Jy sien sy linker en regter oog dat sy brein saam stiksel 1108 00:50:19,920 --> 00:50:22,260 in 'n drie-dimensionele omgewing op sy gesig. 1109 00:50:22,260 --> 00:50:24,319 Hy is net 'n opsie gekies hier. 1110 00:50:24,319 --> 00:50:27,360 En dit weer, hy dra hierdie headset met 'n Samsung selfoon op dit wat 1111 00:50:27,360 --> 00:50:29,080 draadloos projekteer om ons oorhoofse. 1112 00:50:29,080 --> 00:50:30,349 Nou is jy op Mars, dink ek? 1113 00:50:30,349 --> 00:50:31,140 COLTON: Ek dink nie so nie. 1114 00:50:31,140 --> 00:50:32,181 Ek is nie seker [onhoorbaar]. 1115 00:50:32,181 --> 00:50:34,250 [Gelag] 1116 00:50:34,250 --> 00:50:36,374 >> David Malan: Turns out Mars het hierdie spyskaarte. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [onhoorbaar] paar cool plekke as ons wil aan- gaan 1118 00:50:41,590 --> 00:50:43,330 >> David Malan: Waar wil ons heen? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [onhoorbaar] 1120 00:50:45,837 --> 00:50:48,170 David Malan: En laat ons sien waar Colton se nou besig ons. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [onhoorbaar] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> David Malan: So, daar is so baie verskillende plekke kan jy jouself. 1124 00:50:56,380 --> 00:51:00,590 Daar is FAPIs via wat jy kan skryf speletjies of interaksies wat 1125 00:51:00,590 --> 00:51:01,950 hardloop, uiteindelik, op die telefoon. 1126 00:51:01,950 --> 00:51:03,908 So, jy regtig net skryf van 'n selfoon app. 1127 00:51:03,908 --> 00:51:06,380 Maar te danke aan die sagteware en die grafiese vermoëns, 1128 00:51:06,380 --> 00:51:08,765 nou Colton is in hierdie klein huisie. 1129 00:51:08,765 --> 00:51:10,515 En by die risiko van onsself oorweldigend, 1130 00:51:10,515 --> 00:51:13,330 Colton en ek sal hou om vir terwyl aan die einde van die klas vandag hier 1131 00:51:13,330 --> 00:51:14,300 As jy wil om te kom en te speel. 1132 00:51:14,300 --> 00:51:16,350 En ons sal hulle bring terug volgende week as well. 1133 00:51:16,350 --> 00:51:18,420 Sonder verdere, omslag dit is dit vir vandag. 1134 00:51:18,420 --> 00:51:21,990 Ons sal sien dat jy volgende week. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIEK - ragga tweeling, "slegte MAN"] 1136 00:51:24,140 --> 00:55:23,146