[Přehrávání hudby] DAVID Malan: Dobře, tohle je CS50. To je konec týdne osm. A dnes, začneme vyplnit v některých kusech pokud jde o budovy věci na webu. Takže, připomínají, že v pondělí trávíme mnohem více času na PHP, který je tento dynamický programovací jazyk, který nám umožňuje výstup, mimo jiné věci, HTML a další takový obsah že budeme chtít vidět. Ale my jsme opravdu podíval na to, jak budeme ukládat žádné informace. Ve skutečnosti, téměř nic z toho super zajímavé navštívených webových stránkách dnes mít nějaký druh databáze na zadní konec, že ​​jo? Facebook jistě ukládá velké množství dat o nás všech a prodejen Gmail vše z vašich e-mailů. A tak mnoho dalších stránky nejsou jen statický obsah, který je informativní. Je to vlastně dynamický nějakým způsobem. Ty poskytují vstup, aktualizuje stránky pro ostatní lidi. Získáte zprávy, pošlete zprávy, a tak dále. Takže dnes se podíváme blíže na na pilíři projektu že budete potápět do další týden, CS50 Finance, který se ve skutečnosti bude mít budete stavět něco, co není v C, ale v PHP. Webové stránky, které vypadá Trochu něco takového který umožňuje nakupovat a prodávat zásoby, které jsou ve skutečnosti bude čerpat v reálném čase Fotobanka data z Yahoo Finance. A tak nakonec, budete mít iluze pro sebe a pro uživatele že jste vlastně nákup a prodej zásoby a dostat téměř v reálném čase aktualizace, může spravovat portfolio, z nichž všechny bude vyžadovat s, v konečném důsledku, databáze uživatelů. Takže, vlastními slovy, zvláště pokud si nejste Super obeznámeni s počítačem věda nebo databáze, co víte, databáze, aby právě teď, v netechnických hlediska? Co je to? Jak byste popsal to na spolubydlící nebo přítele? Diváků: [Neslyšitelné] Informace [neslyšitelných] DAVID Malan: Takže, seznam informací, nebo store-- seznam informací které by vás mohly chtít uložit o něčem, jako uživatele. A to, co dělat mají uživatelé spojena s nimi? Jste-li uživatel na Facebooku, nebo Gmail, jaké jsou charakteristiky že všichni z nás mají uživatelé? Stejně jako to, co by mohlo být některé z sloupce v tabulce, na kterou jsme se zmiňoval minule? Vzhledem k tomu znovu, můžete myslíte, že databáze Opravdu jako efektní Excel souboru nebo Google Tabulkový nebo Apple Čísla souboru. Tak, co si myslíš o když si myslíte, že na uživatele? Co mají? Co je to? Diváků: Jméno. DAVID Malan: Název. Takže pokud název, stejně jako, David Malan by být jméno nějakého uživatele. Co ještě uživatel mít? Diváků: ID. DAVID Malan: ID. Takže, stejně jako rodné číslo, jako je vaší Harvard ID nebo vaše Yale Net ID nebo podobně. Co jiného může uživatel mít? Diváků: Password. DAVID Malan: Heslo, možná adresa, možná telefonní číslo, možná e-mailovou adresu. Takže, je tu trsy polí a to by mohla nějak vymkne kontrole Rychle jakmile začnete si uvědomil, oh, pojďme ukládat tento a pojďme ukládat to a to. Ale jak vlastně dělat, že? Takže znovu, duševní Model mít na dnešek, jak jsme ponořit do skutečného SQL, Structured Query Language, je databáze, která vypadá takto. Je to jen řádky a sloupce. A můžete si představit, Google Spreadsheets nebo libovolný počet jiných programů. Ale co je klíčem k MySQL, což je databázový software budeme používat, Volně otevřeně available-- Facebook použití to a libovolný počet dalších websites-- Databáze ukládá věci příbuzensky. A relační databáze prostě znamená, ten, který doslova ukládá data do řádků a sloupců. Je to tak jednoduché, jak to. Takže i něco jako Oracle, které jste možná slyšeli o celkově je relační databáze. A pod kapotou to, ukládá data v řádcích a sloupcích. A Oracle jste si účtuje hodně peněz k tomu, že, vzhledem k tomu, MySQL poplatků jste za stejné nic. Takže, SQL se chystá dát nám alespoň čtyři operace. Možnost vybrat data, jako přečtené Údaje, insert, delete a aktualizovat data. Jinými slovy, to jsou Opravdu čtyři klíčové operace se děje, abychom mohli změnit věci v těchto řádků a sloupců. Nástroj, který budeme používat dnes obzvláště naučit SQL a hrát s ním se opět nazývá PHP MyAdmin. Je to nástroj, založený web. Celkem náhoda, že je to napsaný v PHP. Ale to bude, aby nám grafické uživatelské rozhraní, takže můžeme vlastně vytvoření těchto řádků a sloupců a pak mluvit s nimi prostřednictvím kódu. Takže, pojďme se nyní začínají Myslím si, že to, co je řečeno druh zábavné procesu budování zadní část webových stránek, části, které uživatelé nemají vidět, ale určitě dělat stará o, protože to je to spíše datové děje. Tak, podobně jako C a přidá se trochu méně jako PHP, SQL, nebo databáze, která podporuje SQL, má alespoň tyto datové typy a svazky ostatních. CHAR, VARCHAR, INT, BIGINT, DECIMAL, a DATETIME. A je tu celá spoustu dalších funkcí, ale pojďme to tím, že způsob, jak aktuální příklad. Chystám se jít do CS50 IDE kde, v předstihu, jsem přihlášen a já jsem také navštívil URL pro tento nástroj s názvem PHP MyAdmin. A problém nastavit sedm, budeme vyprávět vám přesně, jak se dostat k tomuto rozhraní také. V levém horním rohu, Všimněte si, že říká, že přednášet. A to právě znamená, že v předstihu, I vytvořil prázdné databáze s názvem přednáška která má v ní žádné tabulky dosud. Neexistuje žádné řádky a sloupce. Protože první věc, kterou budeme dělat je začít vytvářet tabulky že to bude ukládat našim uživatelům. Takže, doslova přes Zde na pravé straně, já jsem ti to říct databáze Chci tabulku s názvem Uživatelé. Tak, to je jako soubor, který jsem chcete uložit všechny své dat. A kolik sloupců? Dobře, pojďme držet to jednoduché pro teď. Já jen chci, aby uložit jako když uživatelské jméno a název pro uživatele. Budeme začít v malém. Takže, chci dva sloupce celkem. A já jdu dál a klepněte na tlačítko Přejít. A pak, pro tyto sloupy, co budu k do-- pokud tento internet cooperates-- v pořádku, takže budeme se snažit, aby to znovu. Chystám se vytvořit tabulku s názvem Uživatelé s dvou sloupců, klepněte na tlačítko Go, na tlačítko OK. Nyní máme to opravdu rychle. Děkuji, velmi dobře udělal. Dobře, takže to, co chceme Tyto sloupce se jmenuje? Tak, jeden se bude jmenovat Uživatelské jméno. Tak, vidím here-- a rozhraní Upřímně řečeno je trochu ošklivá nakonec, Jakmile začnete psát do všech těchto údajů. Ale to, co je příjemné je, že druh paradoxně, jsem vytváření sloupců, ale nástroj má pošetile položili ty věci v řadách takže mohu nastavit tyto sloupce. Takže, je tu dvě prázdná místa tam pod jménem. A jeden z těchto oborů I Chcete volal jméno, a jiné oblasti chci volat jméno. A teď mám na výběr datové typy pro tyto věci. Takže, zatímco v Excelu a Google Spreadsheets, pokud chcete sloupec, můžete doslova stačí zadat název nebo jméno, stiskněte klávesu Enter. Možná jste to tučné obličej, aby Jen pro přehlednost, ale to je vše. Nemusíte specifikovat typy sloupců. Nyní v Google Spreadsheets nebo Excel, může určit, jak jsou data vykreslen. Dalo by se jít do menu Formát, a vy Můžete zadat ukažte tento jako znak dolaru, ukázat to jako plovoucí bodovou hodnotou. Takže, je to podobné duchem že to, co se chystáme udělat, ale toto je ve skutečnosti bude nutit údaje, které mají být určitý typ. Nyní, i když před chvílí jsem řekl, že je to jen pár datové typy, tam je vlastně mnohem, a jsou to v různém stupni specifičnosti. A jak stranou, vy Můžete dokonce dělat maškarní věci jako skladovací geometrie uvnitř databáze. Můžete ukládat věci jako je GPS souřadnice a skutečně najít, matematicky, body, které jsou v blízkosti jiné. Ale budeme zachovat to super jednoduché a jít až na tu, všichni tzv typy řetězec. Takže, tady je seznam celá řada možností. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. A je to docela ohromující. A bohužel, poněkud paradoxně až C, CHAR není opravdu CHAR. Zadáte-li v databázi že vaše data typ je CHAR, to znamená, že ano, je to CHAR, ale je to jeden nebo více znaků. A musíte zadat jak mnoho připálí chcete. Takže, co je typický délka uživatelské jméno? Existuje nějaký limit obvykle? Diváků: [Neslyšitelné] DAVID Malan: 16 možná? Něco takového. Víte, zpět v den, to bylo osm. Někdy je to 16, někdy je to ještě víc než to. A tak to není znamenat, dej mi jednu CHAR. To znamená, že musím upřesnit délka pole, a teď bych mohl říci něco jako 16 let. A je tu kompromis tady. Takže, uvidíme za chvíli že to znamená, že jeden, každý uživatel musí být 16 znaků. Ale počkejte chvíli, M-A-L-A-N. Jestli je to mé jméno a já jsem pouze s využitím pěti, co byste navrhnout, aby databáze udělat pro dalších 11 znaků, které Já jsem vyhrazen prostor pro? Co bys dělal? Diváků: [Neslyšitelné] DAVID Malan: Jo, aby je všichni null. Udělat jim prostor. Ale pravděpodobně null, takže Hodně zpětné lomítko nul. Tak, na jedné straně, máme Nyní se ujistit, že se moje uživatelské jméno může být více než 16 znaků. A odvrácenou stranou, která je že kdybych měl opravdu dlouhý název nebo chtěl opravdu dlouhá uživatelské jméno, jako někteří z vás kluci mohou mít v této vysoké škole, nebo na Yale.edu, nemůžete mít jeden. A tak ve skutečnosti, pokud jste někdy zapsána pro webové stránky a dostanete zařval na rčení Vaše heslo je příliš dlouhá nebo vaše uživatelské jméno je příliš dlouhá, je to jednoduše proto, že programátor, když konfiguraci jeho nebo její databáze, rozhodl, že toto pole bude být delší než tato délka. Dobře, tak co když budeme pokračovat pojmenovat? Jak dlouho by měl Jméno typického lidského to být? Jak mnoho znaků, 16? Hádám, že bychom mohli najít někoho v této místnosti kde jeho nebo její první Plus poslední název je delší než 16 znaků. Takže, co je lepší, než to, že 17? 18? 25? Větší? 30? Diváků: [Neslyšitelné] DAVID Malan: 5000, ach můj bože. Tak, to je asi slušný horní hranici, řekněme. A tady jsme trochu se provést úsudek volání. Stejně jako neexistuje správná odpověď zde. Infinite není dost dobře možné, proto, že jsme se nakonec bude have-- jsme chystá spustit z paměti. Takže musíme udělat úsudku v určitém okamžiku. Velmi časté by, například, na use-- a dovolte mi upřesnit CHAR zde jak before-- 255 byl doslovně Horní mez tohoto databázový software před lety. A tak, spousta lidí by jen říct, fajn. 255 je limit. Pojďme se jen využít maximum. A to je docela směšné. Stejně jako v případě píšete je někdo jmenovat 200 plus znaky, to trochu směšné. Ale pamatujte, že ASCII není jediný systém pro znaky. A tak, a to zejména v Mnoho asijských jazyků tam, kde je znaky nemůžeme vyjádřit na klávesnicích, jako je můj USA klávesnice, některé charaktery vlastně trvat až 16 bitů namísto osmi bitů. A tak, to vlastně není všechno, že nepřiměřená že potřebujeme více space pokud chceme, aby se vešly větší postavy, než samotné USA centric ty jsme tendenci diskutovat. Takže, potřebujeme nějaký horní mez. Já nevím, co je nejlepší z nich je, 255, ale je obecně obyčejný. 25. cítí nízká. 16, 32 cítit nízká. Chtěl bych chybovat na straně něco vyšší. Ale je tu kompromis, jako vždy. Co je možná zřejmé, kompromis vyhradit 255 znaků pro jméno každého v mé databáze? Diváků: [Neslyšitelné] DAVID Malan: Co je to? Diváků: [Neslyšitelné] DAVID Malan: Je to hodně paměti, že jo? M-A-L-A-N. Právě jsem promarnil 250 znaky jen uložit mé jméno obránci jen v případě, že někdo ve třídě má opravdu dlouhý název. To se jeví jako nepřiměřené kompromisu. Tak to dopadá, SQL, Tato databáze jazyk, ve skutečnosti podporuje něco, volal VARCHAR, nebo Variable CHAR. A to je docela hezké, že tento umožňuje zadat není pevná šířka, ale spíše, proměnná šířka. A konkrétněji, je maximální šířka pole. Takže, to znamená, že může název být větší než 250 znaků, ale to může být určitě méně. A databáze bude chytrý. Pokud se dát do M-A-L-A-N, je to jen bude používat pět, možná šest bytů pro podobné vlečená znak null, a ne trávit další 249 nebo 250 bajtů zbytečně. Takže to vypadá, jako bych měl začali s tímto příběhem. Ale je tu vždy kompromis. Tak, na jedné straně, uživatelské jméno jsem uvedeno, že se pevný kódované na 16, a možná, že to není pravá výzva, možná ji je, ale proč nepoužít VARCHARs za všechno? To existuje z nějakého důvodu. Proč nevyužít VARCHARs pro každý obor jehož délka nevíte předem když se zdá, že je to skvělá věc, ne? Používejte pouze tolik prostoru, kolik musíte do tohoto limitu? Diváků: Pomalejší. DAVID Malan: Kontrola pravopisu? Diváků: Dělá to pomalejší? DAVID Malan: Oh, to je pomalejší. Dobře, to je téměř vždy odpověď, upřímně. Stejně jako to, co je to kompromis? Je to buď stojí více místa nebo to stojí více času. Takže v tomto případě, může být pomalejší. Proč? Diváků: [Neslyšitelné] stanovení [neslyšitelný]. DAVID Malan: Dobrý. Takže, možná si vzpomenete i od PSED5, hrát se svým přístupem do slovníku, pokud máte vyhradit paměť dynamicky nebo zachovat pěstování vyrovnávací paměť, která může být ve skutečnosti pomalé. Máte-li volat malloc pod pokličku a možná to je to, co MySQL dělá, tak jistě, že by mohl být případ. A pokud si myslíte, cesta zpět na PSet-- nebo dokonce dva týdny, když jsme udělali věci, jako je binární vyhledávání, nebo dokonce lineární vyhledávání, jedna z pěkné věci o každé slovo v databázi nebo každé slovo ve sloupci je přesně stejnou délku, a to i v případě, že celá řada těchto znaků jsou prázdné, je, že můžete použít s přímým přístupem na vaše data, ne? Pokud víte, že každý Slovo je 16 znaků pryč, můžete použít ukazatel aritmetiku, tak aby mluvit, a jít k nám 16, 32, 48, 64, a vy můžete jen skok okamžitě pomocí aritmetiku na některou ze slov v databázi. Vzhledem k tomu, jestli je to VARCHAR, co si místo toho musíte udělat? [Telefon vyzvání] Pokud se jedná o VARCHAR, vy nelze použít náhodný přístup. Co budete muset hledat nebo dělat? To jo? Diváků: [Neslyšitelné] DAVID Malan: Podívejte se přes whole-- stopy celý seznam hledá na co, s největší pravděpodobností? Jaké zvláštní hodnoty? Diváků: [Neslyšitelné] DAVID Malan: Hledám pro null terminátorů které vymezují oddělení slov. Takže znovu, kompromis, a neexistuje správná odpověď. Ale to je místo, kde, zvláště když vaši uživatelé si, že je mnoho a váš náklad na svých serverů, Počet lidí, kteří používají to bude vysoká, jedná se vlastně netriviální rozhodnutí. Takže, můžeme nechat tyto jako to, ale pojďme přejděte dolů přes doprava sem. Nyní, tam je několik sloupců kde musíme udělat úsudek volání. Má smysl povolit uživatele jméno, uživatelské jméno uživatele, nebo uživatele jméno, být null? To znamená, že jen prázdný. Pocit trochu nesmyslné, takže jsem nebude kontrolovat těchto boxů. Ale ukazuje se, v databázi, můžete říci, někdo může volitelně mít tuto hodnotu. Tento sloupec nemá k vlastně být tam. Nyní, tam je to rozbalovacího menu. A všimněte si, že jsem pořád tam první řadě, takže Mluvím o uživatelské jméno teď. A ukázalo se, že v databázi, na rozdíl od jednoduchého pouhé tabulky, má výkonné funkce zvané indexy. A index je způsob vyprávění Databáze předem, že já, lidského jsem chytřejší než ty. Vím, jaké druhy dotazů, vyberte nebo vložit nebo odstranit, nebo aktualizovat, že můj kód skončí up dělá v této databázi. Chci si přečíst velké množství dat. Chci vložit velké množství dat. Chci se neustále odstranit velké množství dat. Pokud já vím, že já budu přístup pole jako uživatelské jméno a hodně, Můžu říct, preventivně databáze, vím víc než vy, a já chci, aby vyhlášky měli byste index toto pole. V případě, indexování pole nebo sloupce znamená, že databáze předem by měla půjčit nějaké nápady z, stejně jako, čtyři týden a pět a šest z CS50 a vlastně vybudovat něco jako binární vyhledávání strom nebo něco obecně nazývá B strom že byste se naučit, ve třídě, jako CS124 na Harvardu je třída algoritmy, nebo libovolný počet dalších místech. Databáze a inteligentní Lidé, kteří ji realizované se přijít na to, jak uložit že tabulka informací v paměti tak, že vyhledávání a ostatní operace jsou velmi rychlé. Nemusíte to dělat. Nemusíte realizovat lineární vyhledávání nebo binární vyhledávání nebo sloučit druh nebo výběr druh, nic z toho. Databáze to udělá za vás, pokud řeknete to preventivně index toto pole. A můžete vidět taky, je tu některé jiné charakteristiky můžeme říci, databáze prosadit. Co by mohlo to znamená, když vybrat Unique z tohoto menu, jen intuitivně? To jo? Diváků: [Neslyšitelné] DAVID Malan: Jo, ten uživatelské jméno musí být unikátní. Je to dobrá věc, nebo špatná věc pro databáze, pro webové stránky s uživateli? Měl by být unikátní uživatelská jména? Jo, pravděpodobně. Pokud to je to, co pole používáme k přihlášení, nemáte opravdu chcete lidí, kteří mají stejný pocit nebo stejné uživatelské jméno. Takže můžeme mít Databáze prosadit, že tak že nyní v mém PHP kódu nebo jakéhokoli jazyka, Já nemusím, například, zkontrolujte nutně dělá toto uživatelské jméno existovat předtím, než jsem nechat někoho registrovat? Databáze nenechá dva lidé s názvem David nebo Malans registrovat v tomto případě. A jako stranou, ačkoli toto Menu pouze umožňuje vybrat jeden, jedinečný index je ten, který je indexovány za super rychlý výkon, ale také vynucuje jedinečnost. A vrátíme se na to, co Další dva na mysli jen na chvíli. Mezitím, když půjdu do Můj druhý řádek, který je uživatelské jméno, měl bych upřesnit že název by měl být jedinečný? Ne, protože byste mohli určitě have-- není dvěma David Malans v této místnosti, s největší pravděpodobností. Ale pokud se zvolit jiný název, bychom mohli jistě mít kolize. Vzpomeňte si na hash tabulky a podobně. Takže jsme určitě nechceme aby se název pole jedinečný. Takže, jsme jen tak odejít že jako pomlčka, pomlčka, pomlčka, nic. A já neodejdu všechno ostatní sám. Ve skutečnosti většina z těchto polí nebudeme muset starat o. A když jsem připraven zachránit to, v případě, že internet spolupracuje, I klepněte na tlačítko Uložit, a velmi, velmi, velmi Pomalu se databáze spasen. A teď jsem zpátky k tomu rozhraní, které sice, je ohromující na první pohled. Ale všechno, co budu dělat, je kliknout na slovo Uživatelé vlevo nahoře. Chystám se jít sem, klikněte na tlačítko Uživatelé, a ve výchozím nastavení, je popravil nějakou SQL, ale více o tom za chvíli. Zde je jen souhrn toho, co jsem udělal. A ne se bát, že vidíte zmínit latiny a švédštině zde. To jsou jen výchozí nastavení, protože MySQL původně, nebo PHP MyAdmin, jeden z nich se stalo být napsán některými švédskými lidí. Ale je to irelevantní, v našem případě zde. Dobře, tak proč je to zajímavé? Ukázalo se, že mohu vložit data do databáze od psaní kódu. A já jsem do toho pusťte a v mém souboru tady, já jsem jít dál a předstírat, toto je zapojen do této databáze, která to není v tuto chvíli, ale bude být, když se dostaneme do problémů nastavit sedm. A já jdu dál a vykonávat funkci nazvanou dotaz, které dáme vás problém nastavit Sedmá distribuce kód, který trvá nejméně jeden argument, což je jen řetězec. Řetězec SQL kódu. Takže, vy jste o tom naučit se napsat Structured Query Language. Chci-li vložit nový řádek do mého Databáze proto, že někdo podal forma na mém kódu, udělal bych to doslova napsat INSERT INTO uživatelů následující pole: username, čárka, název, hodnoty, a teď musím vložit něco jako Malan a citací, konec citátu "David Malan." A nyní a to i pro ty neobeznámený s SQL, proč jsem s použitím jednoduchých uvozovek uvnitř této zelené řetězce? Co se tady může být důvod? Všimněte si, že jsem co-mísit dva jazyky. Dotaz je funkce PHP, ale to trvá argument. A že tento argument musí být samo o sobě napsaný v jiném jazyce zvaném SQL, Structured Query Language. Takže všechno, co jsem se tu právě zvýrazněny je tento jazyk nazývá SQL. Takže, co je s jednoduchých uvozovkách, stejně jako rychlou kontrolu sanitačního? Pokračuj. Jsou řetězce. Takže, cituji, konec citátu Malan a citovat, konec citátu David Malan jsou řetězce. A jen přemýšlet intuitivně teď, věděl, co víte o C a PHP, Proč jsem to neudělal, což jsem většinou ojeté uvozovky pro smyčce? Proč jsem nechtěl dělat, že? To jo? Diváků: [Neslyšitelné] DAVID Malan: Přesně tak. Protože už jsem s použitím dvojité uvozovky na cestě mimo argumentu do funkce PHP, Jen bych zmást tlumočníka. Nebude vědět, že to jde dohromady? Nikdy to jde dohromady? Nikdy to jde dohromady? Tak jsem střídat místo. Nebo bych mohl udělat něco takového, zpětné lomítko citát nebo zpětné lomítko citát. Upřímně řečeno, že právě začíná dostat velmi nečitelné a ošklivé. Ale to by dosáhl stejného výsledku stejně. Takže, kdybych spustit tento dotaz teď, pojďme se podívat, co se stane. Chystám se jít dopředu a hned spíše než spustit PHP kód, který je místo, kde budete hrát v problému set sedm, Chystám se místo toho jít do PHP MyAdmin. A já jsem se ručně jít na kartu SQL, a dovolte mi, abych přiblížit na rozhraní. A já vložit do ta věc jsem napsal. A barevné kódování má změnil trochu teď, jen proto, že programové formáty věci trochu jinak. Ale všimněte si, že všechno, co jsem udělal je, že jsem řekl, vložte do uživatele. Já jsem je uvedeno, pak v čárkou oddělený závorkách seznam dva Pole, které chci vložit, a Pak jsem se doslova řekl hodnoty následovala další závorka, a pak se tyto dvě hodnoty Chci, aby plug-in, a Nyní na správnou míru, Dám středník na konci. Tak, to není C. To není PHP. To je nyní SQL, a já jsem ho vložit do tohoto webového rozhraní, která je Jen mě nech, jakmile jsem na tlačítko Přejít, provedení tohoto dotazu v databázi běžící uvnitř CS50 IDE. Tak to je dobré. Všimněte si, že řekl jeden řádek vloženo, šel super rychlý, 0,0054 sekund vložit tato data. Tak, to zní docela zdravé. To reformatted můj dotaz pro mě tu jen proto, aby to vidět v jakési barevné kódované verze. Ale teď, když kliknu Procházet, Všimněte si, že i i když je tu spousta nepořádku na obrazovka, můj stůl má nyní dva řádky. Takže, nech mě jít dál a dělat jinou. Místo toho, dovolte mi, abych přejděte na záložku SQL znovu. A tentokrát budu vložit něco jako Rob a jeho jméno bude Rob Bowden. Bowden. Pojďme na tlačítko Uložit. Jejda, spíše Go. Znovu klepněte na tlačítko Procházet a Všimněte si, teď mám dva řádky. Takže, je to jen způsob, jak složitější způsob otevírání Google Spreadsheets a jen psát řádek do sloupce. Ale co je klíč je, že máme nyní syntaxe s níž psát kód tak, aby nakonec, mohli jsme vlastně udělat nějaké to a. Připomeňme si, že PHP podporuje Super globální proměnné. To, co je uvnitř dolaru přihlásit podtržení GET v PHP? Vzali jsme se podívat na jeden nebo dva jednoduché příklady. A v PSet6, vzpomínám máte ahoj dot PHP, který používá tuto proměnnou. Co se děje tam? Nebo co je to? Trochu hlasitěji. Diváků: [Neslyšitelné] DAVID Malan: Je to sníh semeno z pole, což je jen fantazie způsob, jak říkat matice, která má klíče a hodnoty. A klíče nejsou číselné. Jsou to slova nebo řetězce. A konkrétně, co jsou ty páry klíč hodnota? Odkud pochází? Litovat? Diváků: [Neslyšitelné] DAVID Malan: Ne? Kam ty klíče párů hodnota pochází? Opakujte? Už zase? Jsem jediný, kdo něco sluch? [SMÍCH] To je v pořádku, ano? Diváků: [Neslyšitelné] DAVID Malan: Jo, pocházejí z řetězce dotazu. Takže, pokud jste vzad v čase když jsme hráli s pomocí Google a my jsme šli do Google.com lomítko Hledání otazník q rovná kočky, kdybych stiskněte klávesu Enter, a pokud Google byly realizovány v PHP, PHP kód, který Google napsal by měla přístup k dolaru podtrhnout dovnitř, z nichž je klíčovým nazývá Q a hodnota tzv kočky, které to může pak použít dělával aktuální vyhledávání s. Takže ve skutečnosti to, co budu udělat, je jít zpátky do svého PHP kód že budete zase vidět víc v PSet7. A místo ucpávání v tvrdých kódovaných hodnoty, které nezdá se jako velmi dynamický web, Chystám se vám ukázku z co váš skutečný kód bude dělat. Ty by se dal ve dvou otazníky takhle. Já nevím, co je uživatelské jméno. Já nevím, co se Název bude, ale já vím, že můžu si je dynamicky. Takže, pokud kód jsme teď Psaní je kód běží na serverech Google, nebo je-li to ahoj tečka PHP, který je dodáván s PSet6, Chystám se projít do Funkce dotaz stejně jako printf, dva další argumenty. GET, cituji, konec citátu uživatelské jméno, a GET, cituji, konec citátu jméno. A teď, co si všimnete obecná struktura je tady. Mám na levé straně straně hovoru, Tato funkce s názvem dotazu v PHP. Stále mám jako první Argument, jen řetězec textu. Ale to řetězec textu napsaný v jazyce s názvem SQL. A upřímně řečeno, není to velký jazyk. Jsme jen mluvit o formálně dnes, opravdu. A pak se v problému set sedm, tam je poměrně Několik funkcí, které jsme jít využít. Otazníky však znamenat zapojte je hodnota, tady a plug-in jinou hodnotu sem. A upozornění, já jsem vynechal, co z celého quote-- zatraceně to-- kolem citaci označí tentokrát. Já jsem vynechal citát značky kolem otazník, Omlouvám se, tentokrát. Takže, co je hezké o tom Otázka funkce ochranná známka, která PHP má tendenci podporovat, Ruby a Python a jiné jazyky, to jen znamená, že konektor v některých Hodnota zde a víte, co? Můžete přijít na to, zda se má používat jednoduché uvozovky nebo dvojité uvozovky. Neobtěžujte mě s těmi, intelektuálně nezajímavé detaily. Ale ujistěte se, že je správné takže můj kód je nakonec funkční a bezpečné, což bude mít význam zanedlouho. A teď, kolik celkem argumenty, jen proto, aby být jasné, je dotaz funkce přijímání? Každý, kdo chtějí hlasovat pro více než dva? Tři? Jistě, proč? Proč tři? Diváků: [Neslyšitelné] DAVID Malan: Přesně tak. První část je řetězec. Druhý argument je znak dolaru podtrhnout GET držáku uživatelské jméno. A třetí argument je to samé, ale jen jméno. Takže jinými slovy, nyní kdybych měl webový formulář že musel textových polí, jeden pro uživatelské jméno uživatele, jeden pro jeho nebo její jméno, jen jako byste vidět na internetových stránkách při registraci některé webové stránky, může to bude kód na zadním konci, který vlastně dělá vložení nyní do databáze. Nyní naopak, pojďme rychle dopředu. Předpokládejme, že uživatel je nyní přihlášení a chcete psát PHP kód, který kontroluje, zda osoba, která je právě přihlášen je vlastně uživatel, můžete používat docela jednoduchou syntaxi. Můžete říci SELECT, řekněme Star, kde hvězda znamená všechno. Nevím, co mám chceš, tak dej mi všechny sloupce z tabulky volal uživatelé kde, a to je pěkné. Zvolte podporuje to, co je volal predikát, který je jako způsob, jak kvalifikaci, co chcete. Tam, kde uživatelské jméno odpovídá citát, konec citátu Malan. Takže i zde, jsem vložený uvnitř argumentu na funkci PHP, řádku kódu SQL. A že tento kód SQL čas je doslova děje hledat citaci, konec citátu Malan. Teď to není všechno, že užitečné, takže budu přeskočit, že a já hodlám dát pryč Tento tip od Brady, a jít a místo toho plug-in otazník zde. Takže, jen aby bylo jasno, co by můj druhý argument, bude-li někdo právě přihlášen a I chcete zkontrolovat, zda on nebo ona je ve skutečnosti uživatel? Diváků: [Neslyšitelné] DAVID Malan: Jo. Slyšel jsem, že znak dolaru podtržení Si nabidku, konec citátu uživatelské jméno. A to by měl vrátit ke mně některý z řádků ve své databázi které mají uživatelské jméno Malan. Nyní doufejme, budu se dostat zpět nula, pokud Malan je tady nikdy nebyl, nebo jeden když má. Neměla bych se vrátit dva nebo tři nebo čtyři. Proč? Diváků: [Neslyšitelné] DAVID Malan: Řekl jsem unikátní, že jo? Jednoduchý důvod. Protože jsem řekl, že to musí být jedinečný, právě logicky, můžete mít pouze žádný nebo jeden Malans v tomto konkrétním tabulce databáze. Nyní jako stranou, jen aby jste viděli to, i když jsem stále používat GET a přestože používá pouze PSet6 GET, můžete samozřejmě mít POST. A připomínají, že příspěvek je jiný technika pro předávání informací z formuláře, ale nezobrazuje v URL. Je to trochu bezpečnější jistě pro věci jako uživatelská jména a hesla, které PSet7 bude ve skutečnosti, zahrnují. Takže, pojďme to udělat v PHP MyAdmin a uvidíme, co se stane. Chystám se jít na záložku MySQL. A všimněte si, že výchozí hodnotu pro PHP MyAdmin, jen aby se snaží být užitečný, je vybrat hvězdičku od uživatelů, kde jedna. No, jeden je vždy pravdivý, tak To má hloupé efektivní ze jen vybrat všechno. Ale já budu trochu více pedantský a ručně zadejte out SELECT hvězdu od uživatelů. Teď technicky, můžete citovat jména tabulek. Je to vzácné, že je to nutné, nevšimnout tyto nejsou Vaše normální citáty na klávesnici USA. Jedná se o tzv backtick, který je obvykle na horní levé ruce rohu klávesnice. Ale to je vzácné, že budete skutečně potřebují obtěžovat s tím, tak jsem si jen vynechat je tak jako tak. Takže teď, nech mě jít napřed a hit jít. A kolik řádků bych měl dostat zpět, když jsem se vybrat hvězdičku od uživatelů? Diváků: [Neslyšitelné] DAVID Malan: počet řádků, jistě. Ale kolik v tomto beton příběh právě teď? Za druhé, protože tam byl já a tam byl Rob. Takže, když jsem klepněte na tlačítko Přejít, vidím, že vizuálně Jsem se dostal zpátky, opravdu, dva řádky. Je tu spousta nepořádku na obrazovka, ale vidím jen dvě řádky. Naproti tomu, když jsem to znovu a dělat SELECT hvězda od uživatelů, kde jméno_uživatele rovná citace konec citátu Malan, teď když jsem na tlačítko Přejít, Já jsem jen se vrátit jeden řádek. A konečně, když to udělám něco takového, předpokládám že nemám starat o dostat všechno, což je tak trochu smysl teď, protože tam je jen dva sloupce. Není to, jako jsem výběru obrovské množství dat. Dejme tomu, že jsem se do toho pusťte a se SELECT jméno FROM Uživatelé, kde username rovná Malan, co je hezké o SQL upřímně, je, že to opravdu jen dělá co jste to říct dělat. Je to docela stručně, ale doslova jen říct, že to, co chcete dělat. Vyberte název od uživatelů případně uživatelské jméno rovná Malan. A opravdu je to tak jasné. Tak, teď, když jsem trefil Go, kolik řádky jsem se dostat zpátky? Za prvé, protože je to jen Malan, doufejme. Nebo nula v případě, že to není tam, ale maximálně. A kolik sloupců dostanu zpátky? Kolik sloupců? Tentokrát, já jsem prostě jít aby si jeden, protože jsem neměl vyberte hvězdu, což je všechno. Teď jsem jen vyberete jméno, takže jsem jen dostat zpět jeden sloupec a jeden řádek. A vypadá to tak nějak vhodně směšné, jen při pohledu výborný malá takhle. Takže, co se skutečně děje? Po spuštění SQL dotaz pomocí select, co jste se dostal zpět z databáze je jako dočasné tabulky s řádky a sloupce, možná, ale že vynechat nic, co by nebyl vlastně zvolen vámi. Takže, je to jako kdyby někdo měl velký tabulku všech studentů registrované pro některé Skupina studentů, a vy říkáte, dej mi všechny nováček, kteří si registrovány pro naši studentská skupina, co váš kolega v Skupina studentů by mohl dělat je mohli jen předat jste celý tabulky. To je jako říkat vyberte hvězdu. A je to trochu nepříjemné, pokud jste chtěl pouze prváku. A tak, když se místo toho řekl: vyberte hvězda z databázové tabulky kde rok rovná citát, konec citátu prvák, je to jako kdyby váš přítel ve studentské skupiny doslova zvýrazní a kopírovat pouze prvák řádky, vložit je do nového Googlu Tabulkový nebo soubor aplikace Excel, a podal uhodnete Výsledný jediný soubor. To je vše, co se děje Na koncepčně zde. Takže nakonec, můžeme to udělat některé docela efektní věci skladováním, jako jsou uživatelská jména věcí a hesla a podobně. Ale, to dopadá, budeme dělat trochu jinak, než je tato. To neznamená, že chytré pouze uložit uživatelské jméno a heslo. Někdo dříve, myslím, tady, navrhl ID. Nyní ID by mohlo být jako Harvard ID nebo Yaleův Net ID, ale může to být i jednodušší v naší databázi případě. A opravdu, běžný případ je mít další sloupec. A já jdu vpřed a upravit tabulku. A pokud budete hrát si s toto rozhraní pro PSet7, uvidíte, že můžete zkontrolovat toto tlačítko tady a přidat pole na začátku tabulky. A teď, když jsem klepněte na tlačítko Přejít, bude to aby mi dal jeden z těch forem z dřívějška. Chystám se přidat pole s názvem ID. A já, aby to číselný typ. Mám spoustu hodnot pro numerics. Já jsem prostě jít vybrat INT a nemusíte starat o různorodých velikostí. Nemám specifikovat délka nebo hodnotu, protože to bude 32 bitů bez ohledu na to, co. Atributy, jsme neviděli předtím. Veškeré úroky v některé z těchto Možnosti nabídky této době? Pro INT? Co navrhujete? Ne? Proveďte libovolný z nich smysl? To jo. Jo, nepodepsané, že jo? Obecně platí, že pokud budeme dávat všichni jedinečné číslo, které je místo, kde tento příběh je děje, jsem se opravdu jen chci osobu mít číslo jako nula a jedna a dvě a tři a čtyři. Nepotřebuji se zabývat se zápornými čísly. Prostě to vypadá jako zbytečného složitosti. Chci čtyři miliardy možných hodnot, ne čtyři miliardy možných hodnot, tak jsem zdvojnásobil Kapacita mého INT. Jako stranou, pokud chcete, aby se týkají to něco jako Facebook, zpět do jakési můj den, kdy Facebook vyšel první, Věřím, že to, co oni byli použití v jejich databázi MySQL pro uložení uživatele identifikátor, byl jen INT. Ale samozřejmě, je tu spousta reálných lidí na světě. Je tu spousta falešných Facebook účtů ve světě. A tak nakonec, Facebook přetekl velikost INT, čtyři miliard hodnotu. Což je důvod, proč, když se podíváte kolem a je tu webové stránky který vám poradí, jaké jedinečné identifikační číslo je. A pokud jste nikdy zvolili uživatelské jméno Facebook, uvidíte jedinečný identifikátor. Myslím, že je profil tečka PHP otazník ID rovná něco. To je dnes něco jako velký INT, nebo dlouho dlouho chcete-li, což je 64-bitová hodnota nebo něco srovnatelné. Takže i v reálném světě se tyto Problémy nakonec někdy nezáleží. A ukázalo se tady, když jsem dávat všechny mé uživatelům jedinečné ID, Chci být super explicitní a minimálně, aby toto pole jedinečný. Ale ukazuje se, je tu ještě jedna kus nomenklatury i dnes to je primární klíč. Pokud jste navrhování databáze stůl a předem víte, že jeden ze sloupců v této tabulce měl a bude jednoznačně identifikují řádky v tabulce, které chcete zadejte jej a říci databázi, toto je můj primární klíč. Tam by mohlo být duplikáty v jiných oblastech, ale já vám říkám, že tato databáze je můj primární, můj nejdůležitější oblastí, že je zaručena jedinečnost. Teď se to zdá nadbytečný. Já jsem nyní navrhuje, že bychom přidat, klepnutím na tlačítko Uložit tady, pole called-- a jdu jít do toho a klikněte na AI, vrátíme do že ve chvíli, zachránit. Já jsem teď, že navrhuje můj stůl vypadat takto. Mám INT pole s názvem ID, CHAR pole s názvem Uživatelské jméno, VARCHAR pole s názvem Name, ale ID, pokud je to primární a proto jedinečný, proč jsem jen odpad Doba zavedení co účinně je druhý jedinečný pole s názvem ID to je INT? Uživatelské jméno, odvolání, byl Již jedinečná, řekli jsme. Takže jen logicky, nemusíte žádné databázi zkušenosti k rozumu přes to, proč Možná jsem si představil INT jako můj jedinečný identifikační kód, stejně? Co je tohle-- zase říkají? Diváků: [Neslyšitelné] DAVID Malan: Náhodný přístup je jednodušší, proč? Diváků: [Neslyšitelné] DAVID Malan: Jo, to je Jen přístup čísla. Takže, pokud si myslíte, že to opravdu je tabulka, jako je pole, teď mám jedinečné identifikátory že mohu skákat kolem. A lepší než dosud, je, že jak velký je INT bude znovu? 32 bitů nebo čtyři byty. Jak velká je moje uživatelské jméno bude? Maximálně? 16 bytů. Takže, pokud jste opravdu starat o výkon vašeho kódu, Vzpomeňte si na PSet5, dáváte přednost hledat čtyři bajt hodnoty nebo 16 byte hodnota, je to tak? Je to opravdu tak jednoduché. Co musíte udělat, čtyřikrát tolik práce vyhledat uživatelská jména, protože ti, 16 bajtů. Takže, budete muset doslova porovnat všech 16 bajtů být jisti, že ano, je to uživatelské jméno chci. Zatímco pro INT, můžete to se jen čtyři byty. A jak stranou pro ty, zájem počítačového hardware, to dopadá se vejde něco jako INT nebo 32-bitová hodnota v něčem volal registr v počítači CPU, což znamená, že je super, super rychlý, i při nejnižších Úroveň hardwaru počítače. Takže, je tu jen výhody všude kolem. Takže, co to znamená? Ve skutečnosti, když jste navrhování databázové tabulky, téměř po celou dobu budete mít ne pouze data vám záleží, ale také něco jako jedinečný identifikátor protože to bude pojďme dělat jiné věci. A pojďme zakopnout jeden problém zde. Předpokládejme, že uživatelé nemají jen uživatelská jména a názvy, ale mají také věci jako měst a státy a poštovní směrovací čísla, přinejmenším tady v USA. Takže budu pokračovat a jen rychle říct, dej mi tři více sloupců na konci tabulky. A to bude City, to bude stát, a to bude Zip. Nyní město, jaké typy dat by to mělo být, snad? VARCHAR? Já nevím, co se Nejdelší název města. Někde v Americe, tam je pravděpodobně nějaký směšně dlouhé slovo, takže pojďme prostě jít s 255, poněkud historicky nebo se mohou libovolně. Stát, co chcete dělat? Rozsudek volání, že jo? Co je možná nejúčinnější? Kolik znaků? Možná jen dva, pokud můžeme dostat pryč s tím jen, jako je, MA Massachusetts, a tak dále. Takže, já jdu char hodnotu dva. PSČ to zajímavý člověk. Jsme tady na 02138, takže navrhuje, bychom měli používat co? Je to INT, že jo? INT, INT, krátké? Krátká bude fungovat. Ne? CHAR nebo pět, ale Chci INT. Proč zatlačte na INT? Přesvědčit mě z toho. Co je to hloupé asi INT, můj nápad? To jo. Diváků: zabírá v paměti více. DAVID Malan: zabírá v paměti více. Čtyři bajty, ale ty jsi navrhuje poštovní směrovací číslo jako pět bajtů, nebo někdo jako Char, který se cítí jako eh, ve skutečnosti to není pouzdro. No, zábava příběh. Před lety, když jsem používal Microsoft Outlook na můj e-mail, Nakonec jsem chtěl přejít ke službě Gmail. A tak jsem se vyváží všechny mé kontakty z Outlooku jako soubor CSV. Oddělené čárkou hodnoty, což znamenalo, že jsem právě měli všichni moji přátelé jména a poslední Jména a telefonní čísla a poštovní směrovací čísla a všechny, které. A pak jsem dělal chyba, že se otevře v Excelu, což je tabulkový program, který chápe soubory CSV, jak jsme viděli. Ale pak jsem musel zasáhnout, jako je, Velení a řízení S na jednom místě. A Excel zřejmě v té době měl funkci, podle nějž se kdykoli to viděl číslo, to se snažil být užitečný. A pokud toto číslo začala nuly, to by jen se jich zbavit. Proč potřebujete vedoucí nuly na celá čísla? Jsou to nesmyslné, matematicky. Jsou to nesmyslné v USA poštovní systém. Takže jsem měl po celá léta, k tomuto dni, pořád mít přátele, že když vzácný případ, že musím je někdo řešit v těchto dnech, Budu stále vidět, že já mít přítele v Cambridge, Massachusetts, 2.138. A je to nepříjemné, pokud jste se snaží tak nějak programově generovat obálky nebo jen zapisovat dolů. A to je z tohoto důvodu, Vybral jsem si špatný typ dat. Tak jsem rád váš nápad. Využijme char pole. Pět znaků, s výjimkou je rohová případ. Pokud si přesto odesílat poštu, někdy zip kódy v těchto dnech, jsou, stejně jako plus čtyři. Takže potřebujeme pomlčku a pak potřebujeme další čtyři čísla. Takže abych byl upřímný, mohlo by to go mnoha různými způsoby. Pro tuto chvíli, budu držet to jednoduché, a já jsem jen chtěl říct, že je to Pět CHAR hodnotu a my jsme chystá přeskočit celou pomlčka a čtyři. Ale to jsou druhy kompromisy. A můžete myslet na Stejné problémy plynoucí s telefonními čísly nebo jiných oblastech. A teď, je to vlastně pošetilé silnice jít dolů. Předpokládejme, jak Rob a já a Hannah a Maria a [? Davon?] A Andy a jiní na zaměstnance všichni žít v Cambridge, Massachusetts, 02138. To skutečně cítit hloupé, že jsem přidat do mého uživatelů tabulky, město, stát, a zip. Proč? Diváků: [Neslyšitelné] DAVID Malan: znovu, řekni? Diváků: [Neslyšitelné] DAVID Malan: Jsou to vždy jít spolu, ne? Když se ukázalo, jsme si myslet, toto byl případ, dokud jsme vyčerpávajícím prohledali celé USA, a tam se ukáže, že jsou některé nesrovnalosti kde více měst má stejný zip, což je trochu divné. Ale pokud budeme stanoví, že pro tuto chvíli 02138 je vždy Cambridge, Massachusetts, proč na světě byste uložit do databáze Cambridge a MA a 02138 pro mě a pro Hannah a pro Rob a pro [? Davon?], A pro ostatní, kteří žijí tady v Cambridge, je to naprosto zbytečná. Měli bychom dostat pryč jen s uložením co? Jen poštovní směrovací číslo. Ale pak, pokud budeme uchovávat jen poštovní směrovací číslo, já chci, pravděpodobně, na mých webových stránkách, aby věděli, kde je 02.138. Tak jsem potřebovat další tabulky. A to je v pořádku. A ve skutečnosti, to je jedna z konstrukční procesy navrhování tabulek že budete dělat v PSet7 stejně, přičemž Chcete-li faktor společná data. Stejně jako jsme se vytknutí společný kód a factoring ven obyčejný styly od CSS, zde také v databázi, pokud potřebuji jen 02138 jednoznačně identifikovat něčí rodné město, neskladujte Cambridge, MA pro každý látat uživatel v tabulce. Namísto toho mají samostatné tabulky s názvem Zipy, která by měla mít co sloupcích? Pravděpodobně ID pole, jen proto, že pro zásady mluvíme teď. Pravděpodobně zip pole pro 02138. A pak asi to, co ostatní sloupce? Město a stát, ale jen mít jeden Řádek pro 02138, jeden řádek pro 02139, jeden řádek pro 90210. A to je doslova všechny zip kódy, které znám. Takže teď, co můžete dělat? To je problematické, protože teď mám dvě tabulky. Takže, moji uživatelé jsou většinou tady, ale jejich městský stát informace je tady. Tak to dopadá s SQL, je tu ve skutečnosti způsob, jak připojit informace, a uvidíte to v pset. Ale ukazuje se, je to možné něco takového. SELECT hvězda od uživatelů, JOIN zipy ON Uživatelé dot zip rovná zipy dot zip. Což je trochu rozvláčný, pravda, ale to jen znamená vyberte vše od Proces vzal mě uživatelů tabulku a můj zipy stůl. Přidejte se k nim na jedné Pole mají ve sloupci. Takže, doslova dělat něco takhle, a dej mi zpátky nové dočasné tabulky To je širší, je to větší, že má všechny sloupce z obou z nich. A to zcela jednoduše, by syntax dělat něco takového. Takže, tam je to dopředu, ale tam se děje být další rozhodnutí týkající se návrhu, budete muset učinit, a to nejen s indexy ale také běh do problémů. Ve skutečnosti, tam je výzva v každém návrhu databáze přičemž někdy dva lidé chtít přístup ke stejným řady databáze stůl. Takže, je to něco, že budeme setkávají v PSet7 stejně. Ale já jsem myslel, že bych se na jednom útok, který je možné v SQL. Jaké jsou některé z problémy, které mohou nastat? Takže, narazíte na tuto PSet7. A my vám říct rovnou, co kódování řešení tohoto problému je. Ale pokud budete mít vyšší úroveň tříd, zejména v operačních systémech, budete se setkat otázka atomicity, problém se snaží dělat více věcí najednou bez přerušení. A myslel jsem si, že zavedení tohoto Nápad na PSet7 s metaforou že jsem se naučil sám v Margo Operační systémy CS164 Seltzer se třída lety. Předpokládejme, že máte jeden z těchto koleji ledničky ve vaší kolejním pokoji nebo domě, a máte skutečný slabost pro mléko. A tak, přijdete domů z tříd jeden den, otevřete ledničku. Oh, sakra. Není mléko v lednici. Takže, zavřete ledničku, zamknout dveře, zamknout koleji, chodit za rohem na CVS, dostat do souladu, a začít odhlašování nějaké mléko. A že to bude chvíli trvat, protože ty zatracené samoobslužných pokladen čítače trvat věčnost tak jako tak použít. Takže zatím, váš spolubydlící přijde domů. On nebo ona má opravdu ráda mléko stejně. Přicházejí do pokoje na kolejích, otevřete ledničku, ach, zatraceně to. Není víc mléka. Tak, on nebo ona také jde za rohem. Ale teď, protože tam je jako dvě nebo tři nebo čtyři CVSes blízkosti, oni náhodou zajít do jedné z různé ty na náměstí. A tak teď, pár minut později, oba přijít domů a fuj, nejhorší problém vůbec. Nyní máte příliš mnoho mléka protože to bude jít kyselé. A vy jako mléko, ale vy nemají opravdu rád mléko. Takže teď, to byl drahý chyba, protože oba učinil rozhodnutí na základě stav nějaké proměnné byl v procesu měněn vámi, iniciátorem dostane mléko. Takže, co je možná člověk řešení tohoto problému? Diváků: [Neslyšitelné] DAVID Malan: zanechat vzkaz, že jo? Vždy nechat vzkaz, pokud jste seznámit s touto show. Ano, jsou tam dva z nás. Takže, vždy nechat vzkaz nebo doslova zámek chladničky s nějakou visacím zámkem nebo něco přes vrchol takhle. Ale to ve skutečnosti bude Klíčovým problémem návrhu databáze, zvláště když byste mohli mít více prohlížečů, více notebooky, více uživatelů všichni snaží aktualizujte informace najednou. Zvláště citlivé informace stejně jako finanční informace, čímž se obchodování na burze webové stránky, jako jste vy budete stavět, co když chcete zkontrolovat, kolik peněz máte, a pak, pokud máte dost, koupit nějaké akcie? Ale co když někdo jiný, kdo má společný účet s vámi je zároveň snaží koupit nějaké akcie? Tak, on nebo ona je zaškrtnutím zůstatek na účtu, a to jak z vás dostat zpět stejná odpověď, není mléko. Nebo vás oba dostat zpět odpověď, Máte $ 100 na účtu. Oba jste se snažit, aby rozhodnutí koupit jeden podíl na nějakou společnost skladě. A teď, co se stane? Máte dvě akcie? Nemáte žádné akcie? Problémy, jako je, že mohou nastat. Takže, budeme setkat to. SQL injection útoky, naštěstí, jsou něco, co ti pomůže s, ale to jsou ukrutně časté v těchto dnech v klidu. Tak, tohle je jen příklad. Dělám, že žádné nároky Systém Harvard PIN je náchylné k této konkrétní útoku. My jsme se snažili. Ale, víte, že my mají pole, jako je tento. A Yaleův Net ID je podobný se obrazovky v těchto dnech. A ukázalo se, že možná Systémový kód PIN je implementován v jazyce PHP. A pokud to were-- to ne-- oni může mít kód, který vypadá takto. Mají dvě proměnné. Dej mi uživatelské jméno a heslo od Odeslat Super globální proměnné že jsme mluvili o dříve. Možná, že Harvard má dotaz jako SELECT hvězda od uživatelů kde username rovná a heslo, které se rovná. A všimněte si, že jsem jen zapojení do zásuvky s použitím Kudrnatý ortéza zápis z druhého den, což znamená, že stačí připojit k hodnotě sem. Nejsem pomocí otazník technika. Nemám žádnou vteřinu nebo třetí argument. Jsem doslova konstrukci řetězec sám. Problémem však je, že pokud někdo líbí scroob, což je odkaz na film, přihlásí s něčím, jako je toto, a já jsem odstranil tečky které obvykle zakrýt hesla, co když je zvláště škodlivý a jeho heslo možná je 12345, na filmu s názvem "Spaceballs," ale kriticky Typy A apostrof po pěti, pak doslova slovo nebo v prostoru, a pak citovat, konec citátu jedna rovná se citovat, ale všimnete, že je vynechána, co? On vynechal citát na pravé straně a on vynechal cenovou nabídku na levé straně. Protože pokud to útočník scroob je domněnka je to, že lidé, kteří psali tento PHP kód tak nebylo jasné, Možná, že prostě mají nějaké single cituje kolem interpolace proměnné do složených závorek? A tak možná, dokázal laskavý z dokončit své myšlenky pro ně, ale takovým způsobem, že se děje ho nechat naboural do systému PIN. Jinými slovy, předpokládejme, že že se jedná o kód a my se teď připojit, co scroob zadali. A je to červené, protože je to špatné. A základní znění je to, co napsal v, scroob mohla oklamat serveru Harvardu do budování SQL dotazu řetězec, který vypadá takto. Heslo se rovná 12345 nebo jeden roven jedné. Výsledek, který logicky, je, že tento se přihlásí scroob V pokud je jeho heslo 12345 nebo pokud jedna rovná jednou, což je samozřejmě vždy pravdivé, což znamená, že scroob vždy dostane. A tak, jak opravit to, jak je v mnoha případech, by bylo psát více defenzivně. Chcete-li použít něco jako naše Skutečná funkce dotazu, který uvidíte v PSet7, kde jsme Plug In něco jako otazníky zde. A krása Funkce dotaz, který jsme dát, je, že brání proti nim tzv SQL injection útoky, kde někdo podvádět kód do vstřikování svůj vlastní kód SQL. Protože to, co funkce dotazu dáme vám bude vlastně dělat, pokud použijete syntaxi otazník a druhý a třetí argument zde, je to, co se to přidat do vstup, který uživatel poskytovány? Ti, zpětné lomítko cituje. Takže, je to uniká jakýkoli potenciálně nebezpečné znaky. To teď vypadá divně, ale není to zranitelný protože to není změnit logiku už protože to je celé heslo Nyní jediný citát, že to není, ve skutečnosti, scroob heslo. Takže, tam bylo nějaké vtipy o tom v průběhu let. Takže to byla fotografie pořízena některých poleno na parkovišti kdy byste mohli vědět, že některá města a státy snaží skenovat licence deska se vám nebo jízdenky účtovat vám Projdete-li bez, stejně jako, věc E-Z průsmyk. Takže, tento člověk předpokládal, že možná lidé psaní systém E-Z pass nebyly tak jasné, a možná, že Jen spojení společně řetězec, tak, že on nebo ona nemohla zlomyslně ne jen dokončit jejich myšlení, ale ve skutečnosti spustit špatný příkaz, které jsme dosud není uvedeno, ale asi tušíte. Že kromě odstranit, a vložit a aktualizovat a vyberte, tam je také klíčové slovo volal pokles, což doslova vymaže vše v databázi, která je zvláště špatné. Můžeme se přiblížit, pokud je to trochu těžké vidět. To teď, je slavný karikatura to je nyní úžasně chytrý a srozumitelné. [SMÍCH] Jo, v pohodě. Druh geeking ven. Takže tyto jsou tedy SQL injection útoky. A oni jsou tak jednoduché, vyhnout použitím správný kód nebo právo knihovny. A uvidíte v PSet7, to je Proto jsme vám funkci dotazu. Takže, pár oříšky že jsme si mysleli bychom se dát tady v naší Zbývající minuty dohromady. Takže, jak si pamatujete z týdne nula, my představil tyto dvě žárovky, které jsou pěkné, nejen proto, že jsou to docela a jsou barevné, ale proto, že podporují něco volal API, aplikace, Programming Interface A v CS50 tak daleko, máme zaměřující se především na GET a POST, ale ukázalo se, je tu další akce protokolu HTTP, jako jsou PUT. A ve skutečnosti, to bylo snímek z týdne nula přičemž když píšete kód, který pošle a la PSet6 požadavek HTTP, který vypadá to s tímto kusem textu ve spodní části, která se nazývá JSON, nebo JavaScript Object Notation že budeme mluvit o příští týden, můžete zapnout nebo vypnout nebo změnit barva světla, jako jsou ty. Takže v případě, CS50 má také kromě některých z těchto žárovek tady v New Haven pokud byste chtěli půjčit je pro finální projekty, i některé Microsoft Kapely, které jsou jako hodinky, které budete nosit kolem zápěstí že podobně mají tak, že jste API můžete napsat svůj vlastní software pro ně. Máme účet Apple iOS kód tak, že pokud máte Apple Watch nebo iPhone nebo iPad nebo iPod, můžete psát kód, který ve skutečnosti běží na nich. Máme spoustu z Arduinos, které jsou malinké počítače bez případech, v podstatě, že můžete připojit přes USB port, typicky do svého PC nebo Mac, napsat kód, který běží na tyto fyzické zařízení, která mají často senzory na nich takže můžete komunikovat s reálným světem. Máme spoustu z Leap Motion zařízení, které jsou USB zařízení pro Macy a PC, tady a opět v New Haven. A když jej připojíte k počítači Mac, můžete skutečně ovládat svůj počítač psaním software že prostřednictvím infračervených paprsků, zjistí, kde se vaše lidské ruce, a to i bez dotyku klávesnice. Mysleli jsme, že podělit rychlý zahlédneme na to, například. [Přehrávání hudby] Takže, máme celou banda z těchto věcí, Také volal Myo rameno kapely který jste dal přes předloktí a pak můžete kontrolovat skutečný world nebo virtuální svět, jako je tento. [Přehrávání hudby] Nebo, máme také nějaké Google Karton, který je doslova, jako, lepenková krabice byste mohli dát na vašem tvář, ale snímek ve vašem telefonu do ní takže si dal sklenici vašeho telefon opravdu blízko očí. A Google je karton docela levné na $ 10 nebo $. 20 A to má jen málo čočky že mírně mimo směnu obraz na obrazovce vašeho člověka oči, aby vám pocit hloubky takže jste skutečně 3D prostředí před vámi. Máme také nějaké Samsung Gear, který je dražší verze tohoto, ale že mohou klouzat obdobně An Android telefon a dá vám iluzi of-- nebo dát zážitek virtuální reality. A v našich konečných dvou minut, jsme si mysleli, že jsme si vyzkoušet, jak to udělat. Když se mi podaří promítnout to, co má Colton tu jen proto, aby povzbudit chuť k jídlu, nech mě jít dopředu a házet up na velké obrazovce zde. Dovolte mi, abych zabil světla. Colton, chcete pokračovat a dát na své cely na chvíli a přijít na více než na uprostřed jeviště? A chcete project-- to je to, co vidí Colton. Nyní, Wi-Fi zde je ne tak silný pro toto zařízení že to je super přesvědčivé, ale Colton je doslova V tomto magickém futuristické místě. On vidí pouze jeden obrázek. Ty jsou vidět jeho levé a pravé oko že jeho mozek se sflikovanou v trojrozměrný prostředí na tváři. Jenom vybrána možnost nabídky zde. A tak znovu, má na sobě tato sluchátka s telefonem Samsung na to, že je bezdrátově vyčnívající do naší režii. Nyní jste na Marsu, myslím, že? COLTON: Myslím, že ano. Nejsem si jistý, [neslyšitelných]. [SMÍCH] DAVID Malan: Ukázalo se, že Mars má těchto nabídek. COLTON: [Neslyšitelné] nějaké chladné místa, pokud chceme jít to-- DAVID Malan: Kam chceš jít? COLTON: [Neslyšitelné] DAVID Malan: A pojďme se podívat kde Colton se nám při teď. COLTON: [Neslyšitelné] DAVID Malan: Takže, je tu tolik různých místech si můžete vzít sami. Je tu FAPIs, přes které si můžete psát hry nebo interakce, které běh, v konečném důsledku, na telefonu. Takže jste opravdu jen psaní telefonní aplikace mobilní. Ale díky softwaru a schopnosti grafika, Nyní Colton je v tomto maličký chata. A na riziko ohromující sami, Colton a budu držet kolem pro zatímco na konci třídy zde dnes pokud byste chtěli přijít a hrát. A budeme přivést zpět příští týden stejně. Bez dalšího, ado to je pro dnešek vše. Uvidíme se příští týden. [MUSIC - ragga TWINS, "BAD MAN"]