[Zenelejátszási] DAVID MALAN: Rendben, ez CS50. Ez a hét végén nyolc. És ma, kezdjük hogy töltse ki az egyes darabokat amikor épületben dolgokat az interneten. Szóval, emlékszem, hogy hétfőn töltünk sok időt PHP, ami ezt a dinamikus programozási nyelv, lehetővé teszi számunkra kimenet, többek között dolgokat, HTML és egyéb ilyen tartalom hogy akkor szeretnénk látni. De nem igazán látszott, hogy mennyire fogunk tárol semmilyen információt. Valóban, szinte minden, hogy a szuper Érdekes weboldalakat látogat ma Van valamilyen adatbázis a háttérben, nem igaz? Facebook biztosan tárolja sok adatot rólunk és a Gmail tárolja Az e-mailjeit. És igen, sok más oldalak nem csak statikus tartalmakat, amelyek tájékoztató. Ez valójában dinamikus valamilyen módon. Akkor járuljon, frissíti Az oldalak más emberek. Kapsz üzeneteket küldünk üzeneteket, és így tovább. Tehát ma, nézzük meg közelebbről A alapjait a projekt hogy akkor belevetik magukat következő héten, CS50 pénzügyek, amely valójában megy, hogy építeni valami nem C, hanem a PHP. A honlap úgy néz ki, a kicsit valami ilyesmi amely lehetővé teszi, hogy vásárolni és eladni állományok, amelyek valóban fog támaszkodni, valós idejű állományi adatok a Yahoo Finance. És így végső soron, akkor még a illúzió magad és felhasználók hogy te tényleg vételi és eladási készletek és egyre közel valós idejű frissítések, kezelése egy portfolió, amelyek mindegyike lesz szükség, amelyek, végül, egy adatbázist a felhasználók. Szóval, a saját szavaival, különösen akkor, ha nem szuper jártas a számítógépes tudomány vagy adatbázisok, milyen Ismersz egy adatbázist is Most, a műszaki beállítottságú szempontjából? Mi az? Hogyan írnád le hogy egy szobatársat, vagy egy barát? Közönség: [hallható] információk [hallhatatlan] DAVID MALAN: Szóval, a fenti információk, vagy store-- információk listáját hogy érdemes tárolni valami, mint a felhasználó. És mit felhasználók velük kapcsolatban? Ha egy felhasználó a Facebook-on, vagy Gmail, mik a jellemzői hogy mindannyian felhasználó? Mint, mi lehet néhány oszlopok a táblázatban, amihez utalt utoljára? Mert újra, akkor gondolom, egy adatbázis Tényleg, mint egy díszes Excel fájl vagy Google Táblázatkezelő vagy az Apple számok fájlt. Szóval, mit gondolsz a ha úgy gondolja, hogy egy felhasználó? Mit vannak? Az mi? Közönség: A név. DAVID MALAN: A név. Tehát, ha nevet, mint, David Malan lenne a neve néhány felhasználó. Mit csinál egy felhasználó van? Közönség: egy azonosítót. DAVID MALAN: az id. Tehát, mint egy azonosító szám, mint a Harvard ID vagy a Yale Net ID vagy hasonlók. Mi mást lehet egy felhasználó van? Közönség: Jelszó. DAVID MALAN: A jelszó, talán egy címet, esetleg egy telefonszámot, talán egy e-mail címet. Szóval, van csokrok a területen, és ez a lehetne egyfajta kikerültek az ellenőrzés Gyorsan, amint elkezd felismerve, ó, hadd tárolja a és menjünk tárolni ezt és ezt. De hogyan valójában csinálni? Tehát még egyszer: a mentális modell hogy a mai, mint mi belevetik magukat a tényleges SQL, Structured Query Language, egy adatbázis, amely úgy néz ki, mint ez. Ez csak a sorok és oszlopok. És tudod képzelni Google Táblázatok vagy bármilyen számú más programok. De mi a kulcsa a MySQL, amely a adatbázis-kezelő szoftverek fogunk használni, A szabadon nyíltan available-- Facebook felhasználási azt, és tetszőleges számú egyéb websites-- adatbázis tárolja a dolgokat relációsan. És egy relációs adatbázis csak azt jelenti, hogy egy szó ezt az adatot sorok és oszlopok. Ez ennyire egyszerű. Tehát, még valami, mint az Oracle, hogy lehet, hogy általában hallott egy relációs adatbázis. És a motorháztető alatt, akkor tárolja az adatokat a sorok és oszlopok. És az Oracle számít fel Önnek csomó pénzt erre, mivel MySQL díjak Semmit sem ugyanaz. Szóval, SQL fog adni nekünk legalább négy műveleteket. Az a képesség, hogy kiválassza az adatok, mint például olvasási adatok, beszúrás, törlés, és frissíteni az adatokat. Más szóval, ezek Tényleg a négy kulcsfontosságú műveletek hogy fognak teszi számunkra, hogy változtatni cucc azokat a sorokat és oszlopokat. Az eszköz, amely fogjuk használni ma különösen tanulni SQL és játszani vele ismét felhívta a PHP MyAdmin. Ez a web alapú eszköz. Összesen véletlen, hogy ez van írva a PHP. De ez meg fog adni nekünk egy grafikus felhasználói felületet úgy, hogy mi is valójában létrehozni ezeket a sorokat és oszlopokat majd beszélgetni velük útján kódot. Nos, nézzük most kezd azt hiszem, ez őszintén fajta szórakozás folyamata épület hátsó része honlapok, a részek, hogy a felhasználók nem látni, de biztosan nem törődnek, mert ez sokkal inkább az adatok folyik. Tehát, hasonló a C-on és kicsit kevesebb, mint a PHP, SQL, vagy egy adatbázis, amely támogatja SQL, legalább ezen adattípusok és fürtök mások. CHAR, VARCHAR, INT, BIGINT, Tízes és DATETIME. És van egy egész csomó más funkciók, de csináljuk ezt módja a példát. Én megyek be CS50 IDE ahol előre, amit bejelentkezve és én is meglátogatott egy URL-t Ez az eszköz az úgynevezett PHP MyAdmin. És a probléma állítva hét, mi megmondjuk hogy pontosan hogyan kell eljutni ezen a felületen is. A bal felső sarokban, észre azt mondja előadást. És ez csak azt jelenti, hogy előre hoztam létre, egy üres adatbázist nevű előadás hogy nincs táblázatkezelő, hogy még. Nincs sorok és oszlopok. Mivel az első dolog, amit csinálsz A kezdeni, hogy hozzon létre egy táblázatot hogy fog tárolni a felhasználók. Szóval, szó fölött Itt a jobb vagyok fogja mondani az adatbázisban Szeretnék egy asztal nevű felhasználó. Szóval, ez olyan, mint a fájl, hogy én szeretné tárolni az összes adataimat. És hány oszlop? Nos, hogy ez egyszerű most. Csak azt akarom, hogy tárolja, mint egy felhasználónév és egy nevet a felhasználó. Kezdjük kicsi. Szóval, azt akarom, két oszlop összesen. És én megyek előre, és kattintson a Mehet gombra. És akkor, ezekre oszlopok, mit fogok hogy do-- ha ezt az internetes cooperates-- rendben, így fogunk próbálni, hogy újra. Megyek, hogy hozzon létre egy táblázatot az úgynevezett Felhasználók két oszlop, kattintson a Go OK. Most már van, hogy valóban gyors. Köszönöm, nagyon jól sikerült. Rendben, akkor mi akarunk ezeket az oszlopokat, hogy hívják? Szóval, az egyik meg fog hívni felhasználónévre. Szóval, látom here-- és a felület őszintén kap egy kicsit csúnya végül, egyszer elkezd írni az összes adatot. De mi a szép, hogy egyfajta paradox módon, hozok létre oszlopok, de a szerszám ostobán fektette sorokba így én is beállítani ezeket az oszlopokat. Szóval, van két szelvényt ott a Név. És egyikre azt szeretnénk, hogy az úgynevezett Felhasználónév, és a többi területen akarom hívni neve. És most azt kell választani adattípusok ezeket a dolgokat. Tehát, mivel az Excel és a Google Táblázatok, ha szeretnél egy oszlop, akkor szó csak típus neve vagy felhasználónév, az Enter leütése. Talán akkor teszi félkövér Csak az egyértelműség kedvéért, de ennyi. Nem adja meg a típusú oszlopok. Most a Google Spreadsheets vagy Excel, akkor Lehet, meghatározza, hogyan teszi az adatokat. Lehet menni a Formátum menü és megadhatja mutatni ezt, mint a dollár jel, jelenjen meg ez, mint egy lebegőpontos értéket. Szóval, ez hasonló szellemiségben hogy amit most tenni, de ez valójában fogja kényszeríteni az adatokat, hogy egy bizonyos típusú. Most, bár egy perccel ezelőtt én azt mondta, csak néhány adattípusok, van valójában egy csomó, és ők különböző fokú jellegét. És mint félre, akkor is csinálni extra dolgot mint a tároló geometria belsejében egy adatbázisban. Tudod tárolni a dolgokat mint a GPS koordinátákat és ténylegesen meg, matematikailag, pont, amelyek közel vannak mások. De megyünk tartani ezt a szuper egyszerű és menj fel ide, minden az úgynevezett sztring típusú. Szóval, itt van egy lista csomó lehetőséget. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. És ez a fajta elsöprő. És sajnos, kissé paradox módon a C, Char nem igazán KAR. Ha megad egy adatbázisban hogy az adatok típusa CHAR, ez azt jelenti, hogy igen, ez egy CHAR, de egy vagy több karakter. És meg kell adnia Hány KARAKTEREKRE akarsz. Szóval, mi az a tipikus hossza a felhasználónevet? Van egy határ általában? Közönség: [hallható] DAVID MALAN: 16 talán? Valami hasonló. Tudod, vissza a nap, ez szokott lenni nyolc. Néha 16, néha ez még ennél is többet. És igen, ez nem jelenti, hogy nekem egy CHAR. Ez azt jelenti, kell megadnom a hossza a mező, és most talán mond valamit, mint 16. És van egy trade off itt. Szóval majd meglátjuk, egy pillanat alatt hogy ez azt jelenti egy, Minden felhasználónevet kell lennie 16 karakternél. De várj egy percet, M-A-L-A-N. Ha ez felhasználói nevem, és én csak használ öt, mit javasolna, hogy az adatbázis csinálni, a többi 11 karakter, hogy Már fenntartva helyet? Mit csinálnál? Közönség: [hallható] DAVID MALAN: Ja, csak azokat minden null. Hogy azok terek. De talán null, így egy Sok backslash nullák. Tehát, egyrészt, most már most már biztos, hogy a felhasználói nevem nem lehet több, mint 16 karakter. És a másik oldala az, hogy a hogy ha volt egy nagyon hosszú név vagy akart egy nagyon hosszú felhasználónév mint néhányan közületek srácok talán az, hogy főiskolára vagy A Yale.edu, akkor nem egy van. És így tulajdonképpen, ha már valaha regisztrált a honlapon és kapsz kiabált mondván jelszó túl hosszú vagy felhasználónév túl hosszú, ez egyszerűen azért, mert a programozó, ha konfigurálása saját adatbázis, úgy döntött, hogy ez a mező nem lehet hosszabb, mint ez a hossz. Rendben, akkor mi lenne, ha haladunk elnevezni? Mennyi ideig kell a tipikus emberi neve legyen? Hány karakter, 16? Gondolom tudtunk találni valakit, ebben a szobában ahol az ő első és utolsó név hosszabb, mint 16 karakter. Szóval, mi a jobb, mint, hogy 17? 18? 25? Nagyobb? 30? Közönség: [hallható] DAVID MALAN: 5000, istenem. Szóval, ez valószínűleg egy tisztességes felső határértéket, mondjuk. És itt ilyen van hogy az ítélet hívást. Mint, nincs jó válasz van. Végtelen nem egészen lehetőség mert mi vagyunk végül fog have-- vagyunk fog elfogy a memória. Szóval, van, hogy egy ítélet hívást egy bizonyos ponton. Nagyon gyakori lenne, például, hogy use-- és hadd adja KAR itt mint before-- 255 volt szó a felső határa az adatbázisban szoftver évekkel ezelőtt. És így, a sok emberre csak azt mondom, rendben. 255 a határ. Nézzük csak használja a maximumot. És ez elég nevetséges. Mint, ha írsz valaki nevét 200 plusz karakter, hogy egy kicsit nevetséges. De ne feledjük, hogy az ASCII nem az egyetlen rendszer karaktereket. És így, különösen egy Sok ázsiai nyelvek ahol van karakter nem tudjuk kifejezni a billentyűs, mint az én US billentyűzet, néhány karakter ténylegesen vegye fel 16 bit helyett nyolc bit. És igen, ez valójában egyáltalán nem olyan ésszerűtlen hogy több kell helyet, ha azt akarjuk, hogy illeszkedjen nagyobb karakter, mint az USA-ban nagyon centrikus is, amit inkább, hogy megvitassák. Szóval, mi kell egy kis felső korlát. Nem tudom, hogy mi a legjobb egy, de 255 általában egy közös egy. 25 úgy érzi, alacsony. 16, 32 úgy érzi, alacsony. Én err oldalán valami magasabb. De van egy kompromisszum, mint mindig. Mi az, talán nyilvánvaló kompromisszumot foglalásra 255 KARAKTEREKRE mindenki neve mellett a adatbázis? Közönség: [hallható] DAVID MALAN: Mi ez? Közönség: [hallható] DAVID MALAN: Ez egy sok memóriát, ugye? M-A-L-A-N. Épp most kárba 250 karakterek csak tárolni a nevem védekezően, csak abban az esetben, ha valaki az osztályban van egy nagyon hosszú nevet. Úgy tűnik, mint egy indokolatlan kompromisszum. Szóval, kiderül, hogy az SQL, Ebben az adatbázisban nyelv, ténylegesen támogatja valamit nevű VARCHAR, vagy változó KAR. És ez a fajta szép, hogy ezt megadhatja, hogy nem egy fix szélesség, hanem egy változó szélességű. És Közelebbről, egy maximális szélessége a területen. Tehát, ez azt jelenti, hogy egy név nem lehet több mint 250 karakter, de minden bizonnyal kevesebb. És az adatbázis lesz okos. Ha életbe M-A-L-A-N, ez csak akkor fog használni öt, talán hat byte, mint A záró null karaktert, és nem költenek egy további 249 vagy 250 byte feleslegesen. Szóval, ez úgy tűnik, mint kéne kezdtek ezzel a történettel. De mindig van egy üzlet. Szóval, egyrészt, egy felhasználónevet voltam megadva kell bedrótozott 16, és lehet, hogy nem volt a jobb hívás, talán van, de miért nem használja VARCHARs mindent? Létezik, az oka. Miért nem használja VARCHARs minden téren amelynek hossza nem tudod előre ha úgy tűnik, hogy egy nagy dolog, ugye? Csak annyi helyet, mint meg kell akár ezt a határt? Közönség: Lassabb. DAVID MALAN: helyesírás? Közönség: Teszi lassabb? DAVID MALAN: Ó, ez lassabb. Jó, hogy szinte mindig a válasz, őszintén szólva. Mint, mi a kompromisszum? Ez akár többe hely vagy többe időt. Tehát, ebben az esetben, lehet, hogy lassabb. Miért? Közönség: [hallható] meghatározására [hallható]. DAVID MALAN: Jó. Szóval, lehet, hogy visszahívja a még PSED5, játszik a megközelítést a szótárba, ha kell memóriát lefoglalni dinamikusan vagy tartsa növekvő egy puffer, amely is lehet lassú. Ha kell hívni malloc a motorháztető alatt, és talán ez az, amit a MySQL csinál, így biztosan, hogy lehet a helyzet. És ha úgy gondolja módon vissza PSet-- vagy akár hetek két, amikor nem a dolgok, mint bináris keresés, vagy akár lineáris keresés, Az egyik szép dolog minden szó adatbázisban vagy minden szót egy oszlopban hogy pontosan azonos hosszúságú, még ha egy csomó ezeket a karaktereket üresek, hogy tudod használni véletlenszerű hozzáférés az Ön adatait, ugye? Ha tudod, hogy minden szó 16 karakteres el, akkor a mutató aritmetika, így a beszélnek, és megy nekünk 16, 32, 48, 64, és akkor csak ugorj segítségével azonnal számtani bármely szó szerepel az adatbázisban. Mivel ha ez egy VARCHAR, Mit helyett kell tenned? [Telefon csörgése] Ha ez egy VARCHAR, akkor Nem véletlen hozzáférést. Mit kell keresni, vagy nem? Igen? Közönség: [hallható] DAVID MALAN: Nézd a whole-- nyoma az egész listát keres, amit valószínűleg? Milyen különleges értéket? Közönség: [hallható] DAVID MALAN: Keresek A null terminátorok hogy elhatárolják a szétválasztása szó. Tehát ismét egy kompromisszum, és nincs jó válasz. De ez az, ahol, különösen amikor a felhasználó kap, hogy sok és a terhelést a szerverek, a igénybe vevők száma nem lesz nagy, ezek valójában nem triviális döntéseket. Szóval, mi is hagyja ezeket, mint ez, de hadd lépjünk le a jobb oldalra itt. Nos, van egy pár oszlopok ahol van, hogy az ítélet hívást. Van-e értelme, hogy a felhasználó Íme, a felhasználó felhasználónév vagy a felhasználó nevet, hogy semmis? Azaz, csak üres. Olyan egy kicsit értelmetlen, tehát vagyok Nem fogja ellenőrizni ezeket a dobozokat. De kiderül, egy adatbázis, akkor azt mondják, valaki tud opcionálisan ez az érték. Ez az oszlop nem hogy valóban ott lesz. Most itt van ez a legördülő menüből. És észre én még mindig az első sorban ott, így beszélek felhasználónév most. És kiderül, hogy egy adatbázis, eltérően egy egyszerű puszta táblázatkezelő, van erős jellegét nevezett indexek. És egy index mód, amely a adatbázis előre, hogy én, az emberi vagyok okosabb, mint te. Tudom, milyen lekérdezések, válassza ki vagy beszúrni vagy törölni, vagy frissítés, hogy a kód lesz a vége csinál az adatbázisban. Szeretnék olvasni egy csomó adat. Azt akarom, hogy helyezzen be egy csomó adat. Azt akarom, hogy folyamatosan törölni egy csomó adat. Ha tudom, hogy én leszek belépsz a területen, mint Felhasználónév sokat, Én preemptively mondani a adatbázis, többet tudok, mint te, és szeretném rendeletet, amely be index ezen a területen. Amennyiben indexelés egy mező vagy egy oszlop azt jelenti, hogy az adatbázis előre kell, hogy kölcsönözzön néhány ötletet, mint, heti négy-öt-hat-re CS50 és valóban létrejöjjön olyasmi, mint egy bináris keresés fa, vagy valami általában az úgynevezett B-fa hogy akkor tanulni egy osztály, mint a CS124 A Harvard, a algoritmusokat osztály, vagy bármilyen számú más helyeken. Az adatbázis és az intelligens emberek, akik végre is hajtotta azt majd kitaláljuk, hogyan kell tárolni hogy információs táblázat a memóriában, hogy a keresés és Más műveletek szuper gyors. Nem kell csinálni. Nem kell végrehajtani lineáris keresés, vagy bináris keresés vagy összeolvad ilyen vagy kiválasztás sort, minden erre. Az adatbázis nem az Ön számára, ha azt mondja ez preemptively az index ezen a területen. És láthatjuk is, van Néhány egyéb jellemzői meg tudjuk mondani az adatbázis érvényesíteni. Mi lehet ez azt jelenti, ha úgy döntök Egyedi Ebből a menüből, csak ösztönösen? Igen? Közönség: [hallható] DAVID MALAN: Igen, a felhasználónév egyedinek kell lennie. Ez egy jó dolog vagy rossz dolog egy adatbázis, egy honlap a felhasználók? Amennyiben felhasználónevek egyediek? Igen, valószínűleg. Ha ez az, amit a mező használjuk lépnie, nem igazán akar emberek, amelyek ugyanolyan érzés, vagy ugyanazzal a felhasználónévvel. Szóval, mi lehet a adatbázis érvényesíteni, hogy így hogy most az én PHP kódot vagy bármilyen nyelven, Nem kell például, ellenőrizze feltétlenül jelent ez a felhasználóneveddel léteznek, mielőtt hagyja valaki regisztrálni? Az adatbázis nem fogja hagyni két ember nevű David vagy Malans regisztrálj ebben az esetben. És mint félre, bár ez a Csak menü segítségével válassza ki az egyik, egyedi index az, amelyik indexelve szupergyors teljesítményt, de ez is érvényesíti az egyediség. És mi jön vissza, amit a másik két értem csak egy pillanatra. Közben, ha elmegyek a második sorban, amely a felhasználó nevét, kéne határozni hogy a nevének egyedinek kell lennie? Nem, mert akkor minden bizonnyal have-- nincs két Dávid Malans ebben a szobában, a legvalószínűbb. De ha úgy döntünk, a másik nevet, talán biztosan ütközések. Gondolj vissza hash táblák és hasonlók. Szóval, mi persze nem akarjuk hogy a név mezőben egyedi. Szóval, mi csak elmegyünk hogy a kötőjel, kötőjel, kötőjel, semmi. És fogom elhagyni minden mást egyedül. Sőt, a legtöbb ilyen mezők akkor nem kell törődnünk. És amikor készen állok, hogy megmentse ezt, ha az interneten együttműködik, Én kattintson a Mentés, és nagyon, nagyon, nagyon Lassan azonban az adatbázis mentette. És most itt vagyok, hogy ezt interfész, amely bevallottan elsöprő első pillantásra. De minden fogom csinálni, hogy kattintson a szó felhasználók a bal felső sarokban. Én megyek ide kattintva Felhasználók, és alapértelmezés szerint ez végrehajtotta néhány SQL, de bővebben, hogy egy pillanatra. Itt csak egy összefoglalót, amit tettem. És nem kell aggódnia, hogy látod beszélve a latin és a svéd itt. Ezek csak az alapértelmezett beállításokat, mert a MySQL eredetileg, vagy PHP MyAdmin, az egyik a két történt írandó néhány svéd nép. De ez lényegtelen a mi esetünkben itt. Rendben, akkor miért van ez mind érdekes? Kiderül, tudok beszúrni adatok egy adatbázisba kód írásával. És én megy előre, és az én fájl itt vagyok fog menni előre, és úgy tenni, mintha ez van bekötve, hogy az adatbázis, amely ez nem abban a pillanatban, de ez lesz lennie, amikor elérjük a problémát beállítani hét. És én megyek előre, és végrehajt egy funkciót nevű lekérdezést, amit kapsz a problémát állítsa hét forgalmazási kódot, hogy ideje legalább egy érvet, amely csak egy húr. Egy sor SQL-kódot. Szóval, te arról, hogy megtanulják, hogyan kell levelet Structured Query Language. Ha azt szeretnénk, hogy helyezzen be egy új sort az én adatbázis, mert valaki azt benyújtott olyan formában, hogy a kódomat, azt szó szerint levelet INSERT INTO felhasználók a következő mezőket: felhasználónév, vessző, nevét, az értékek, az és most azt kell beszúrni valami ilyesmit Malan, és idézet, idézet vége "David Malan." És most még azok számára is ismerik SQL, Ezért használom szimpla idézőjelet belsejében ez a zöld húr? Mi lehet az oka annak itt? Figyeljük meg vagyok társ-keveredés a két nyelvet. Kérdés egy PHP függvény, de tart egy érvet. És ez az érv, hogy maga is más nyelven íródtak nevezett SQL, Structured Query Language. Szóval, mindent, amit most emeltük az ezen a nyelven úgynevezett SQL. Szóval, mi ez a szimpla idézőjelet, Csak egy gyors józanság csekket? Előre. Ők szálakat. Szóval, idézet, idézet vége Malan és idézet, idézet vége David Malan füzér. És csak arra gondoltam, ösztönösen most, tudva, hogy mit tud a C és a PHP, Hogy miért nem ezt, amit általában Használt idézőjelek között a húrok? Miért én nem akarom ezt csinálni? Igen? Közönség: [hallható] DAVID MALAN: Pontosan. Mert már használom idézőjelek között az úton kívül az érvelés A PHP függvény, Én csak megzavarja a tolmács. Nem fog tudni, ezek együtt járnak? Vajon ezek együtt járnak? Vajon ezek együtt járnak? Szóval, én felváltva helyett. Vagy tehettem ilyet, backslash idézni, vagy backslash árajánlatot. Őszintén szólva, ez csak kezd kap nagyon olvashatatlan és csúnya. De hogy lehetne elérni ugyanazt az eredményt is. Tehát, ha én is végre ezt lekérdezés most lássuk, mi történik. Megyek, hogy menjen előre, és most inkább mint végrehajtani a PHP kódot, amely Itt kapsz játszani A probléma állítva hét, Megyek inkább megy a PHP MyAdmin. És én kézzel megy menni a SQL fülre, és hadd ráközelít a felületen. És fogok illeszd A dolog, amit csak gépelt. És a színkód van megváltozott egy kicsit most, csak azért, mert a program formátumok dolgok egy kicsit másképp. De észre, hogy amit tettem van, amit mondtam, helyezze felhasználók. Adtam meg, majd egy vessző elválasztva zárójeles lista a két mezőket, hogy szeretnék beilleszteni, és Ezután Én szó szerint azt mondta értékek majd egy másik zárójel, majd a két értéket Azt akarom, hogy a plug-in, és Most a jó intézkedés, Teszek pontosvessző végén. Szóval, ez nem C. Ez nem PHP. Ez most az SQL, és én beillesztéssel is ebbe a webes felület, ami Csak hagyom, hogy nekem, amint kattintson a Go végre ez a lekérdezést az adatbázisban belül futó CS50 IDE. Szóval ez jó. Figyeljük meg, hogy az egy sorban egészül ki, ment szuper gyors, 0,0054 másodperc beszúrni, hogy az adatokat. Tehát, hogy a hangok nagyon egészséges. Ez átszerkesztett lekérdezésem Nekem itt csak látni a fajta színkódolt változat. De most, ha rákattintok Tallózás észre, hogy még bár van egy csomó rendetlenséget A képernyőn, az én asztalomnál most két sor. Szóval, hadd menjen előre, és nem egy másik. Ehelyett hadd megy a SQL fülre újra. És ezúttal én beszúrni valami ilyesmi Rob és az ő neve lesz Rob Bowden. Bowden. Nézzük a Mentés gombra. Hoppá, inkább menjen. Kattintson a Tallózás gombra újra, és Most észre Van két sorban. Szóval, ez csak egy sokkal komplexebb módja nyitás Google Táblázatok és csak gépelési sorban egy oszlopot. De mi a legfontosabb az, hogy most már a szintaxis amellyel kódot írni, hogy végül, mi is valójában némi és ez. Emlékezzünk vissza, hogy a PHP támogatja szuper globális változók. Mi van benne dollár jelentkezzen aláhúzás GET PHP-ben? Vettünk egy pillantást az egyik vagy két egyszerű példát. És PSet6, emlékszem akkor szia dot PHP amely felhasználja ezt a változót. Mi megy itt? Vagy mi ez? Egy kicsit hangosabban. Közönség: [hallható] DAVID MALAN: Ez egy hó magja tömb, amely csak egy divatos szóval egy tömb, amelynek legfontosabb érték párokat. És a billentyűzet nem numerikus. Ők szavak vagy szövegek. És konkrétan mit azok legfontosabb érték párokat? Honnan jöttek? Bocsánat? Közönség: [hallható] DAVID MALAN: Nem? Hol az olyan alapvető érték párokat származik? Mondd ismét? Újra? Én vagyok az egyetlen, aki hallott valamit? [Nevetés] Ez így van, ugye? Közönség: [hallható] DAVID MALAN: Igen, jönnek a query string. Tehát, ha visszalép az időben, hogy amikor már játszott a Google és már ment a Google.com perjel keresés kérdőjel q egyenlő macskák, ha én az Enter leütése és ha Google hajtottak végre a PHP, PHP kódot, hogy a Google írt jutnának hozzá dollár jel aláhúzzák bejutni, amely kulcsfontosságú úgynevezett Q és egy értéket nevű macska, hogy lehet majd használni szokta tényleges keresést. Tehát valójában, mit fogok tennie, most menj vissza a PHP kód hogy akkor ismét többet látni a PSet7. És ahelyett, hogy dugulás a bedrótozott értékek nem tűnik, mint egy Nagyon dinamikus weboldal, Megyek, hogy adjak egy teaser mi a tényleges kódot tenne. Akkor tedd a két kérdőjel, mint ez. Én nem tudom, mi a felhasználónév. Én nem tudom, mi az név lesz, de azt tudom, tudom kérni őket, dinamikusan. Tehát, ha a kód írunk most a kód fut a Google szerverein, vagy ha ez helló dot PHP, ami jön PSet6, Megyek bejut A lekérdezés funkció akárcsak a printf, két másik érvet. GET, idézet, idézet vége felhasználóneveddel, és a GET, idézet, idézet vége nevet. És most, figyeld meg, mi a általános szerkezete van. Megvan a bal oldalon oldalán a hívást, Ez a funkció az úgynevezett lekérdezés PHP-ben. Még mindig van, amely az első érv, csak egy csomó szöveget. De, hogy sor szöveg nyelven írt úgynevezett SQL. És őszintén szólva, ez nem egy nagy nyelv. Mi csak beszélgetünk hivatalosan ma, tényleg. És akkor a probléma beállítva hét, van viszonylag néhány jellemzője, hogy mi vagyunk fog mozgósítani. A kérdőjelek, bár értem dugó ide értéket és a dugó más érték itt. És észre, amit kihagyott, amit az egész rohadt quote-- it-- körül idézet jelzi ebben az időben. Már elhagytuk a jegyzés körüli jelölések kérdőjel, Sajnáljuk, de ez idő tájt. Szóval, mi szép erről kérdőjel funkció, amely PHP látszik alátámasztani, Ruby és Python és más nyelveken, ez csak azt jelenti, dugó egyes érték itt, és tudod mit? Kitalálni, hogy használja-e Egyetlen vagy dupla idézőjel. Nem zavar engem azokkal szellemileg érdektelen részleteket. De, akkor ellenőrizd, hogy helyes úgy, hogy a kód végül működési és biztonságos, amely akkor van értelme, mielőtt hosszú. Most, hogy hány érvek összesen, csak azért, hogy világos, a lekérdezés funkció kezelésére? Bárki, aki akar szavazni kettőnél többet? Három? Persze, miért is? Miért három? Közönség: [hallható] DAVID MALAN: Pontosan. Az első rész a húr. A második érv dollár jel aláhúzás GET tartó felhasználónév. És a harmadik érv az ugyanaz a dolog, de csak a neve. Tehát más szavakkal, most ha lenne egy webes formában hogy kellett szöveges mezők, az egyik a felhasználó felhasználóneve, az egyik a saját nevét, csak mint te is látna egy website amikor regisztrációs Néhány honlap, ez lehet a kód a háttérben, hogy valójában nem a beillesztés most az adatbázisba. Most ezzel szemben, nézzük gyorsan előre. Tegyük fel, hogy egy felhasználó jelenleg bejelentkezés és szeretne írni PHP kód, amely ellenőrzi, hogy az a személy, aki csak bejelentkezve valójában egy felhasználó, akkor Használja elég egyszerű forma. Azt lehet mondani, SELECT, mondjuk csillag, ahol csillagos jelent mindent. Nem tudom, mit szeretnénk, így csak adj az összes oszlopot a táblázatban nevű felhasználó hol, és ez szép. Válasszuk támogatja mi úgynevezett állítmány, amely mint egy módja a minősített amit akarsz. Hol felhasználónév megegyezik idézet, idézet vége Malan. Tehát itt is, amit a beágyazott belsejében az érvet egy PHP függvény, egy sor SQL-kódot. És, hogy az SQL-kód ezt alkalommal szó szerint fog keresni idézet, idézet vége Malan. Most ez még nem minden, hogy hasznos, így fogok ugrani, hogy és megyek, hogy eltette ezt a tippet: Brady, és menj és plug-in helyett egy kérdőjel van. Szóval, csak hogy tisztázzuk, mit amennyiben a második érv lehet, ha valaki bejelentkezik, és én ellenőrizni szeretné, ha ő valójában Egy felhasználó? Közönség: [hallható] DAVID MALAN: Igen. Hallom dollár jel aláhúzás Kérés, idézet vége felhasználónév. És, hogy vissza kell térnie nekem bármelyik sort az én adatbázisban hogy van felhasználóneve a Malan. Remélhetőleg most megyek, hogy újra nulla, ha Malan soha nem volt itt, vagy az egyik, ha van. Nem kellett, hogy újra két vagy három vagy négy. Miért? Közönség: [hallható] DAVID MALAN: Azt mondtam egyedülálló, ugye? Egyszerű oka. Mert azt mondtam ez van, egyedinek kell lennie, csak logikailag, akkor csak nulla vagy egy Malans ebben a konkrét adatbázis tábla. Most, mint egy félre, csak azért láttad ez, bár én tartani a GET és bár PSet6 csak akkor kell használni GET, akkor bizonyára POST. És emlékszem, hogy a Post egy másik technika információk benyújtásának egy formája, de nem jelenik meg az URL-ben. Ez egy kicsit biztonságosabb bizonnyal dolgok, mint a felhasználónevek és jelszavak, amely PSet7 lesz, sőt, járnak. Nos, nézzük ezt a PHP MyAdmin és meglátjuk, mi történik. Én megyek, hogy a MySQL fület. És észre, hogy az alapértelmezett érték PHP MyAdmin, csak hogy megpróbálja, hogy hasznos, az, hogy válassza csillag felhasználók, ha az egyik. Nos, az egyik mindig igaz, így ennek az ostoba hatékony A csak válassza ki mindent. De megyek, hogy egy kicsit pedánsabb és manuálisan írja ki SELECT csillag felhasználók. Most technikailag, akkor jegyezze fel a nevét a táblák. Ez ritka, hogy meg kell, de észre ezek nem A normál idézetek az amerikai billentyűzeten. Ez az úgynevezett végrehajtóoperátor, amely általában a bal felső sarkában a billentyűzeten. De ez ritka, hogy akkor valóban nem kell bajlódnia, hogy úgyhogy most kihagyja őket. Tehát most, hadd menjen előre és nyomd megy. És hány sort kell kapok vissza, amikor kiválasztom csillag felhasználók? Közönség: [hallható] DAVID MALAN: A sorok száma, az biztos. De hány e beton történet most? Két, mert nem volt nekem és nem volt Rob. Tehát, ha én kattintson a Go látom, hogy vizuálisan Kaptam vissza, sőt, két sorban. Van egy csomó felfordulást az képernyőn, de én csak két sort. Ezzel szemben, ha ezt újra és csinál SELECT csillag felhasználók, ahol a felhasználónév egyenlő idézet, idézet vége Malan, ha most kattintson a Go Én csak megy, hogy újra egy sorban. És végül, ha megteszem valami ilyesmi, tegyük fel, hogy én nem érdekel kezd mindent, ami elég értelmetlen most, Mert csak két oszlopot. Nem mintha én kiválasztása A hatalmas mennyiségű adat. Tegyük fel, hogy menjen előre, és ne Válassza a NÉV a felhasználók, ahol a felhasználónév megegyezik Malan, Mi a szép SQL őszintén, az, hogy ez tényleg csak nem amit mondani, hogy igen. Elég szűkszavú, de szó csak mondd meg, mit akarsz csinálni. Válassza ki a nevét, ahol a felhasználók A felhasználónév megegyezik Malan. És ez tényleg ilyen egyértelmű. Tehát, ha most hit Go, hány sorok fogok visszatérni? Az egyik, mert ez csak Malan, remélhetőleg. Vagy nulla, ha ő nem van, de az egyik maximálisan. És hány oszlop kapok vissza? Hány oszlopok? Ezúttal én csak fog hogy egy, mert én nem válassza csillag, ami mindent. Most kiválasztásával csak nevet, úgyhogy csak kap vissza egy oszlop és egy sor. És úgy néz ki, egyfajta megfelelően Nevetséges, csak néz szuper kis, mint ez. Szóval, mi történik valójában? Amikor végre egy SQL lekérdezés segítségével válasszuk, mit kapsz vissza az adatbázisból olyan, mint egy ideiglenes táblát A sorok és oszlopok, talán, de hiányzik semmi, hogy valójában nem az Ön által kiválasztott. Szóval, ez olyan, mint ha valaki volt egy nagy táblázatkezelő, minden tanuló regisztrált valamilyen tanulócsoport, és azt mondod, adj minden gólya, akik már regisztrált hallgatói csoport, milyen A kolléga a diákcsoport lehet csinálni A tudták csak kézi Ön a teljes táblázatot. Ez mintha azt mondanánk, válasszuk a csillag. És ez egy kicsit bosszantó, ha csak akarta, hogy a gólya. És így, ha ehelyett azt mondta, válasszuk csillag adatbázis tábla ahol évente egyenlő idézet, idézet vége gólya, olyan, mintha a barátja A diákcsoport Szó szerint emelni és másolása csak a gólya sorok, ragasztották őket egy új Google Táblázatot vagy egy Excel fájlt, és átnyújtotta vissza a kapott fájlt csak. Ez minden, ami folyik A fogalmi itt. Így a végén, amit tehetünk, néhány nagyon extra dolgot tárolja a dolgok, mint a felhasználónevek és jelszavak és hasonlók. De, mint kiderült, meg kell tennünk Egy kicsit másképp, mint ez. Ez nem olyan okos, hogy csak a tárolja a felhasználónevet és a jelszót. Valaki korábban, azt hiszem, idelent, azt javasolta egy azonosítót. Most egy azonosítót lehet, mint egy Harvard vagy a Yale ID Net ID, de lehet még egyszerűbb az adatbázisunkban esetén. És valóban, a közös ügy az, hogy a másik oszlopot. És én megyek előre, és szerkesztheti az én asztalom. És ha játszani körül Ezen a felületen a PSet7, látni fogod, hogy ellenőrizni tudja ezt a gombot itt, és adjunk hozzá egy mező elején az asztalra. És most, ha rákattintok megy, ez megy hogy adjon nekem egy ilyen formák a korábbi. Megyek, hogy adjunk egy területen úgynevezett ID. És megyek, hogy ez egy numerikus típusú. Van egy csomó Az értékek a numerikus. Csak megyek, hogy válasszon egy INT és nem kell aggódnia az eltérő méretek. Nem kell megadni hossza vagy egy érték, mert lesz 32 bit nem számít, mit. Attribútumok, nem láttunk korábban. Bármilyen érdeklődés ezek közül bármelyik menüpontok ebben az időben? Egy INT? Mit javasol? Nem? Ne bármelyik értelme? Igen. Ja, aláíratlan, ugye? Általában, ha megyünk, hogy mindenkinek egyedi szám, amely ahol ez a történet megy, én tényleg csak azt akarom, egy személynek a szám, mint nulla és egy és kettő és három és négy. Nem kell foglalkozni A negatív számok. Csak úgy tűnik, mintha túlságosan bonyolult műveletet. Azt akarom négymilliárd lehetséges értékeit, Nem négymilliárd lehetséges értékeit, úgyhogy csak megduplázódott a kapacitása én INT. Mellesleg, ha azt szeretné, hogy kapcsolódnak ez olyasmi, mint a Facebook, vissza egyfajta napom, amikor Facebook először jött ki, Úgy gondolom, mi volt segítségével a saját MySQL adatbázis hogy tárolja a felhasználó azonosító, csak egy INT. Persze, van egy csomó Az igazi ember a világon. Van egy csomó hamis Facebook számlák a világon. És így végül Facebook túlcsordult a mérete egy INT, egy négy milliárd értéket. Ez az oka annak, ha megnézi körül, és ott honlapok amely megmondja, hogy mi Ön egyedi azonosítója van. És ha soha nem választottam egy felhasználónevet Facebook, látni fogja az egyedi azonosítót. Azt hiszem, ez profil dot PHP kérdőjel ID megegyezik valamit. Ez most valami, mint egy nagy INT, vagy egy hosszú, hosszú ha úgy tetszik, amely egy 64 bites érték vagy valami hasonló. Szóval, még a való világban ezek a kérdések végül néha számít. És kiderül itt, ha én vagyok így minden az én felhasználó egy egyedi azonosító, Azt akarom, hogy szuper explicit és minimálisan hogy ezen a területen egyedülálló. De kiderül, van egy darab nómenklatúra ma is ez egy elsődleges kulcsot. Ha adatbázisok tervezésével asztal és előre tudja, , hogy az egyik az oszlopok e táblázatban kell, és egyértelműen azonosítja sorok A táblázatban szeretne adja meg, és mondd el az adatbázist, ez az én elsődleges kulcs. Lehet, hogy másolatokat más területeken, de én mondom az adatbázis, hogy ez a az én elsődleges, számomra a legfontosabb területen, ami garantáltan egyedi. Most úgy tűnik, ez felesleges. Én most azt javasolja, hogy mi add, kattintson a Mentés ide, mező called-- és megyek hogy menjen előre, és kattintson az AI, mi jön vissza hogy egy pillanat, takarítson meg. Azt javaslom, most, hogy én asztalomnál kinéznie. Van egy INT területen úgynevezett ID, Char területen úgynevezett Felhasználónév, VARCHAR mező nevezett a neve, de azonosítója, ha ez elsődleges és ezért egyedi, Hogy miért csak a hulladék idő bevezetésével, amit hatékonyan van egy második különleges mező nevű azonosító, egy INT? Felhasználónév, emlékszem, volt Már egyedülálló, azt mondta. Tehát csak logikailag, akkor nem kell minden adatbázis élmény oka ezen keresztül, miért Lehet, bevezettem egy INT mint az én egyedi azonosítót is? Mi this-- mondani újra? Közönség: [hallható] DAVID MALAN: Véletlen hozzáférés könnyebb, miért? Közönség: [hallható] DAVID MALAN: Igen, ez Csak hozzáférés számokat. Tehát, ha úgy gondolja, ennek a valóban egy asztal, mint egy tömb, most már egyedi azonosítók hogy tudok ugrálni. És jobb, mint mindig az, hogy Mekkora egy INT lesz megint? 32 bit vagy négy bájt. Mekkora a felhasználói nevem lesz? Maximálisan? 16 bájt. Tehát, ha igazán törődve a teljesítményét a kódot, gondoljon vissza PSet5, szívesebben hogy keressen egy négy bájtos érték, vagy a 16 bájtérték, ugye? Ez tényleg ilyen egyszerű. Nem kell mást tennie négyszer annyi munkát kíván felhasználónevek, mert azok 16 bájt. Szóval, van, hogy a szó szoros értelmében hasonlítsa össze mind a 16 byte- arról igen, ez a felhasználóneveddel akarok. Így néz ki egy INT, akkor csináld csak négy bájt. És mint félre azokat Érdekel számítógépes hardver, kiderül, hogy elfér valami ilyesmi int, vagy egy 32 bites értéket valamit nevű nyilvántartást a számítógép CPU, ami azt jelenti, hogy szuper, szuper gyors, még a legalacsonyabb szint a számítógép hardverét. Szóval, ott csak előnye az egész. Szóval, mit jelent ez? Sőt, ha éppen tervezésekor adatbázis tábla, szinte minden az idő fogsz még nem csak az adatok törődsz, hanem valami ilyesmi egy egyedi azonosítót mert ez fog tegyük más dolog. És nézzük botoljon egy probléma van. Tegyük fel, hogy a felhasználók nem Csak felhasználónevek és nevét, de ők is a dolgok, mint a városok az államok és a postai irányítószámok, legalább Itt az USA-ban. Szóval, én megyek előre, és csak gyorsan mondani, adj még három oszlop végén az asztalra. És ez lesz City, ez lesz az állami, és ez lesz Zip. Most Város, milyen adattípusok amennyiben ez talán? VARCHAR? Én nem tudom, mi az leghosszabb nevet város. Valahol Amerikában, ott Valószínűleg néhány nevetségesen hosszú szó, úgyhogy csak menni 255, valamelyest történelmileg vagy önkényesen. Állami, hogy mit akarsz csinálni? Ítélet döntök, ugye? Mi lehet a leghatékonyabb? Hány karakter? Talán csak két, ha tudjuk megúszni ezzel csak, mint, MA a Massachusetts és így tovább. Szóval, én megyek egy CHAR értéke kettő. Irányítószám van egy érdekes. Azért vagyunk itt, 02138, így javasolja azt kell használni, mi? Ez egy INT, ugye? INT, INT, rövid? Rövid működne. Nem? CHAR-öt, de szeretnék egy INT. Miért tolja vissza az INT? Meggyőzni engem ettől. Milyen hülye körülbelül egy INT, az én ötletem? Igen. Közönség: több memóriát. DAVID MALAN: több memóriát. Négy bájt, de te javasolja egy irányítószámot öt byte vagy valaki volt, mint egy CHAR, amely olyan, mint mi, ez nem igazán az ügy. Nos, szórakoztató történet. Évekkel ezelőtt, amikor én használtam Microsoft Outlook for-mail címemet, Én végül akartam váltani Gmail. És igen, én exportált minden az én névjegyeket az Outlook CSV fájlba. Vesszővel elválasztott értékek, ami csak azt jelentette, volt az összes barátom nevét és utolsó nevek és telefonszámok és irányítószámok és minden adott. És aztán csináltam a Hibát nyitó fel az Excel, amely egy táblázatkezelő program megérti CSV fájlokat ahogy láttam. De akkor, biztos hit, mint, Parancs vagy vezérlő S egy ponton. És Excel látszólag idején Volt olyan funkció, amellyel bármikor is látta, hogy egy szám, akkor megpróbáltam hasznos lehet. És ha ez a szám kezdődött nullák, akkor csak megszabadulni tőlük. Miért van szükség vezető nullák egész? Ők értelmetlen, matematikailag. Ők nem értelmetlen Az US Postal rendszer. Szóval, én már volt évekig, a mai napig, még mindig Vannak barátaim, hogy amikor a Ritka eset, hogy szükségem van valaki ezekkel a nap, Én még mindig látom, hogy Van egy barátom, Cambridge-ben, Massachusetts, 2138. És ez bosszantó, ha megpróbálja rendezni a programból generál borítékok vagy csak jegyezze fel. És ez, mert emiatt, Azért választottam a rossz adatok típusát. Szóval, én szeretem a gondolat. Vegyünk egy CHAR mezőbe. Öt karakter, kivéve van egy sarok esetében. Ha még levelet küldeni, Néha irányítószámok ezekben a napokban, ők, mint, plusz négy. Tehát szükségünk van egy kötőjel, majd szükségünk van még négy szám. Tehát, hogy őszinte legyek, azt is megy számos különböző módon. Egyelőre fogom tartani egyszerű és én csak azt fogja mondani, hogy ez egy Öt KAR értéket, és mi vagyunk megy, hogy kihagyja az egész műszerfal és négy. De ezek a fajta kompromisszumok. És akkor gondolom a ugyanolyan problémák telefonszámokat vagy egyéb területeken. És most, ez valójában ostoba út, hogy menjen le. Tegyük fel, hogy mindkét Rob és én, és Hannah és Maria és [? Davon?] És Andy és mások a személyzet minden él Cambridge, Massachusetts, 02138. Ez tényleg úgy érzi, hülye, hogy én vagyok hozzátéve, hogy az én felhasználók tábla, város, állam, és a zip. Miért? Közönség: [hallható] DAVID MALAN: Mondd még egyszer? Közönség: [hallható] DAVID MALAN: Ők mindig fog menni együtt, ugye? Amikor kiderül, szoktuk gondolni ez volt a helyzet, amíg nem kimerítően Kereste az egész USA-ban, és kiderül, hogy bizonyos következetlenségek ahol több városban van azonos zip, ami furcsa. De, ha kikötik most, hogy 02138 Mindig Cambridge, Massachusetts, Ezért a világ eltárolunk az adatbázis Cambridge MA és 02138 nekem és Hannah és Rob és a [? Davon?], És mások számára, akik élnek Itt Cambridge-ben, ez Tökéletesen felesleges. Meg kell megúszni csak tárolja, mi? Csak az irányítószámot. De aztán, ha tárolni csak a irányítószám, azt akarom, valószínűleg, a saját honlapján, hogy hol 02138 van. Szóval, kell egy másik asztalhoz. És ez rendben. És valóban, ez az egyik a tervezési folyamatok tervezése asztalok hogy akkor itt PSet7 is, amellyel azt szeretné, hogy figyelembe végre közös adatai. Csakúgy, mint mi már faktoring ki közös kódot, és faktoring ki közös stílusokat CSS, itt túl az adatbázisban, ha csak be kell 02.138 egyedien azonosítani valakit szülővárosában, Nem tároljuk Cambridge, Mass Minden stoppol felhasználó a táblázatban. Ehelyett van egy külön táblázatban nevezett Cipzárak, hogy legyen mit oszlopok? Valószínűleg egy azonosító mező, csak azért, mert a elvek beszélünk most. Valószínűleg egy zip területen 02.138. És akkor valószínűleg mi más oszlopok? Város és állam, de csak egy sor 02138, egy sort 02139, Egy sor 90210. És ez szó szerint minden irányítószámok tudom. Tehát most, mit lehet tenni? Ez különösen azért aggasztó, mert akkor most már van két asztal. Szóval, én felhasználók többnyire ide, De a város állami információs ez itt. Szóval, kiderül, SQL, van valójában egy módja, hogy csatlakozzon információ, és látni fogod ezt a PSET. De kiderül, akkor ilyesmire. SELECT csillag felhasználók, JOIN cipzárak ON felhasználók dot zip egyenlő cipzár dot zip. Ami egy kicsit bőbeszédű, Igaz, de ez csak azt jelenti, válassza mindent a folyamata fogadta a felhasználók tábla és az én cipzár asztalra. Csatlakozzon hozzájuk az egyik mező vannak oszlopban. Szóval, szó szerint csinál valamit mint ez, és add vissza új ideiglenes tábla ez szélesebb, ami nagyobb, amely az összes, a oszlopok mind a ketten. És ez egész egyszerűen lenne a szintaxis csinál ilyet. Szóval, itt van ez előtt, de ott lesz hogy más tervezési döntések azt is megtudhatod van, hogy nem csak indexek hanem fut be kihívásokat. Sőt, van egy kihívás bármilyen adatbázis-tervezési ahol néha két ember érdemes elérni ugyanazt a sorok az adatbázis asztalra. Szóval, ez valami, hogy mi lesz találkozás PSet7 is. De azt gondoltam, nézd meg az egyik támadást, hogy ez lehetséges SQL-ben. Melyek a felmerülő problémák? Szóval, akkor ez a találkozás a PSet7. És azt mondjuk nektek, hogy mi a végleges adásvételi kódolási megoldás erre a problémára az. De ha egy magasabb szintű osztály, különösen az operációs rendszerek, fogsz találkozni kérdés atomicitás, A probléma megoldását a teendő több dolog egyszerre megszakítás nélkül. És azt gondoltam, vezessék be ezt ötlete PSet7 egy metafora hogy tanultam magam Margo Seltzer a CS164 operációs rendszerek osztály évvel ezelőtt. Tegyük fel, hogy van egy ilyen kollégiumi hűtőszekrényeket a kollégiumi szobában, vagy ház, és van egy igazi rajong a tejet. És igen, akkor jött haza az osztályok egy nap, akkor nyissa meg a hűtőszekrény. Ó, a fenébe is. Nincs tej a hűtőben. Szóval, akkor zárja be a hűtőbe, bezárni az ajtót, lezárni a kollégiumi, járni a sarkon a CVS, hogy a sorban, és vizsgáljuk ki egy kis tejet. És ez meg fog tartani egy darabig, mert azok az átkozott önálló pénztár számlálók hogy örökre használja egyébként. Szóval eközben a szobatársam jön haza. Ő nagyon szereti a tej is. Jönnek a kollégiumi szobájában, kinyitod a hűtőt, ó, a fene egye meg. Nincs több tejet. Szóval, ő is megy a sarkon. De most, mert van, mint két vagy három vagy négy CVSes a közelben, történetesen megy egyik különböző is a téren. És így most, pár perc később mind a ketten jött haza, és pfuj, legrosszabb probléma valaha. Most már túl sok tejet mert ez fog menni savanyú. És szeretem a tejet, de Nem igazán szeretem a tejet. Tehát most, ez egy drága hiba, mert mind a ketten döntött alapján állapotban néhány változó, volt a folyamat módosításaitól akkor, kezdeményezője lesz, hogy a tej. Szóval, ami talán egy ember megoldás a problémára? Közönség: [hallható] DAVID MALAN: Hagyj egy megjegyzést, ugye? Mindig hagy egy megjegyzés, ha Ismerős a show. Igen, vannak ketten. Igen, mindig hagy egy megjegyzés, vagy Szó szerint zárolja a hűtőben valamilyen lakat, vagy valami fölött ilyesmi. De ez valóban lesz kulcsprobléma adatbázis tervezés, különösen, ha lehet, több böngészővel, több laptopok, több felhasználó összes próbál frissüljenek egyszerre. Különösen érzékeny információk mint a pénzügyi információk, ahol a kereskedelmi készletek weboldal, mint akkor lesz épület, mi van, ha szeretné ellenőrizni, hogy mennyi pénzt van, majd ha van elég, vásároljon néhány állomány? De mi van, ha valaki más, aki van egy közös számla veled egyszerre próbál vásárolni állomány? Szóval, ő ellenőrzi, a fizetési mérleg, mind a ketten vissza ugyanazon válasz, nincs tej. Vagy mind a ketten kapják vissza a választ, van $ 100 a számla. Mindketten megpróbálják a döntést vásárolni egy részvény egyes vállalatok részvényei. És most, mi történik? Van két részvények? Ön nincs részvények? Problémákat, mint amely akkor merülhet fel. Szóval, mi lesz találkozni, hogy. SQL injection támadások, szerencsére, valamit mi segítünk Önnek, de ezek atrociously közös ezekben a napokban még. Szóval, ez csak egy példa. Én nem azt állítja, hogy Harvard PIN rendszer kiszolgáltatott, amelyet az adott támadás. Próbáltuk. De, tudod, hogy mi van egy mező, mint ez. És Yale Net ID van egy hasonló keres képernyőn ezekben a napokban. És kiderül, hogy talán a PIN-rendszer került megvalósításra a PHP. És ha ez were-- ez nem-- ők Lehet olyan kód, ami úgy néz ki, mint ez. Van két változó. Add nekem a felhasználónév és jelszó a poszt szuper globális változó hogy beszéltünk korábban. Talán Harvard egy lekérdezés mint a SELECT csillag felhasználók ahol a felhasználónév megegyezik és a jelszó megegyezik. És észre, hogy én csak dugulás azt használó A kapcsos zárójel jelöléssel a másik nap, ami azt jelenti, csak csatlakoztatni kell egy értéket itt. Én nem használja a kérdőjel technika. Nekem nincs semmilyen második vagy harmadik érveket. Én csak szó építi a húr magam. A probléma azonban az, hogy ha valaki szeretne egy scroob, ami egy utalás egy film, bejelentkezik valami ilyesmivel, és én már eltávolították a pontok hogy általában fedezi fel jelszavakat, mi van, ha ő különösen rosszindulatú és a jelszót, talán 12345, egy a filmet a "Spaceballs" de kritikusan típusok a aposztróf után öt, akkor szó a szó vagy a területet, majd árajánlatot, idézet vége egy egyenlő idézet az egyik, de észre ő kimaradt, mi? Ő kimaradt az idézet a jobb és ő kimaradt az idézet, a bal oldalon. Mert ha ez a támadó scroob azon feltételezése az, hogy az emberek, akik azt írta Ezt a PHP kódot nem volt olyan fényes, Lehet, hogy csak egy kis egyszemélyes idézőjelbe interpoláció egy változó kapcsos zárójelek? És így talán, tudta milyen A teljes a gondolat számukra, de oly módon, hogy fog hogy hadd betört a PIN-rendszer. Más szavakkal, tegyük fel, hogy ez a kód és most már dugja be, mit scroob gépelt. És ez piros, mert ez rossz. És az alapjául szolgáló szöveget az, amit beírt, scroob lehetett becsapni Harvard szerver a építkezve egy SQL lekérdezés húr, hogy néz ki. Jelszó megegyezik 12345 vagy az egyik értéke egy. Melynek eredménye, logikusan, az, hogy ez fog jelentkezni scroob a ha a jelszó 12345 vagy ha egy egyenlő Egy, ami persze mindig igaz, ami azt jelenti, scroob mindig megkapja a. És így, ahogy rögzíteni Ez, mint a sok esetben, az lenne, hogy írjon több védekezésben. Használnunk, mint például a tényleges lekérdezés funkció, amely látni fogod PSet7, ahol dugó olyasmi, mint a kérdőjel van. És a szépség, a lekérdezés funkció, amit a Önnek ez megvédi ezeket a úgynevezett SQL injection támadások, ahol valaki megtévesztett a kódot intravénás saját SQL-kódot. Mert mi a lekérdezés funkció adunk majd ténylegesen, ha használja a kérdőjel szintaxis és egy második és egy harmadik érv itt, van ugyan mit adjunk a input, hogy a Felhasználó által megadott? Azok backslash idézi. Szóval, kiszabadul a potenciálisan Veszélyes karakter. Ez úgy néz ki, fura most, de ez nem sérülékeny mert nem módosítsa a logikát többé mert az egész jelszó Most egy idézet, nem, sőt, scroob jelszavát. Szóval, van némi vicc erről az évek során. Szóval, ez egy fénykép, Néhány stréber egy parkolóban ahol talán tudja, hogy néhány városban és az államok megpróbálja megkeresni a licenc lemez a számla kiállításához vagy jeggyel ha valaki átmegy nélkül, mint, Az E-Z Pass dolog. Szóval, ez az ember feltételezte, hogy talán Az emberek írásban az E-Z Pass rendszer nem volt olyan fényes, és talán ők Csak konkatenálva egy string, úgy, hogy ő nem tudott rosszindulatúan Nem csak befejezni a gondolatot, de ténylegesen végre egy rossz parancsot, amit már eddig nem beszéltünk, de valószínűleg kitalálni. Hogy amellett, hogy törölni, és helyezze be és frissítést, és válassza ki, van még egy kulcsszót nevű csepp, ami szó szerint mindent töröl az adatbázisban, amely Különösen rossz. Mi lehet nagyítani a ezt, ha ez egy kicsit nehéz látni. Ez, most, egy híres képregény ez csodálatosan okos most és érthető. [Nevetés] Igen, jó. Fajta geeking ki. Tehát ezek tehát azok SQL injection támadások. És annyira könnyű elkerülni segítségével A megfelelő kód, vagy a megfelelő könyvtárakban. És látni fogod a PSet7, ez miért adunk a lekérdezés funkció. Szóval, egy pár ízelítő hogy azt hittük, Önnek itt a mi fennmaradó percet együtt. Szóval, ahogy emlékszem hétről nulla, akkor bevezette a két lámpa, amely szép, nem csak azért, mert ők elég és színes, hanem azért, mert támogatni valamit úgynevezett API, egy alkalmazás Programming Interface És A CS50 eddig, most már főként összpontosított GET és POST, de kiderült, vannak más HTTP igék, mint a PUT. És valóban, ez volt diát a héten nulla ahol, ha írsz kódot küld A la PSet6 egy HTTP kérés, hogy így néz ki ezzel a darab szövegét az alján, amely az úgynevezett JSON, vagy a JavaScript Object Notation hogy fogunk beszélni, a jövő héten, akkor kapcsolja be, vagy kapcsolja ki, vagy változás A színes fények, mint azok. Tehát ha CS50 is amellett, hogy néhány e izzók itt New Haven ha szeretné kölcsönkérni őket a végső projektek, még néhány Microsoft Zenekarok, amelyek olyanok, mint karórák, hogy viseljen a csuklója köré hogy hasonlóképpen van egy API, így lehet írni a saját szoftver számukra. Van egy számlát Az Apple iOS kódot, így hogy ha van egy Apple Watch vagy iPhone vagy iPad vagy iPod, írhatsz kódot, valóban fut azokon. Van egy csomó A Arduinos, amelyek apró számítógépek nélkül esetekben, lényegében, hogy tud-e csatlakozni USB-n keresztül, jellemzően a saját Mac vagy PC, levelet kód, ami a következő fizikai készülékek, amelyek gyakran érzékelők rájuk így befolyásolja a valós világban. Van egy csomó A Leap Motion eszközök, amelyek USB-eszközök Mac és PC-k, itt és újra, New Haven. És ha már csak a Mac, akkor valóban ellenőrizni a számítógép írásával szoftver hogy infrán gerendák, kitalálja, ahol a humán keze, még ne érjen a billentyűzeten. Azt hittük, ossza gyors bepillantást ebben, például. [Zenelejátszási] Szóval, van egy egész csomó ezeket a dolgokat, is nevezett Myo karszalagot amit tegye át az alkar és akkor ellenőrzik a valós világ, vagy a virtuális világban, mint ez. [Zenelejátszási] Vagy, mi is van néhány Google Karton, ami szó, mint, Egy kartondobozban akkor vedd fel a arc, de dia hozzá a telefonját úgy, hogy a poharat a telefon igazán közel a szemed. És a Google karton elég olcsó 10 $ vagy 20 $. És ez a kis lencsék hogy kicsit off váltás A képet a képernyőn a humán szemét, hogy az Ön egyfajta mélység úgy, hogy valóban van egy 3D környezetben előtted. Mi is van néhány Samsung Gear, amely a drágább változata ezt, de amelyek hasonlóan csúszni egy Android telefon, és adja meg azt az illúziót of-- vagy hogy a tapasztalatok A virtuális valóság. És a mi utolsó két perc, azt hittük, próbálja ezt megtenni. Ha tudok vetíteni, amit Colton van Itt csak a fen az étvágyat, hadd menjen előre, és dobja akár a nagy képernyőn van. Hadd megöli a fényt. Colton, mit akar menni előre és tedd a sejt, egy pillanatra és gyere át a A színpad közepén? És akarsz project-- ez az, amit Colton lát. Most, a Wi-Fi itt Nem olyan erős ehhez az eszközhöz hogy ez a szuper lenyűgöző, de Colton szó ebben a varázslatos futurisztikus helyen. Ő csak azt látja egy képet. Látsz a bal és jobb szem hogy az agya is összefűzni egy három dimenziós környezetben az arcán. Ő csak egy kiválasztott menüpont itt. És így ismét visel headset egy Samsung telefon rajta, hogy ez vezeték nélkül tervezik a feje fölött. Most már a Marson, azt hiszem? COLTON: Azt hiszem, igen. Nem vagyok benne biztos [hallható]. [Nevetés] DAVID MALAN: Kiderült, A Mars ezeket a menüket. COLTON: [hallható] néhány hűvös helyen, ha azt akarjuk, hogy menjen az alábbiakra: DAVID MALAN: Hol akarunk menni? COLTON: [hallható] DAVID MALAN: És lássuk ahol Colton visz minket most. COLTON: [hallható] DAVID MALAN: Szóval, van olyan sok különböző helyeken, amit megtehetsz magad. Van FAPIs, amelyen keresztül lehet játék- és kölcsönhatások futni, végül a telefonon. Szóval, akkor tényleg csak írt egy mobiltelefon alkalmazást. De hála a szoftver és a grafikus képességek, most Colton ebben apró ház. És azzal a veszéllyel jár elsöprő magunkat, Colton és én sehova míg a végén osztály ma itt Ha azt szeretné, hogy jöjjön fel, és játszani. És mi hozza őket vissza a jövő héten is. Minden további nélkül ez minden, amit ma. Találkozunk a jövő héten. [ZENE - ragga ikrek, "rossz ember"]