[Prehrávanie hudby] DAVID Malan: Dobre, toto je CS50. To je koniec týždňa osem. A dnes, začneme vyplniť v niektorých kusoch pokiaľ ide o budovy veci na webe. Takže, pripomínajú, že v pondelok trávime oveľa viac času na PHP, ktorý je tento dynamický programovací jazyk, ktorý nám umožňuje výstup, okrem iného veci, HTML a ďalší takýto obsah že budeme chcieť vidieť. Ale my sme naozaj pozrel na to, ako budeme ukladať žiadne informácie. V skutočnosti, takmer nič z toho super zaujímavé navštívených webových stránkach dnes mať nejaký druh databázy na zadnej koniec, že ​​jo? Facebook iste ukladá veľké množstvo dát o nás všetkých a predajní Gmail všetko z vašich e-mailov. A tak mnoho ďalších stránky nie sú len statický obsah, ktorý je informatívna. Je to vlastne dynamický nejakým spôsobom. Tie poskytujú vstup, aktualizuje stránky pre ostatných ľudí. Získate správy, pošlite správy, a tak ďalej. Takže dnes sa pozrieme bližšie na na pilieri projektu že budete potápať do ďalšej týždeň, CS50 Financie, ktorý sa v skutočnosti bude mať budete stavať niečo, čo nie je v C, ale v PHP. Webové stránky, ktoré vyzerá Trochu niečo také ktorý umožňuje nakupovať a predávať zásoby, ktoré sú v skutočnosti bude čerpať v reálnom čase Image dáta z Yahoo Finance. A tak nakoniec, budete mať ilúzie pre seba a pre užívateľov že ste vlastne nákup a predaj zásoby a dostať takmer v reálnom čase aktualizácie, môže spravovať portfólio, z ktorých všetky bude vyžadovať s, v konečnom dôsledku, databázy používateľov. Takže, vlastnými slovami, najmä ak si nie ste Super oboznámení s počítačom veda alebo databázy, čo viete, databázy, aby práve teraz, v netechnických hľadiska? Čo je to? Ako by ste opísali to na spolubývajúci alebo priateľa? Divákov: [Nepočuteľné] Informácie [nepočuteľných] DAVID Malan: Takže, zoznam informácií, alebo store-- zoznam informácií ktoré by vás mohli chcieť uložiť o niečom, ako používateľa. A to, čo robiť majú užívatelia spojená s nimi? Ak ste užívateľ na Facebooku, alebo Gmail, aké sú charakteristiky že všetci z nás majú užívatelia? Rovnako ako to, čo by mohlo byť niektoré z stĺpce v tabuľke, na ktorú sme sa zmieňoval minule? Vzhľadom k tomu znova, môžete myslíte, že databáza Naozaj ako efektné Excel súboru alebo Google Tabuľkový alebo Apple Čísla súboru. Tak, čo si myslíš o keď si myslíte, že na používateľa? Čo majú? Čo je to? Divákov: Meno. DAVID Malan: Názov. Takže ak názov, rovnako ako, David Malan by byť meno nejakého užívateľa. Čo ešte užívateľ mať? Divákov: ID. DAVID Malan: ID. Takže, rovnako ako rodné číslo, ako je vašej Harvard ID alebo vaše Yale Net ID alebo podobne. Čo iné môže užívateľ mať? Divákov: Password. DAVID Malan: Heslo, možno adresa, možno telefónne číslo, možno e-mailovú adresu. Takže, je tu trsy polí a to by mohla nejako vymkne kontrole Rýchlo akonáhle začnete si uvedomil, oh, poďme ukladať tento a poďme ukladať to a to. Ale ako vlastne robiť, že? Takže znovu, duševné Model mať na dnes, ako sme ponoriť do skutočného SQL, Structured Query Language, je databáza, ktorá vyzerá takto. Je to len riadky a stĺpce. A môžete si predstaviť, Google Spreadsheets alebo ľubovoľný počet iných programov. Ale čo je kľúčom k MySQL, čo je databázový softvér budeme používať, Voľne otvorene available-- Facebook použitie to a ľubovoľný počet ďalších websites-- Databáza ukladá veci príbuzensky. A relačnej databázy jednoducho znamená, ten, ktorý doslova ukladá dáta do riadkov a stĺpcov. Je to tak jednoduché, ako to. Takže aj niečo ako Oracle, ktoré ste možno počuli o celkovo je relačnej databázy. A pod kapotou to, ukladá dáta v riadkoch a stĺpcoch. A Oracle ste si účtuje veľa peňazí na to, že, vzhľadom k tomu, MySQL poplatkov ste za rovnaké nič. Takže, SQL sa chystá dať nám aspoň štyri operácie. Možnosť vybrať dáta, ako prečítané Údaje, insert, delete a aktualizovať dáta. Inými slovami, to sú Naozaj štyri kľúčové operácie sa deje, aby sme mohli zmeniť veci v týchto riadkov a stĺpcov. Nástroj, ktorý budeme používať dnes obzvlášť naučiť SQL a hrať s ním sa opäť nazýva PHP MyAdmin. Je to nástroj, založený web. Celkom náhoda, že je to napísaný v PHP. Ale to bude, aby nám grafické užívateľské rozhranie, takže môžeme vlastne vytvorenie týchto riadkov a stĺpcov a potom hovoriť s nimi prostredníctvom kódu. Takže, poďme sa teraz začínajú Myslím si, že to, čo je povedané druh zábavné procesu budovanie zadná časť webových stránok, časti, ktoré používatelia nemajú vidieť, ale určite robiť stará o, pretože to je to skôr dátové deje. Tak, podobne ako C a pridá sa trochu menej ako PHP, SQL, alebo databázy, ktorá podporuje SQL, má aspoň tieto dátové typy a zväzky ostatných. CHAR, VARCHAR, INT, BIGINT, DECIMAL, a DATETIME. A je tu celá veľa ďalších funkcií, ale poďme to tým, že spôsob, ako aktuálne príklad. Chystám sa ísť do CS50 IDE kde, v predstihu, som prihlásený a ja som tiež navštívil URL pre tento nástroj s názvom PHP MyAdmin. A problém nastaviť sedem, budeme rozprávať vám presne, ako sa dostať k tomuto rozhraniu tiež. V ľavom hornom rohu, Všimnite si, že hovorí, že prednášať. A to práve znamená, že v predstihu, I vytvoril prázdne databázy s názvom prednáška ktorá má v nej žiadne tabuľky doteraz. Neexistuje žiadne riadky a stĺpce. Pretože prvý vec, ktorú budeme robiť je začať vytvárať tabuľky že to bude ukladať našim užívateľom. Takže, doslova cez Tu na pravej strane, ja som ti to povedať databázy Chcem tabuľku s názvom Používatelia. Tak, to je ako súbor, ktorý som chcete uložiť všetky svoje dát. A koľko stĺpcov? Dobre, poďme držať to jednoduché pre teraz. Ja len chcem, aby uložiť ako keď užívateľské meno a názov pre užívateľov. Budeme začať v malom. Takže, chcem dva stĺpce celkom. A ja idem ďalej a kliknite na tlačidlo Prejsť. A potom, pre tieto stĺpy, čo budem k do-- ak tento internet cooperates-- v poriadku, takže budeme sa snažiť, aby to znova. Chystám sa vytvoriť tabuľku s názvom Užívatelia s dvoch stĺpcov, kliknite na tlačidlo Go, na tlačidlo OK. Teraz máme to naozaj rýchlo. Ďakujem, veľmi dobre urobil. Dobre, takže to, čo chceme Tieto stĺpce sa volá? Tak, jeden sa bude volať Užívateľské meno. Tak, vidím here-- a rozhranie Úprimne povedané je trochu škaredá nakoniec, Akonáhle začnete písať do všetkých týchto údajov. Ale to, čo je príjemné je, že druh paradoxne, som vytváranie stĺpcov, ale nástroj má pochabo položili tie veci v radoch takže môžem nastaviť tieto stĺpce. Takže, je tu dve prázdne miesta tam pod menom. A jeden z týchto odborov I Chcete volal meno, a iné oblasti chcem volať meno. A teraz mám na výber dátové typy pre tieto veci. Takže, zatiaľ čo v Exceli a Google Spreadsheets, ak chcete stĺpec, môžete doslova stačí zadať názov alebo meno, stlačte Enter. Možno ste to tučné tvár, aby Len pre prehľadnosť, ale to je všetko. Nemusíte špecifikovať typy stĺpcov. Teraz v Google Spreadsheets alebo Excel, môže určiť, ako sú dáta vykreslený. Dalo by sa ísť do menu Formát, a vy Môžete zadať ukážte tento ako znak dolára, ukázať to ako plávajúce bodovou hodnotou. Takže, je to podobné duchom že to, čo sa chystáme urobiť, ale toto je v skutočnosti bude nútiť údaje, ktoré majú byť určitý typ. Teraz, aj keď pred chvíľou som povedal, že je to len pár dátové typy, tam je vlastne oveľa, a sú to v rôznom stupni špecifickosti. A ako stranou, vy Môžete dokonca robiť maškarný veci ako skladovacie geometria vnútri databázy. Môžete ukladať veci ako je GPS súradnice a skutočne nájsť, matematicky, body, ktoré sú v blízkosti inej. Ale budeme zachovať to super jednoduché a ísť až na tú, všetci tzv typy reťazec. Takže, tu je zoznam celý rad možností. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. A je to celkom ohromujúci. A bohužiaľ, trochu paradoxne až C, CHAR nie je naozaj CHAR. Ak zadáte v databáze že vaše dáta typ je CHAR, to znamená, že áno, je to CHAR, ale je to jeden alebo viac znakov. A musíte zadať ako veľa pripáli chcete. Takže, čo je typický dĺžka užívateľské meno? Existuje nejaký limit zvyčajne? Divákov: [Nepočuteľné] DAVID Malan: 16 možná? Niečo ako toto. Viete, späť v deň, to bolo osem. Niekedy je to 16, niekedy je to ešte viac než to. A tak to nie je znamenať, daj mi jednu CHAR. To znamená, že musím upresniť dĺžka poľa, a teraz by som mohol povedať niečo ako 16 rokov. A je tu kompromis tu. Takže, uvidíme za chvíľu že to znamená, že jeden, každý užívateľ musí byť 16 znakov. Ale počkajte chvíľu, M-A-L-A-N. Či je to moje meno a ja som len s využitím piatich, čo by ste navrhnúť, aby databáza urobiť pre ďalších 11 znakov, ktoré Ja som vyhradený priestor pre? Čo by si robil? Divákov: [Nepočuteľné] DAVID Malan: Jo, aby ich všetci null. Urobiť im priestor. Ale pravdepodobne null, takže Veľa spätné lomítko núl. Tak, na jednej strane, máme Teraz sa uistiť, že sa moje užívateľské meno môže byť viac ako 16 znakov. A odvrátenou stranou, ktorá je že keby som mal naozaj dlhý názov alebo chcel naozaj dlhá užívateľské meno, ako niektorí z vás chlapci môžu mať v tejto vysokej škole, alebo na Yale.edu, nemôžete mať jeden. A tak v skutočnosti, ak ste niekedy zapísaná pre webové stránky a dostanete zareval na príslovie Vaše heslo je príliš dlhá alebo vaše užívateľské meno je príliš dlhá, je to jednoducho preto, že programátor, keď konfiguráciu jeho alebo jej databázy, rozhodol, že toto pole bude byť dlhšia než táto dĺžka. Dobre, tak čo keď budeme pokračovať pomenovať? Ako dlho by mal Meno typického ľudského to byť? Ako veľa znakov, 16? Hádam, že by sme mohli nájsť niekoho v tejto miestnosti kde jeho alebo jej prvý Plus posledný názov je dlhší ako 16 znakov. Takže, čo je lepšie, než to, že 17? 18? 25? Väčšie? 30? Divákov: [Nepočuteľné] DAVID Malan: 5000, ach môj bože. Tak, to je asi slušný hornú hranicu, povedzme. A tu sme trochu sa vykonať úsudok volanie. Rovnako ako neexistuje správna odpoveď tu. Infinite nie je dosť dobre možné, preto, že sme sa nakoniec bude have-- sme chystá spustiť z pamäte. Takže musíme urobiť úsudku v určitom okamihu. Veľmi časté by, napríklad, na use-- a dovoľte mi upresniť CHAR tu ako before-- 255 bol doslovne Horný limit tohto databázový softvér pred rokmi. A tak, veľa ľudí by len povedať, fajn. 255 je limit. Poďme sa len využiť maximum. A to je celkom smiešne. Rovnako ako v prípade píšete je niekto menovať 200 plus znaky, to trochu smiešne. Ale pamätajte, že ASCII nie je jediný systém pre znaky. A tak, a to najmä v Mnoho ázijských jazykov tam, kde je znaky nemôžeme vyjadriť na klávesniciach, ako je môj USA klávesnica, niektoré charaktery vlastne trvať až 16 bitov namiesto ôsmich bitov. A tak, to vlastne nie je všetko, že neprimeraná že potrebujeme viac space ak chceme, aby sa zmestili väčšie postavy, než samotné USA centric tie sme tendenciu diskutovať. Takže, potrebujeme nejaký horná hranica. Ja neviem, čo je najlepšie z nich je, 255, ale je všeobecne obyčajný. 25. cíti nízka. 16, 32 cítiť nízka. Chcel by som chybu na strane niečo vyššia. Ale je tu kompromis, ako vždy. Čo je možno zrejmé, kompromis vyhradiť 255 znakov pre meno každého v mojej databázy? Divákov: [Nepočuteľné] DAVID Malan: Čo je to? Divákov: [Nepočuteľné] DAVID Malan: Je to veľa pamäti, že jo? M-A-L-A-N. Práve som premárnil 250 znaky len uložiť moje meno obrancovia len v prípade, že niekto v triede má naozaj dlhý názov. To sa javí ako neprimerané kompromisu. Tak to dopadá, SQL, Táto databáza jazyk, v skutočnosti podporuje niečo, volal VARCHAR, alebo Variable CHAR. A to je celkom pekné, že tento umožňuje zadať nie je pevná šírka, ale skôr, premenná šírka. A konkrétnejšie, je maximálna šírka poľa. Takže, to znamená, že môže názov byť väčšia ako 250 znakov, ale to môže byť určite menej. A databáza bude šikovný. Ak sa dať do M-A-L-A-N, je to len bude používať päť, možná šesť bytov pre podobné vlečená znak null, a nie tráviť ďalšie 249 alebo 250 bajtov zbytočne. Takže to vyzerá, ako by som mal začali s týmto príbehom. Ale je tu vždy kompromis. Tak, na jednej strane, užívateľské meno som uvedené, že sa pevný kódované na 16, a možno, že to nie je pravá výzva, možno ju je, ale prečo nepoužiť VARCHARs za všetko? To existuje z nejakého dôvodu. Prečo nevyužiť VARCHARs pre každý odbor ktorého dĺžka neviete vopred keď sa zdá, že je to skvelá vec, nie? Používajte len toľko priestoru, koľko musíte do tohto limitu? Divákov: Pomalší. DAVID Malan: Kontrola pravopisu? Divákov: Robí to pomalší? DAVID Malan: Oh, to je pomalší. Dobre, to je takmer vždy odpoveď, úprimne. Rovnako ako to, čo je to kompromis? Je to buď stojí viac miesta alebo to stojí viac času. Takže v tomto prípade, môže byť pomalší. Prečo? Divákov: [Nepočuteľné] stanovenie [nepočuteľný]. DAVID Malan: Dobrý. Takže, možno si spomeniete aj od PSED5, hrať so svojím prístupom do slovníka, ak máte vyhradiť pamäť dynamicky alebo zachovať pestovanie vyrovnávaciu pamäť, ktorá môže byť v skutočnosti pomalé. Ak máte volať malloc pod pokrievku a možno to je to, čo MySQL robí, tak iste, že by mohol byť prípad. A ak si myslíte, cesta späť na PSet-- alebo dokonca dva týždne, keď sme urobili veci, ako je binárne vyhľadávania, alebo dokonca lineárne vyhľadávanie, jedna z pekné veci o každé slovo v databáze alebo každé slovo v stĺpci je presne rovnakú dĺžku, a to aj v prípade, že celý rad týchto znakov sú prázdne, je, že môžete použiť s priamym prístupom na vaše dáta, nie? Ak viete, že každý Slovo je 16 znakov preč, môžete použiť ukazovateľ aritmetiku, tak aby hovoriť, a ísť k nám 16, 32, 48, 64, a vy môžete len skok okamžite pomocou aritmetiku na niektorú zo slov v databáze. Vzhľadom k tomu, či je to VARCHAR, čo si namiesto toho musíte urobiť? [Telefón zvoní] Pokiaľ sa jedná o VARCHAR, vy nemožno použiť náhodný prístup. Čo budete musieť hľadať alebo robiť? Jo? Divákov: [Nepočuteľné] DAVID Malan: Pozrite sa cez whole-- stopy celý zoznam hľadá na čo, s najväčšou pravdepodobnosťou? Aké zvláštne hodnoty? Divákov: [Nepočuteľné] DAVID Malan: Hľadám pre null terminátorov ktoré vymedzujú oddelenie slov. Takže znova, kompromis, a neexistuje správna odpoveď. Ale to je miesto, kde, zvlášť keď vaši užívatelia si, že je veľa a váš náklad na svojich serverov, Počet ľudí, ktorí používajú to bude vysoká, jedná sa vlastne netriviálne rozhodnutia. Takže, môžeme nechať tieto ako to, ale poďme prejdite dole cez doprava sem. Teraz, tam je niekoľko stĺpcov kde musíme urobiť úsudok volanie. Má zmysel povoliť užívateľa meno, užívateľské meno používateľa, alebo užívateľa meno, byť null? To znamená, že len prázdny. Pocit trochu nezmyselné, takže som nebude kontrolovať týchto boxov. Ale ukazuje sa, v databázu, môžete povedať, niekto môže voliteľne mať túto hodnotu. Tento stĺpec nemá k vlastne byť tam. Teraz, tam je to roletového menu. A všimnite si, že som stále tam prvom rade, takže Hovorím o užívateľské meno teraz. A ukázalo sa, že v databáze, na rozdiel od jednoduchého obyčajné tabuľky, má výkonné funkcie zvanej indexy. A index je spôsob rozprávania Databázy vopred, že ja, ľudského som múdrejší ako ty. Viem, aké druhy otázok, vyberte alebo vložiť alebo odstrániť, alebo aktualizovať, že môj kód skončí up robí v tejto databáze. Chcem si prečítať veľké množstvo dát. Chcem vložiť veľké množstvo dát. Chcem sa neustále odstrániť veľké množstvo dát. Ak ja viem, že ja budem prístup pole ako užívateľské meno a veľa, Môžem povedať, preventívne databázy, viem viac ako vy, a ja chcem, aby vyhlášky mali by ste index toto pole. V prípade, indexovanie pole alebo stĺpce znamená, že databáza vopred by mala požičať nejaké nápady z, rovnako ako, štyri týždeň a päť a šesť z CS50 a vlastne vybudovať niečo ako binárny vyhľadávanie strom alebo niečo všeobecne nazýva B strom že by ste sa naučiť, v triede, ako CS124 na Harvarde je trieda algoritmy, alebo ľubovoľný počet ďalších miestach. Databázy a inteligentné Ľudia, ktorí ju realizované sa prísť na to, ako uložiť že tabuľka informácií v pamäti tak, že vyhľadávanie a ostatné operácie sú veľmi rýchle. Nemusíte to robiť. Nemusíte realizovať lineárne vyhľadávanie alebo binárne vyhľadávanie alebo zlúčiť druh alebo výber druh, nič z toho. Databáza to urobí za vás, ak poviete to preventívne index toto pole. A môžete vidieť taky, je tu niektoré iné charakteristiky môžeme povedať, databázy presadiť. Čo by mohlo to znamená, keď vybrať Unique z tohto menu, len intuitívne? Jo? Divákov: [Nepočuteľné] DAVID Malan: Jo, ten užívateľské meno musí byť unikátne. Je to dobrá vec, alebo zlá vec pre databázy, pre webové stránky s používateľmi? Mal by byť unikátne používateľské mená? Jo, pravdepodobne. Ak to je to, čo poľa používame na prihlásenie, nemáte naozaj chcete ľudí, ktorí majú rovnaký pocit alebo rovnaké používateľské meno. Takže môžeme mať Databázy presadiť, že tak že teraz v mojom PHP kódu alebo akéhokoľvek jazyka, Ja nemusím, napríklad, skontrolujte nutne robí toto užívateľské meno existovať predtým, než som nechať niekoho registrovať? Databáza nenechá dvaja ľudia s názvom David alebo Malans registrovať v tomto prípade. A ako stranou, hoci toto Menu iba umožňuje vybrať jeden, jedinečný index je ten, ktorý je indexované za super rýchly výkon, ale tiež vynucuje jedinečnosť. A vrátime sa na to, čo Ďalšie dva na mysli len na chvíľu. Medzitým, keď pôjdem do Môj druhý riadok, ktorý je užívateľské meno, mal by som upresniť že názov by mal byť jedinečný? Nie, pretože by ste mohli určite have-- nie je dvoma David Malans v tejto miestnosti, s najväčšou pravdepodobnosťou. Ale ak sa zvoliť iný názov, by sme mohli iste mať kolízie. Spomeňte si na hash tabuľky a podobne. Takže sme určite nechceme aby sa názov poľa jedinečný. Takže, sme len tak odísť že ako pomlčka, pomlčka, pomlčka, nič. A ja neodídem všetko ostatné sám. V skutočnosti väčšina z týchto polí nebudeme musieť starať o. A keď som pripravený zachrániť to, v prípade, že internet spolupracuje, Aj kliknite na tlačidlo Uložiť, a veľmi, veľmi, veľmi Pomaly sa databázy spasený. A teraz som späť k tomu rozhranie, ktoré síce, je ohromujúci na prvý pohľad. Ale všetko, čo budem robiť, je kliknúť na slovo Používatelia vľavo hore. Chystám sa ísť sem, kliknite na tlačidlo Užívatelia, a v predvolenom nastavení, je popravil nejakú SQL, ale viac o tom za chvíľu. Tu je len súhrn toho, čo som urobil. A nie sa báť, že vidíte spomenúť latinčiny a švédčine tu. To sú len východiskové nastavenie, pretože MySQL pôvodne, alebo PHP MyAdmin, jeden z nich sa stalo byť napísaný niektorými švédskymi ľudí. Ale je to irelevantné, v našom prípade tu. Dobre, tak prečo je to zaujímavé? Ukázalo sa, že môžem vložiť dáta do databázy od písania kódu. A ja som do toho pustite a v mojom súbore tu, ja som ísť ďalej a predstierať, toto je zapojený do tejto databázy, ktorá to nie je v túto chvíľu, ale bude byť, keď sa dostaneme do problémov nastaviť sedem. A ja idem ďalej a vykonávať funkciu nazvanú dotaz, ktoré dáme vás problém nastaviť Siedma distribúcia kód, ktorý trvá najmenej jeden argument, čo je len reťazec. Reťazec SQL kódu. Takže, vy ste o tom naučiť sa napísať Structured Query Language. Chcem chcete vložiť nový riadok do môjho Databázy preto, že niekto podal forma na mojom kódu, urobil by som to doslova napísať INSERT INTO užívateľov nasledujúce pole: username, čiarka, názov, hodnoty, a teraz musím vložiť niečo ako Malan a citácií, koniec citátu "David Malan." A teraz a to aj pre tých neoboznámený s SQL, prečo som s použitím jednoduchých úvodzoviek vnútri tejto zelenej reťazca? Čo sa tu môže byť dôvod? Všimnite si, že som čo-miešať dva jazyky. Otázka je funkcia PHP, ale to trvá argument. A že toto tvrdenie musí byť samo o sebe napísaný v inom jazyku zvanom SQL, Structured Query Language. Takže všetko, čo som sa tu práve zvýraznené je tento jazyk nazýva SQL. Takže, čo je s jednoduchých úvodzovkách, rovnako ako rýchlu kontrolu sanitačného? Choďte do toho. Sú reťazce. Takže, citujem, koniec citátu Malan a citovať, koniec citátu David Malan sú reťazce. A len premýšľať intuitívne teraz, vedel, čo viete o C a PHP, Prečo som to neurobil, čo som väčšinou ojazdené úvodzovky pre sláčiky? Prečo som nechcel robiť, že? Jo? Divákov: [Nepočuteľné] DAVID Malan: Presne tak. Pretože už som s použitím dvojité úvodzovky na ceste mimo argumentu do funkcie PHP, Len by som zmiasť tlmočníka. Nebude vedieť, že to ide dokopy? Nikdy to ide dokopy? Nikdy to ide dokopy? Tak som striedať miesto. Alebo by som mohol urobiť niečo také, spätné lomítko citát alebo spätné lomítko citát. Úprimne povedané, že práve začína dostať veľmi nečitateľné a škaredé. Ale to by dosiahol rovnakého výsledku rovnako. Takže, keby som spustiť tento dotaz teraz, poďme sa pozrieť, čo sa stane. Chystám sa ísť dopredu a hneď skôr ako spustiť PHP kód, ktorý je miesto, kde budete hrať v probléme set sedem, Chystám sa namiesto toho ísť do PHP MyAdmin. A ja som sa ručne ísť na kartu SQL, a dovoľte mi, aby som priblížiť na rozhraní. A ja vložiť do tá vec som napísal. A farebné kódovanie má zmenil trochu teraz, len preto, že programové formáty veci trochu inak. Ale všimnite si, že všetko, čo som urobil je, že som povedal, vložte do užívateľa. Ja som je uvedené, potom v čiarkou oddelený zátvorkách zoznam dva Pole, ktoré chcem vložiť, a Potom som sa doslova povedal hodnoty nasledovala ďalšia zátvorka, a potom sa tieto dve hodnoty Chcem, aby plug-in, a Teraz na správnu mieru, Dám bodkočiarka na konci. Tak, to nie je C. To nie je PHP. To je teraz SQL, a ja som ho vložiť do tohto webového rozhrania, ktorá je Len ma nechaj, akonáhle som na tlačidlo Prejsť, vykonanie tohto dotazu v databáze bežiaci vo vnútri CS50 IDE. Tak to je dobré. Všimnite si, že povedal jeden riadok vložené, išiel super rýchly, 0,0054 sekúnd vložiť tieto dáta. Tak, to znie celkom zdravé. To Reformatted môj dotaz pre mňa tu len preto, aby to vidieť v akejsi farebné kódovanej verzie. Ale teraz, keď kliknem Prechádzať, Všimnite si, že aj aj keď je tu veľa neporiadku na obrazovka, môj stôl má teraz dva riadky. Takže, nechaj ma ísť ďalej a robiť inú. Namiesto toho, dovoľte mi, aby som prejdite na záložku SQL znova. A tentoraz budem vložiť niečo ako Rob a jeho meno bude rob Bowden. Bowden. Poďme na tlačidlo Uložiť. Jejda, skôr Go. Znova kliknite na tlačidlo Prehľadávať a Všimnite si, teraz mám dva riadky. Takže, je to len spôsob, ako zložitejšie spôsob otvárania Google Spreadsheets a len písať riadok do stĺpca. Ale čo je kľúč je, že máme teraz syntaxe s ktorou písať kód tak, aby nakoniec, mohli sme vlastne urobiť nejaké to a. Pripomeňme si, že PHP podporuje Super globálne premenné. To, čo je vo vnútri dolára prihlásiť podčiarknutie GET v PHP? Zobrali sme sa pozrieť na jeden alebo dva jednoduché príklady. A v PSet6, spomínam máte ahoj dot PHP, ktorý používa túto premennú. Čo sa deje tam? Alebo čo je to? Trochu hlasnejšie. Divákov: [Nepočuteľné] DAVID Malan: Je to sneh semeno z poľa, čo je len fantázia spôsob, ako hovoriť matice, ktorá má kľúče a hodnoty. A kľúče nie sú číselné. Sú to slová alebo reťazca. A konkrétne, čo sú tie páry kľúč hodnota? Odkiaľ pochádza? Prosím? Divákov: [Nepočuteľné] DAVID Malan: Nie? Kam tie kľúče párov hodnota pochádza? Zopakuj? Už zase? Som jediný, kto niečo sluch? [SMIECH] To je v poriadku, áno? Divákov: [Nepočuteľné] DAVID Malan: Jo, pochádzajú z reťazca dotazu. Takže, ak ste vzad v čase keď sme hrali s pomocou Google a my sme šli do Google.com lomítko Hľadanie otáznik q rovná mačky, keby som stlačte klávesu Enter, a pokiaľ Google boli realizované v PHP, PHP kód, ktorý Google napísal by mala prístup k doláru podčiarknuť dovnútra, z ktorých je kľúčovým nazýva Q a hodnota tzv mačky, ktoré to môže potom použiť robieval aktuálne vyhľadávania s. Takže v skutočnosti to, čo budem urobiť, je ísť späť do svojho PHP kód že budete zase vidieť viac v PSet7. A miesto upchávaniu v tvrdých kódovaných hodnoty, ktoré nezdá sa ako veľmi dynamický web, Chystám sa vám ukážku z čo váš skutočný kód bude robiť. Tie by sa dal v dvoch otázniky takhle. Ja neviem, čo je užívateľské meno. Ja neviem, čo sa Názov bude, ale ja viem, že môžem si je dynamicky. Takže, ak kód sme teraz Písanie je kód beží na serveroch Google, alebo ak je to ahoj bodka PHP, ktorý je dodávaný s PSet6, Chystám sa prejsť do Funkcia dotaz rovnako ako printf, dva ďalšie argumenty. GET, citujem, koniec citátu užívateľské meno, a GET, citujem, koniec citátu meno. A teraz, čo si všimnete všeobecná štruktúra je tu. Mám na ľavej strane strane hovoru, Táto funkcia s názvom dotazu v PHP. Stále mám ako prvý Argument, len reťazec textu. Ale to reťazec textu napísaný v jazyku s názvom SQL. A úprimne povedané, nie je to veľký jazyk. Sme len hovoriť o formálne dnes, naozaj. A potom sa v probléme set sedem, tam je pomerne Niekoľko funkcií, ktoré sme ísť využiť. Otázniky však znamenať zapojte je hodnota, tu a plug-in inú hodnotu sem. A upozornenie, ja som vynechal, čo z celého quote-- sakramentsky to-- okolo citáciu označí tentoraz. Ja som vynechal citát značky okolo otáznik, Ospravedlňujem sa, tentoraz. Takže, čo je pekné o tom Otázka funkcie ochranná známka, ktorá PHP má tendenciu podporovať, Ruby a Python a iné jazyky, to len znamená, že konektor v niektorých Hodnota tu a viete, čo? Môžete prísť na to, či sa má používať jednoduché úvodzovky alebo dvojité úvodzovky. Neobťažujte ma s tými, intelektuálne nezaujímavé detaily. Ale uistite sa, že je správne takže môj kód je nakoniec funkčné a bezpečné, čo bude mať význam onedlho. A teraz, koľko celkom argumenty, len preto, aby byť jasné, je dotaz funkcia prijímanie? Každý, kto chcú hlasovať pre viac než dva? Tri? Iste, prečo? Prečo tri? Divákov: [Nepočuteľné] DAVID Malan: Presne tak. Prvá časť je reťazec. Druhý argument je znak dolára podčiarknuť GET držiaku užívateľské meno. A tretí argument je to isté, ale len meno. Takže inými slovami, teraz keby som mal webový formulár že musel textových polí, jeden pre užívateľské meno používateľa, jeden pre jeho alebo jej meno, len ako by ste vidieť na internetových stránkach pri registrácii niektoré webové stránky, môže to bude kód na zadnom konci, ktorý vlastne robí vloženie teraz do databázy. Teraz naopak, poďme rýchlo dopredu. Predpokladajme, že používateľ je teraz prihlásenie a chcete písať PHP kód, ktorý kontroluje, či osoba, ktorá je práve prihlásený je vlastne užívateľ, môžete používať celkom jednoduchú syntax. Môžete povedať SELECT, povedzme Star, kde hviezda znamená všetko. Neviem, čo mám chceš, tak daj mi všetky stĺpce z tabuľky volal užívatelia kde, a to je pekné. Zvoľte podporuje to, čo je volal predikát, ktorý je ako spôsob, ako kvalifikáciu, čo chcete. Tam, kde používateľské meno odpovedá citát, koniec citátu Malan. Takže aj tu, som vložený vnútri argumentu na funkciu PHP, riadku kódu SQL. A že tento kód SQL čas je doslova deje hľadať citáciu, koniec citátu Malan. Teraz to nie je všetko, že užitočné, takže budem preskočiť, že a ja hodlám dať preč Tento tip od Brady, a ísť a namiesto toho plug-in otáznik tu. Takže, len aby bolo jasno, čo by môj druhý argument, ak bude niekto práve prihlásený a I chcete skontrolovať, či on alebo ona je v skutočnosti užívateľ? Divákov: [Nepočuteľné] DAVID Malan: Jo. Počul som, že znak dolára podčiarknutie Si nabidku, koniec citátu užívateľské meno. A to by mal vrátiť ku mne niektorý z riadkov vo svojej databáze ktoré majú užívateľské meno Malan. Teraz dúfajme, budem sa dostať späť nula, ak Malan je tu nikdy nebol, alebo jeden keď má. Nemala by som sa vrátiť dva alebo tri alebo štyri. Prečo? Divákov: [Nepočuteľné] DAVID Malan: Povedal som unikátne, že jo? Jednoduchý dôvod. Pretože som povedal, že to musí byť jedinečný, práve logicky, môžete mať iba žiadny alebo jeden Malans v tomto konkrétnom tabuľke databázy. Teraz ako stranou, len aby ste videli to, aj keď som stále používať GET a hoci používa iba PSet6 GET, môžete samozrejme mať POST. A pripomínajú, že príspevok je iný technika pre odovzdávanie informácií z formulára, ale nezobrazuje v URL. Je to trochu bezpečnejšie iste pre veci ako používateľské mená a heslá, ktoré PSet7 bude v skutočnosti, zahŕňajú. Takže, poďme to urobiť v PHP MyAdmin a uvidíme, čo sa stane. Chystám sa ísť na záložku MySQL. A všimnite si, že predvolenú hodnotu pre PHP MyAdmin, len aby sa snaží byť užitočný, je vybrať hviezdičku od užívateľov, kde jedna. No, jeden je vždy pravdivý, tak To má hlúpe efektívne zo len vybrať všetko. Ale ja budem trochu viac pedantská a ručne zadajte out SELECT hviezdu od užívateľov. Teraz technicky, môžete citovať mená tabuliek. Je to vzácne, že je to nutné, nevšimnúť tieto nie sú Vaša normálne citáty na klávesnici USA. Jedná sa o tzv backtick, ktorý je obvykle na hornej ľavej ruke rohu klávesnice. Ale to je zriedkavé, že budete skutočne potrebujú obťažovať s tým, tak som si len vynechať je tak ako tak. Takže teraz, nechaj ma ísť napred a hit ísť. A koľko riadkov by som mal dostať späť, keď som sa vybrať hviezdičku od užívateľov? Divákov: [Nepočuteľné] DAVID Malan: počet riadkov, iste. Ale koľko v tomto betón príbeh práve teraz? Po druhé, pretože tam bol ja a tam bol Rob. Takže, keď som kliknite na tlačidlo Prejsť, vidím, že vizuálne Som sa dostal späť, naozaj, dva riadky. Je tu veľa neporiadku na obrazovka, ale vidím len dve riadky. Naproti tomu, keď som to znovu a robiť SELECT hviezda od užívateľov, kde username rovná citácie koniec citátu Malan, teraz keď som na tlačidlo Prejsť, Ja som len sa vrátiť jeden riadok. A konečne, keď to urobím niečo také, predpokladám že nemám starať o dostať všetko, čo je tak trochu zmysel teraz, pretože tam je len dva stĺpce. Nie je to, ako som výberu obrovské množstvo dát. Dajme tomu, že som sa do toho pustite a sa SELECT meno FROM Užívatelia, kde username rovná Malan, čo je pekné o SQL úprimne, je, že to naozaj len robí čo ste to povedať robiť. Je to celkom stručne, ale doslova len povedať, že to, čo chcete robiť. Vyberte názov od užívateľov prípadne užívateľské meno rovná Malan. A naozaj je to tak jasné. Tak, teraz, keď som trafil Go, koľko riadky som sa dostať späť? Po prvé, pretože je to len Malan, dúfajme. Alebo nula v prípade, že to nie je tam, ale maximálne. A koľko stĺpcov dostanem späť? Koľko stĺpcov? Tentoraz, ja som jednoducho ísť aby si jeden, pretože som nemal vyberte hviezdu, čo je všetko. Teraz som len vyberiete meno, takže som len dostať späť jeden stĺpec a jeden riadok. A vyzerá to tak nejako vhodne smiešne, len pri pohľade výborný malá takhle. Takže, čo sa skutočne deje? Po spustení SQL dotaz pomocou select, čo ste sa dostal späť z databázy je ako dočasné tabuľky s riadky a stĺpce, možno, ale že vynechať nič, čo by nebol vlastne zvolený vami. Takže, je to ako keby niekto mal veľký tabuľku všetkých študentov registrované pre niektoré Skupina študentov, a vy hovoríte, daj mi všetky nováčik, ktorí si registrované pre našu študentská skupina, čo váš kolega v Skupina študentov by mohol robiť ich mohli len odovzdať ste celý tabuľky. To je ako hovoriť vyberte hviezdu. A je to trochu nepríjemné, ak ste chcel iba prvom ročníku. A tak, keď sa namiesto toho povedal: vyberte hviezda z databázovej tabuľky kde rok rovná citát, koniec citátu prvák, je to ako keby váš priateľ v študentskej skupiny doslova zvýrazní a kopírovať len prvák riadky, vložiť ich do nového Googlu Tabuľkový alebo súbor programu Excel, a podal uhádnete Výsledný jediný súbor. To je všetko, čo sa deje Na koncepčne tu. Takže nakoniec, môžeme to urobiť niektoré docela efektné veci skladovaním, ako sú užívateľské mená vecí a heslá a podobne. Ale, to dopadá, budeme robiť trochu inak, než je táto. To neznamená, že chytré iba uložiť užívateľské meno a heslo. Niekto skôr, myslím, tu, navrhol ID. Teraz ID by mohlo byť ako Harvard ID alebo Yaleův Net ID, ale môže to byť aj jednoduchšie v našej databáze prípade. A naozaj, bežný prípad je mať ďalší stĺpec. A ja idem vpred a upraviť tabuľku. A ak budete hrať sa s toto rozhranie pre PSet7, uvidíte, že môžete skontrolovať toto tlačidlo tu a pridať poľa na začiatku tabuľky. A teraz, keď som kliknite na tlačidlo Prejsť, bude to aby mi dal jeden z tých foriem z minulosti. Chystám sa pridať pole s názvom ID. A ja, aby to číselný typ. Mám veľa hodnôt pre numerics. Ja som jednoducho ísť vybrať INT a nemusíte starať o rôznorodých veľkostí. Nemám špecifikovať dĺžka alebo hodnotu, pretože to bude 32 bitov bez ohľadu na to, čo. Atribúty, sme nevideli predtým. Všetky úroky v niektorej z týchto Možnosti ponuky tejto dobe? Pre INT? Čo navrhujete? Nie? Vykonajte ľubovoľný z nich zmysel? Jo. Jo, nepodpísané, že jo? Všeobecne platí, že ak budeme dávať všetci jedinečné číslo, ktoré je miesto, kde tento príbeh je deje, som sa naozaj len chcem osobu mať číslo ako nula a jedna a dve a tri a štyri. Nepotrebujem sa zaoberať so zápornými číslami. Proste to vyzerá ako zbytočného zložitosti. Chcem štyri miliardy možných hodnôt, nie štyri miliardy možných hodnôt, tak som zdvojnásobil Kapacita môjho INT. Ako stranou, ak chcete, aby sa týkajú to niečo ako Facebook, späť do akejsi môj deň, kedy Facebook vyšiel prvý, Verím, že to, čo oni boli použitie v ich databáze MySQL pre uloženie užívateľa identifikátor, bol len INT. Ale samozrejme, je tu veľa reálnych ľudí na svete. Je tu veľa falošných Facebook účtov vo svete. A tak nakoniec, Facebook pretiekol veľkosť INT, štyri miliárd hodnotu. Čo je dôvod, prečo, keď sa pozriete okolo a je tu webové stránky ktorý vám poradí, aké jedinečné identifikačné číslo je. A ak ste nikdy zvolili používateľské meno Facebook, uvidíte jedinečný identifikátor. Myslím, že je profil bodka PHP otáznik ID rovná niečo. To je dnes niečo ako veľký INT, alebo dlho dlho ak chcete, čo je 64-bitová hodnota alebo niečo porovnateľné. Takže aj v reálnom svete sa tieto Problémy nakoniec niekedy nezáleží. A ukázalo sa tu, keď som dávať všetky moje používateľom jedinečné ID, Chcem byť super explicitné a minimálne, aby toto pole jedinečný. Ale ukazuje sa, je tu ešte jedna kus nomenklatúry aj dnes to je primárny kľúč. Ak ste navrhovaní databázy stôl a vopred viete, že jeden zo stĺpcov v tejto tabuľke mal a bude jednoznačne identifikujú riadky v tabuľke, ktoré chcete zadajte ho a povedať databázu, toto je môj primárny kľúč. Tam by mohlo byť duplikáty v iných oblastiach, ale ja vám hovorím, že táto databáza je môj primárny, môj najdôležitejšie oblastí, že je zaručená jedinečnosť. Teraz sa to zdá nadbytočný. Ja som teraz navrhuje, že by sme pridať, kliknutím na tlačidlo Uložiť tu, poľa called-- a idem ísť do toho a kliknite na AI, vrátime do že vo chvíli, zachrániť. Ja som teraz, že navrhuje môj stôl vyzerať takto. Mám INT pole s názvom ID, CHAR pole s názvom Užívateľské meno, VARCHAR poľa s názvom Name, ale ID, ak je to primárny a preto jedinečný, prečo som len odpad Doba zavedenie čo účinne je druhý jedinečný pole s názvom ID to je INT? Užívateľské meno, odvolanie, bol Už jedinečná, povedali sme. Takže len logicky, nemusíte žiadne databázu skúsenosti k rozumu cez to, prečo Možno som si predstavil INT ako môj jedinečný identifikačný kód, rovnako? Čo je tohle-- zase hovoria? Divákov: [Nepočuteľné] DAVID Malan: Náhodný prístup je jednoduchšie, prečo? Divákov: [Nepočuteľné] DAVID Malan: Jo, to je Len prístup čísla. Takže, ak si myslíte, že to naozaj je tabuľka, ako je pole, teraz mám jedinečné identifikátory že môžem skákať okolo. A lepšie ako doteraz, je, že aký veľký je INT bude znova? 32 bitov alebo štyri byty. Ako veľká je moje užívateľské meno bude? Maximálne? 16 bytov. Takže, ak ste naozaj starať o výkon vášho kódu, Spomeňte si na PSet5, dávate prednosť hľadať štyri bajt hodnoty alebo 16 byte hodnota, je to tak? Je to naozaj tak jednoduché. Čo musíte urobiť, štyrikrát toľko práce vyhľadať používateľské mená, pretože tí, 16 bajtov. Takže, budete musieť doslova porovnať všetkých 16 bajtov byť istí, že áno, je to užívateľské meno chcem. Kým pre INT, môžete to sa len štyri byty. A ako stranou pre tých, záujem počítačového hardware, to dopadá sa vojde niečo ako INT alebo 32-bitová hodnota v niečom volal register v počítači CPU, čo znamená, že je super, super rýchly, aj pri najnižších Úroveň hardvéru počítača. Takže, je tu len výhody všade okolo. Takže, čo to znamená? V skutočnosti, keď ste navrhovaní databázové tabuľky, takmer po celú dobu budete mať nie iba dáta vám záleží, ale aj niečo ako jedinečný identifikátor pretože to bude poďme robiť iné veci. A poďme zakopnúť jeden problém tu. Predpokladajme, že používatelia nemajú len používateľské mená a názvy, ale majú tiež veci ako miest a štáty a poštové smerovacie čísla, prinajmenšom tu v USA. Takže budem pokračovať a len rýchlo povedať, daj mi tri viac stĺpcov na konci tabuľky. A to bude City, to bude stáť, a to bude Zip. Teraz mesto, aké typy dát by to malo byť, snáď? VARCHAR? Ja neviem, čo sa Najdlhší názov mesta. Niekde v Amerike, tam je pravdepodobne nejaký smiešne dlhé slovo, takže poďme jednoducho ísť s 255, trochu historicky alebo sa môžu ľubovoľne. Štát, čo chcete robiť? Rozsudok volania, že jo? Čo je možno najúčinnejší? Koľko znakov? Možno len dva, ak môžeme dostať preč s tým len, ako je, MA Massachusetts, a tak ďalej. Takže, ja idem char hodnotu dva. PSČ to zaujímavý človek. Sme tu na 02138, takže navrhuje, by sme mali používať čo? Je to INT, že jo? INT, INT, krátke? Krátka bude fungovať. Nie? CHAR alebo päť, ale Chcem INT. Prečo zatlačte na INT? Presvedčiť ma z toho. Čo je to hlúpe asi INT, môj nápad? Jo. Divákov: zaberá v pamäti viac. DAVID Malan: zaberá v pamäti viac. Štyri bajty, ale ty si navrhuje poštové smerovacie číslo ako päť bajtov, alebo niekto ako Char, ktorý sa cíti ako eh, v skutočnosti to nie je púzdro. No, zábava príbeh. Pred rokmi, keď som používal Microsoft Outlook na môj e-mail, Nakoniec som chcel prejsť k službe Gmail. A tak som sa vyváža všetky moje kontakty z Outlooku ako súbor CSV. Oddelené čiarkou hodnoty, čo znamenalo, že som práve mali všetci moji priatelia mená a posledný Mená a telefónne čísla a poštové smerovacie čísla a všetky, ktoré. A potom som robil chyba, že sa otvorí v Exceli, čo je tabuľkový program, ktorý chápe súbory CSV, ako sme videli. Ale potom som musel zasiahnuť, ako je, Velenie a riadenie S na jednom mieste. A Excel zrejme v tej dobe mal funkciu, podľa ktorého sa kedykoľvek to videl číslo, to sa snažil byť užitočný. A ak toto číslo začala nuly, to by len sa ich zbaviť. Prečo potrebujete vedúci nuly na celé čísla? Sú to nezmyselné, matematicky. Sú to nezmyselné v USA poštový systém. Takže som mal po celé roky, k tomuto dňu, stále mať priateľov, že keď vzácny prípad, že musím ich niekto riešiť v týchto dňoch, Budem stále vidieť, že ja mať priateľa v Cambridge, Massachusetts, 2.138. A je to nepríjemné, ak ste sa snaží tak nejako programovo generovať obálky alebo len zapisovať nadol. A to je z tohto dôvodu, Vybral som si zlý typ dát. Tak som rád váš nápad. Využime char poľa. Päť znakov, s výnimkou je rohová prípad. Ak si napriek tomu odosielať poštu, niekedy zips kódy v týchto dňoch, sú, rovnako ako plus štyri. Takže potrebujeme pomlčku a potom potrebujeme ďalšie štyri čísla. Takže aby som bol úprimný, mohlo by to go mnohými rôznymi spôsobmi. Pre túto chvíľu, budem držať to jednoduché, a ja som len chcel povedať, že je to Päť CHAR hodnotu a my sme chystá preskočiť celú pomlčka a štyri. Ale to sú druhy kompromisy. A môžete myslieť na Rovnaké problémy plynúce s telefónnymi číslami alebo iných oblastiach. A teraz, je to vlastne pochabé cesty ísť dole. Predpokladajme, ako Rob a ja a Hannah a Maria a [? Davon?] A Andy a iní na zamestnancov všetci žiť v Cambridge, Massachusetts, 02138. To skutočne cítiť hlúpe, že som pridať do môjho užívateľov tabuľky, mesto, štát, a zips. Prečo? Divákov: [Nepočuteľné] DAVID Malan: znova, povedz? Divákov: [Nepočuteľné] DAVID Malan: Sú to vždy ísť spolu, nie? Keď sa ukázalo, sme si myslieť, toto bol prípad, kým sme vyčerpávajúcom prehľadali celé USA, a tam sa ukáže, že sú niektoré nezrovnalosti kde viac miest má rovnaký zips, čo je trochu divné. Ale ak budeme stanovuje, že pre túto chvíľu 02138 je vždy Cambridge, Massachusetts, prečo na svete by ste uložiť do databázy Cambridge a MA a 02138 pre mňa a pre Hannah a pre Rob a pre [? Davon?], A pre ostatných, ktorí žijú tu v Cambridge, je to úplne zbytočná. Mali by sme dostať preč len s uložením čo? Len poštové smerovacie číslo. Ale potom, ak budeme uchovávať len poštové smerovacie číslo, ja chcem, pravdepodobne, na mojich webových stránkach, aby vedeli, kde je 02.138. Tak som potrebovať ďalšie tabuľky. A to je v poriadku. A v skutočnosti, to je jedna z konštrukčné procesy navrhovaní tabuliek že budete robiť v PSet7 rovnako, pričom Ak chcete faktor spoločné dáta. Rovnako ako sme sa vytknutie spoločný kód a factoring von obyčajný štýly od CSS, tu taktiež v databáze, ak potrebujem len 02138 jednoznačne identifikovať niečí rodné mesto, neskladujte Cambridge, MA pre každý látat užívateľ v tabuľke. Namiesto toho majú samostatné tabuľky s názvom Zipsy, ktorá by mala mať čo stĺpcoch? Pravdepodobne ID pole, len preto, že pre zásady hovoríme teraz. Pravdepodobne zips pole pre 02138. A potom asi to, čo ostatní stĺpce? Mesto a štát, ale len mať jeden Riadok pre 02138, jeden riadok pre 02139, jeden riadok pre 90210. A to je doslova všetky zips kódy, ktoré poznám. Takže teraz, čo môžete robiť? To je problematické, pretože teraz mám dve tabuľky. Takže, moji užívatelia sú väčšinou tu, ale ich mestský štát informácie je tu. Tak to dopadá s SQL, je tu v skutočnosti spôsob, ako pripojiť informácie, a uvidíte to v pset. Ale ukazuje sa, je to možné niečo také. SELECT hviezda od užívateľov, JOIN zipsy ON Užívatelia dot zips rovná zipsy dot zips. Čo je trochu rozvláčny, pravda, ale to len znamená vyberte všetko od Proces vzal ma užívateľov tabuľku a môj zipsy stôl. Pridajte sa k nim na jednej Polia majú v stĺpci. Takže, doslova robiť niečo takto, a daj mi naspäť nové dočasné tabuľky To je širšia, je to väčšia, že má všetky stĺpce z oboch z nich. A to úplne jednoducho, by syntax robiť niečo také. Takže, tam je to dopredu, ale tam sa deje byť ďalšie rozhodnutie týkajúce sa návrhu, budete musieť urobiť, a to nielen s indexmi ale aj beh do problémov. V skutočnosti, tam je výzva v každom návrhu databázy pričom niekedy dvaja ľudia chcieť prístup k rovnakým radu databázy stôl. Takže, je to niečo, že budeme stretávajú v PSet7 rovnako. Ale ja som myslel, že by som sa na jednom útok, ktorý je možné v SQL. Aké sú niektoré z problémy, ktoré môžu nastať? Takže, narazíte na túto PSet7. A my vám povedať rovno, čo kódovanie riešenie tohto problému je. Ale ak budete mať vyššiu úroveň tried, najmä v operačných systémoch, budete sa stretnúť otázka Atomicita, problém sa snaží robiť viac vecí naraz bez prerušenia. A myslel som si, že zavedenie tohto Nápad na PSet7 s metaforou že som sa naučil sám v Margo Operačné systémy CS164 Seltzer sa trieda rokmi. Predpokladajme, že máte jeden z týchto koľaji chladničky vo vašej kolejním izbe alebo dome, a máte skutočný slabosť pre mlieko. A tak, prídete domov z tried jeden deň, otvorte chladničku. Oh, sakra. Nie je mlieko v chladničke. Takže, zatvorte chladničku, zamknúť dvere, zamknúť koľaji, chodiť za rohom na CVS, dostať do súladu, a začať odhlasovanie nejaké mlieko. A že to bude chvíľu trvať, pretože tie zatratenie samoobslužných pokladní počítadlá trvať večnosť tak ako tak použiť. Takže zatiaľ, váš spolubývajúci príde domov. On alebo ona má naozaj rada mlieko rovnako. Prichádzajú do izby na koľajniciach, otvoríte chladničku, ach, sakra to. Nie je viac mlieka. Tak, on alebo ona tiež ide za rohom. Ale teraz, pretože tam je ako dve alebo tri alebo štyri CVSes blízkosti, oni náhodou zájsť do jednej z rôzne tie na námestí. A tak teraz, pár minút neskôr, obaja prísť domov a fuj, najhoršie problém vôbec. Teraz máte príliš veľa mlieka pretože to bude ísť kyslé. A vy ako mlieko, ale vy nemajú naozaj rád mlieko. Takže teraz, to bol drahý chyba, pretože oba urobil rozhodnutie na základe stav nejaké premenné bol v procese menený vami, iniciátorom dostane mlieko. Takže, čo je možno človek riešenie tohto problému? Divákov: [Nepočuteľné] DAVID Malan: zanechať odkaz, že jo? Vždy nechať odkaz, ak ste zoznámiť s touto show. Áno, sú tam dvaja z nás. Takže, vždy nechať odkaz alebo doslova zámok chladničky s nejakou visiacim zámkom alebo niečo cez vrchol takhle. Ale to v skutočnosti bude Kľúčovým problémom návrhu databázy, najmä keď by ste mohli mať viac prehliadačov, viac notebooky, viac užívateľov všetci snažia aktualizujte informácie naraz. Obzvlášť citlivé informácie rovnako ako finančné informácie, čím sa obchodovanie na burze webové stránky, ako ste vy budete stavať, čo keď chcete skontrolovať, koľko peňazí máte, a potom, ak máte dosť, kúpiť nejaké akcie? Ale čo keď niekto iný, kto má spoločný účet s vami je zároveň snažia kúpiť nejaké akcie? Tak, on alebo ona je zaškrtnutím zostatok na účte, a to ako z vás dostať späť rovnaká odpoveď, nie je mlieko. Alebo vás oboch dostať späť odpoveď, Máte $ 100 na účte. Obaja ste sa snažiť, aby rozhodnutie kúpiť jeden podiel na nejakú spoločnosť sklade. A teraz, čo sa stane? Máte dve akcie? Nemáte žiadne akcie? Problémy, ako je, že môžu nastať. Takže, budeme stretnúť to. SQL injection útoky, našťastie, sú niečo, čo ti pomôže s, ale to sú ukrutne časté v týchto dňoch v pokoji. Tak, toto je len príklad. Robím, že žiadne nároky Systém Harvard PIN je náchylné k tejto konkrétnej útoku. My sme sa snažili. Ale, viete, že my majú polia, ako je tento. A Yaleův Net ID je podobný sa obrazovky v týchto dňoch. A ukázalo sa, že možno Systémový PIN je implementovaný v jazyku PHP. A ak to were-- to ne-- oni môže mať kód, ktorý vyzerá takto. Majú dve premenné. Daj mi užívateľské meno a heslo od Odoslať Super globálne premenné že sme hovorili o skôr. Možno, že Harvard má dotaz ako SELECT hviezda od užívateľov kde username rovná a heslo, ktoré sa rovná. A všimnite si, že som len zapojenie do zásuvky s použitím Kučeravý ortéza zápis z druhého deň, čo znamená, že stačí pripojiť k hodnote sem. Nie som pomocou otáznik technika. Nemám žiadnu sekundu alebo tretí argument. Som doslova konštrukciu reťazec sám. Problémom však je, že ak niekto páči scroob, čo je odkaz na film, prihlási s niečím, ako je toto, a ja som odstránil bodky ktoré obvykle zakryť heslá, čo ak je obzvlášť škodlivý a jeho heslo možno je 12345, na filme s názvom "Spaceballs," ale kriticky Typy A apostrof po piatich, potom doslova slovo alebo v priestore, a potom citovať, koniec citátu jedna rovná sa citovať, ale všimnete, že je vynechaná, čo? On vynechal citát na pravej strane a on vynechal cenovú ponuku na ľavej strane. Pretože ak to útočník scroob je domnienka je to, že ľudia, ktorí písali tento PHP kód tak nebolo jasné, Možno, že jednoducho majú nejaké single cituje okolo interpolácia premenné do zložených zátvoriek? A tak možno, dokázal láskavý z dokončiť svoje myšlienky pre nich, ale takým spôsobom, že sa deje ho nechať nabúral do systému PIN. Inými slovami, predpokladajme, že že sa jedná o kód a my sa teraz pripojiť, čo scroob zadali. A je to červené, pretože je to zlé. A základné znenia je to, čo napísal v, scroob mohla oklamať servera Harvarde do budovania SQL dotazu reťazec, ktorý vyzerá takto. Heslo sa rovná 12345 alebo jeden rovný jednej. Výsledok, ktorý logicky, je, že tento sa prihlási scroob V ak je jeho heslo 12345 alebo ak jedna rovná raz, čo je samozrejme vždy pravdivé, čo znamená, že scroob vždy dostane. A tak, ako opraviť to, ako je v mnohých prípadoch, by bolo písať viac defenzívne. Ak chcete použiť niečo ako naše Skutočná funkcia dotazu, ktorý uvidíte v PSet7, kde sme Plug In niečo ako otázniky tu. A krása Funkcie dotaz, ktorý sme dať, je, že bráni proti nim tzv SQL injection útoky, kde niekto podvádzať kód do vstrekovanie svoj vlastný kód SQL. Pretože to, čo funkcia dotazu dáme vám bude vlastne robiť, ak použijete syntax otáznik a druhý a tretí argument tu, je to, čo sa to pridať do vstup, ktorý užívateľ poskytované? Tí, spätné lomítko cituje. Takže, je to uniká akýkoľvek potenciálne nebezpečné znaky. To teraz vyzerá divne, ale nie je to zraniteľný pretože to nie je zmeniť logiku už pretože to je celé heslo Teraz jediný citát, že to nie je, v skutočnosti, scroob heslo. Takže, tam bolo nejaké vtipy o tom v priebehu rokov. Takže to bola fotografia urobená niektorých poleno na parkovisku kedy by ste mohli vedieť, že niektoré mestá a štáty snažia skenovať licencie doska sa vám alebo lístky účtovať vám Prejdete Ak bez, rovnako ako, vec E-Z priesmyk. Takže, tento človek predpokladal, že možno ľudia písanie systém E-Z pass neboli tak jasné, a možno, že Len spojenie spoločne reťazec, tak, že on alebo ona nemohla zlomyseľne nie len dokončiť ich myslenia, ale v skutočnosti spustiť zlý príkaz, ktoré sme doteraz nie je uvedené, ale asi tušíte. Že okrem odstrániť, a vložiť a aktualizovať a vyberte, tam je tiež kľúčové slovo volal pokles, čo doslova vymaže všetko v databáze, ktorá je obzvlášť zlé. Môžeme sa priblížiť, ak je to trochu ťažké vidieť. To teraz, je slávny karikatúra to je teraz úžasne šikovný a zrozumiteľné. [SMIECH] Jo, v pohode. Druh geeking von. Takže tieto sú teda SQL injection útoky. A oni sú tak jednoduché, vyhnúť použitím správny kód alebo právo knižnice. A uvidíte v PSet7, to je Preto sme vám funkciu dotazu. Takže, pár oriešky že sme si mysleli by sme sa dať tu v našej Zostávajúce minúty dohromady. Takže, ako si pamätáte z týždňa nula, my predstavil tieto dve žiarovky, ktoré sú pekné, nielen preto, že sú to celkom a sú farebné, ale preto, že podporujú niečo volal API, aplikácie, Programming Interface A v CS50 tak ďaleko, máme zameriavajúce sa predovšetkým na GET a POST, ale ukázalo sa, je tu ďalšie akcie protokolu HTTP, ako sú PUT. A v skutočnosti, to bolo snímka z týždňa nula pričom keď píšete kód, ktorý pošle a la PSet6 požiadavku HTTP, ktorý vyzerá to s týmto kusom textu v spodnej časti, ktorá sa nazýva JSON, alebo JavaScript Object Notation že budeme hovoriť o budúci týždeň, môžete zapnúť alebo vypnúť alebo zmeniť farba svetla, ako sú tie. Takže v prípade, CS50 má tiež okrem niektorých z týchto žiaroviek tu v New Haven ak by ste chceli požičať je pre finálnu projekty, aj niektoré Microsoft Kapely, ktoré sú ako hodinky, ktoré budete nosiť okolo zápästia že podobne majú tak, že ste API môžete napísať svoj vlastný softvér pre nich. Máme účet Apple iOS kód tak, že ak máte Apple Watch alebo iPhone alebo iPad alebo iPod, môžete písať kód, ktorý v skutočnosti beží na nich. Máme veľa z Arduinos, ktoré sú malinké počítače bez prípadoch, v podstate, že môžete pripojiť cez USB port, typicky do svojho PC alebo Mac, napísať kód, ktorý beží na tieto fyzické zariadenia, ktoré majú často senzory na nich takže môžete komunikovať s reálnym svetom. Máme veľa z Leap Motion zariadení, ktoré sú USB zariadenia pre Macy a PC, tu a opäť v New Haven. A keď ho pripojíte k počítaču Mac, môžete skutočne ovládať svoj počítač písaním softvér že prostredníctvom infračervených lúčov, zistí, kde sa vaše ľudské ruky, a to aj bez dotyku klávesnice. Mysleli sme, že podeliť rýchly zahliadneme na to, napríklad. [Prehrávanie hudby] Takže, máme celý banda z týchto vecí, Tiež volal Myo rameno kapely ktorý ste dal cez predlaktie a potom môžete kontrolovať skutočný world alebo virtuálny svet, ako je tento. [Prehrávanie hudby] Alebo, máme aj nejaké Google Kartón, ktorý je doslova, ako, lepenková krabica by ste mohli dať na vašom tvár, ale snímku vo vašom telefóne do nej takže si dal pohár vášho telefón naozaj blízko očí. A Google je kartón celkom lacné na $ 10 alebo $. 20 A to má len málo šošovky že mierne mimo smenu obraz na obrazovke vášho človeka oči, aby vám pocit hĺbky takže ste skutočne 3D prostredie pred vami. Máme tiež nejaké Samsung Gear, ktorý je drahšia verzia tohto, ale že môžu kĺzať podobne An Android telefón a dá vám ilúziu of-- alebo dať zážitok virtuálnej reality. A v našich konečných dvoch minút, sme si mysleli, že sme si vyskúšať, ako to urobiť. Keď sa mi podarí premietnuť to, čo má Colton tu len preto, aby povzbudiť chuť k jedlu, nechaj ma ísť dopredu a hádzať up na veľkej obrazovke tu. Dovoľte mi, aby som zabil svetla. Colton, chcete pokračovať a dať na svoje cely na chvíľu a prísť na viac ako na uprostred javiska? A chcete project-- to je to, čo vidí Colton. Teraz, Wi-Fi tu je nie tak silný pre toto zariadenie že to je super presvedčivé, ale Colton je doslova V tomto magickom futuristické mieste. On vidí iba jeden obrázok. Tie sú vidieť jeho ľavej a pravé oko že jeho mozog sa sflikovanou v trojrozmerný prostredie na tvári. Len vybraná možnosť ponuky tu. A tak znovu, má na sebe tieto slúchadlá s telefónom Samsung na to, že je bezdrôtovo vyčnievajúce do našej réžii. Teraz ste na Marse, myslím, že? COLTON: Myslím, že áno. Nie som si istý, [nepočuteľných]. [SMIECH] DAVID Malan: Ukázalo sa, že Mars má týchto ponúk. COLTON: [Nepočuteľné] nejaké chladné miesta, ak chceme ísť to-- DAVID Malan: Kam chceš ísť? COLTON: [Nepočuteľné] DAVID Malan: A poďme sa pozrieť kde Colton sa nám pri teraz. COLTON: [Nepočuteľné] DAVID Malan: Takže, je tu toľko rôznych miestach si môžete vziať sami. Je tu FAPIs, cez ktoré si môžete písať hry alebo interakcie, ktoré beh, v konečnom dôsledku, na telefóne. Takže ste naozaj len písanie telefónne aplikácie mobilný. Ale vďaka softvéru a schopnosti grafika, Teraz Colton je v tomto maličký chata. A na riziko ohromujúci sami, Colton a budem držať okolo pre zatiaľ čo na konci triedy tu dnes ak by ste chceli prísť a hrať. A budeme priviesť späť budúci týždeň rovnako. Bez ďalšieho, ado to je pre dnešok všetko. Uvidíme sa budúci týždeň. [MUSIC - ragga TWINS, "BAD MAN"]