[Glazbom] DAVID Malan: U redu, ovo je CS50. To je kraj tjedna osam. I danas, počinjemo ispuniti u nekim dijelovima kada je riječ o izgradnji stvari na webu. Dakle, podsjetiti da je u ponedjeljak trošimo puno više vremena na PHP, što je to dinamički programski jezik koji nam omogućuje izlaz, među ostalim stvari, HTML i drugi takav sadržaj da ćete želite vidjeti. Ali mi stvarno nije gledao kako idemo za pohranu bilo kakve informacije. Doista, gotovo ništa od toga super zanimljive web stranice koje posjetite i danas imaju neku vrstu baze podataka na stražnjem kraju, zar ne? Facebook sigurno pohranjuje puno podataka o svima nama i Gmail pohranjuje sve Vaše e-pošte. I tako, mnoge druge web stranice su ne samo Statični Sadržaj to je informativan. To je zapravo dinamičan, na neki način. Možete dati ulaz, to ažurira stranice za druge ljude. Dobivate poruku, šaljete poruke, i tako dalje. Tako danas, mi gledamo na bliže u podlogu projekta da ćete zaroniti u sljedeća tjedan, CS50 financija, koji je zapravo će imati što graditi nešto nije u C, ali u PHP-u. Web stranicu koja izgleda Malo se nešto ovako koji omogućuje kupnju i prodaju dionice koje su zapravo će privući na stvarnom vremenu stock podaci iz Yahoo Finance. I tako u konačnici, da ćete imati iluzija za sebe i za korisnike da ste zapravo kupnju i prodaju dionice i uzimajući gotovo u stvarnom vremenu ažuriranja, upravljanje portfelj, od kojih svi će zahtijevati vlasništvo, u konačnici, baza podataka korisnika. Dakle, u svojim riječima, pogotovo ako niste super upoznati s računalom znanosti ili baze podataka, što znaš bazu podataka kako bi se upravo sada, u netehniËkih smislu? Što je? Kako biste ga opisali se cimerica ili prijatelja? PUBLIKA: [nečujan] Informacije [nečujan] DAVID Malan: Dakle, popis podataka, ili store-- listu informacija da možda želite pohraniti o nečemu, poput korisnika. I što učiniti korisnici povezane s njima? Ako ste korisnik na Facebooku ili Gmail, što su obilježja da svi mi korisnici imaju? Kao, što bi moglo biti neke od stupaca u tablici u kojoj smo aludirao zadnji put? Jer opet, možete mislim baze podataka stvarno kao fancy Excel datoteci ili Google Spreadsheet ili Apple Brojevi datoteke. Dakle, što mislite o kad mislite korisnik? Što su? Što je to? PUBLIKA: Ime. DAVID Malan: Ime. Dakle, ako ime, kao što su David Malan će biti ime nekog korisnika. Što još korisnik ima? PUBLIKA: predočenje osobne iskaznice. DAVID Malan: predočenje osobne iskaznice. Dakle, kao što su matični broj, kao što je vaš Harvard ID ili vaš Yale Neto ID ili slično. Što drugo bi moglo korisnik ima? PUBLIKA: Lozinka. DAVID Malan: Lozinka, možda jednom adresa, možda broj telefona, možda adresa e-pošte. Dakle, postoji grozdove polja i to mogao vrsta spiralni izvan kontrole brzo, čim počnete realizirati, oh, neka je spremiti ova i neka je pohraniti ovo i ono. No, kako ćemo zapravo učiniti? Pa opet, mentalni model da su za danas kao što smo zaroniti u stvarni SQL, Structured Query Language, je baza podataka koja izgleda ovako. To je samo retke i stupce. A možete zamisliti Google tablice ili bilo koji broj drugih programa. No, ono što je ključno o MySQL, koji je baze podataka softver ćemo koristiti, slobodno otvoreno available-- Facebook koristi to i bilo koji broj ostalih websites-- Baza podataka pohranjuje stvari relacijski. I relacijske baze podataka samo znači onaj koji doslovno pohranjuje svoje podatke u retke i stupce. To je kao jednostavan kao taj. Dakle, čak i nešto poput Oracle koji možda su uglavnom čuli je relacijska baza podataka. A ispod haube ga, pohranjuje podatke u retke i stupce. I Oracle vam naplaćuje mnogo novca za to, dok MySQL optužbi ti ništa za iste. Dakle, SQL će nam dati najmanje četiri operacije. Sposobnost za odabir podataka, kao što su čitanje podataka, umetanje, brisanje i ažuriranje podataka. Drugim riječima, to su Stvarno četiri ključna poslovanje koji će nam omogućiti da promijenite stvari u tim redaka i stupaca. Alat koji ćemo koristiti danas posebno kako bi naučili SQL i igrati s njim opet zove PHP MyAdmin. To je tkanje temeljen alat. Ukupno slučajnost da to je napisano u PHP. Ali to će nam dati grafički korisničko sučelje, tako da možemo zapravo stvaranje tih redaka i stupaca a onda razgovarati s njima putem koda. Dakle, neka je sada početi ono što mislim da je iskreno vrsta procesa zabavu izgradnju stražnji kraj internetskim stranicama, dijelovi koji korisnici ne vidi, ali sigurno stalo, jer to je već data događa. Dakle, slično C i dodaje se malo manje kao PHP, SQL ili baza podataka koja podržava SQL, ima tipova najmanje ove podatke i grozdovima drugih. CHAR, VARCHAR, INT, BIGINT, Decimalni, i DATETIME. A tu je cijela hrpa druge značajke, ali neka je to učiniti način stvarnog primjera. Ja ću ići u CS50 IDE gdje je, unaprijed sam logiran i ja također sam posjetio URL Ovaj alat se zove PHP MyAdmin. A problema postaviti sedam, mi ćemo reći točno kako doći do tog sučelja kao. Na gornjem lijevom kutu, primijetiti da kaže predavanje. A to samo znači da unaprijed, sam stvorio prazna baza zove predavanje da nema tablice u njemu još. Nema redaka i stupaca. Jer prvi što ćemo učiniti se početi stvoriti tablicu koje će pohraniti svoje korisnike. Dakle, doslovno preko Ovdje na desno, ja sam će reći baze podataka Želim stol pod nazivom korisnicima. Dakle, to je kao da ja datoteke Želite pohraniti sve moje podatke u. A koliko stupaca? Pa, neka je i dalje ostane jednostavan za sada. Samo želim pohraniti poput ime i naziv za korisnika. Počet ćemo mala. Dakle, želim dva stupca ukupno. I ja ću ići naprijed i kliknite Idi. A onda, za njih stupaca, što ću da do-- ako ovim internet cooperates-- sve u redu, pa ćemo opet pokušati. Idem stvoriti tablicu pod nazivom Korisnici s dva stupca, kliknite Idi, OK. Sada imamo to jako brzo. Hvala vam, vrlo dobro učinio. U redu, tako da ono što želimo Ovi stupci se zove? Dakle, on će se zvati ime. Dakle, sve što vidim here-- i sučelje iskreno dobiva malo ružno na kraju, Jednom kada počnete upisivati ​​u svim tim podacima. No, ono što je lijepo je da vrsta paradoksalno, sam stvara kolone, ali alat ima glupo postavio ih u redove tako da mogu konfigurirati te stupce. Dakle, postoje dva praznine tamo pod Name. A jedan od tih područja I želim se zove imenom, a druga polje Želim nazvati ime. A sada moram odabrati vrste podataka za te stvari. Dakle, dok je u programu Excel i Google Proračunske tablice, Ako želite stupac, doslovno samo upišite ime ili korisničko ime, pritisnite Enter. Možda je podebljana napraviti samo za jasnoću, ali to je to. Ne odrediti vrste stupovima. Sada u Google ili Excel, možda odrediti kako se podaci donesena. Ti bi mogao ići na izborniku Format, a vi Možete odrediti pokazati kao znak za dolar, pokazati kao Krajnja vrijednost. Dakle, to je sličan u duhu da je ono što smo o tome da radimo, ali to se zapravo događa na snagu podaci biti određena vrsta. Sada, iako je trenutak prije sam rekao da postoji samo nekoliko vrsta podataka, tu je zapravo puno, a oni su u različitim stupnjevima specifičnosti. I usput, ti Možete čak napraviti ukrasni stvari kao i skladišnih geometrija unutar baze podataka. Možete pohraniti stvari poput GPS koordinate i zapravo naći, matematički, Točke koje su u neposrednoj blizini drugih. Ali ćemo zadržati ovu super jednostavno i idite do ovdje, sve takozvani tipa string. Dakle, ovdje je popis od a cijela hrpa opcija. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. I to je vrsta neodoljiv. I na žalost, nešto paradoksalno u C, char nije stvarno CHAR. Ako ste naveli u bazi podataka da je vaš tip podataka CHAR, to znači da da, to je CHAR, ali to je jedan ili više znakova. I morate navesti koliko znakova želite. Dakle, ono što je tipično Duljina za korisničko ime? Postoji li ograničenje obično? PUBLIKA: [nečujan] DAVID Malan: 16 možda? Nešto kao to. Znaš, vratiti u dana, što je nekad bilo osam. Ponekad je 16, ponekad to je čak i više od toga. I tako, to ne znači daj mi jedan znak. To znači da moram navesti duljina polju, i sad bih mogla reći nešto poput 16. I tu je trgovina off ovdje. Dakle, vidjet ćemo za koji trenutak to znači da je jedan, svaki korisničko ime mora biti 16 znakova. Ali čekaj malo, M-a-L-A-N. Ako je to moje ime i ja sam samo pomoću pet, što bi predložiti da se baza podataka učiniti za ostale 11 znakova koji Ja sam rezerviran prostor za? Što bi ti napravio? PUBLIKA: [nečujan] DAVID Malan: Da, samo bi ih sve null. Napravite im mjesta. No, vjerojatno null, tako Mnogo kose crtice nula. Dakle, s jedne strane, mi smo Sada su sigurni da moje korisničko ime može biti više od 16 znakova. A druga strana koja je da, ako sam imao jako dugo ime ili htjeli stvarno dugo korisničko ime kao što neki od vas dečki možda u tom faksu ili na Yale.edu, ne možete imati jedan. I tako, u stvari, ako ste nikad registrirana za web stranicu a vi dobiti vikao na rekavši vaša lozinka je predugačak ili vaše korisničko ime je predugo, to je jednostavno zato programer, kada konfiguriranje svoje baze podataka, odlučili da će ovo polje biti duži od ove duljine. U redu, što ako ćemo nastaviti na ime? Koliko Ukoliko Ime tipičan ljudski je se? Koliko znakova, 16? Ja sam guessing smo mogli naći nekoga u ovoj sobi gdje njegov ili njezin prvi plus zadnjem Naziv je duži od 16 znakova. Dakle, što je bolje od toga, 17? 18? 25? Veći? 30? PUBLIKA: [nečujan] DAVID Malan: 5000, Bože moj. Dakle, to je vjerojatno pristojan gornju granicu, reći ćemo. I ovdje smo vrsta ima da sud poziva. Kao, nema pravi odgovor ovdje. Beskrajno nije baš moguće, jer smo na kraju će have-- smo će ostati bez memorije. Dakle, moramo napraviti sud poziva u nekom trenutku. Vrlo često će biti, na primjer, da use-- i neka mi navesti CHAR ovdje kao before-- 255 je doslovno gornja granica ovog softvera baze podataka godinama prije. I tako, puno ljudi Samo će reći, u redu. 255 je granica. Ajmo koristiti maksimum. I to je prilično smiješno. Kao, ako pišete netko naziv za 200 plus znakova, da malo smiješno. No, ne zaboravite da ASCII nije jedini sustav za likove. I tako, pogotovo u Puno azijskih jezika gdje ima likova ne možemo izraziti na klavijaturama poput moje SAD tipkovnica, neki likovi zapravo uzmi 16 bita umjesto osam bitova. I tako, to je zapravo nije sve što je nerazumna da trebamo više Prostor ako želimo stati veći likovi nego samom SAD centric one koje smo skloni da raspravljati. Dakle, trebamo neke gornja granica. Ne znam što je najbolje on je, ali 255 je općenito čest jedan. 25 osjeća nisko. 16, 32 osjećate niska. Ja bih griješiti na strani nešto više. No, tu je trgovina off, kao i uvijek. Što je, možda, očito trgovina off rezerviranje 255 znakova za svačiji ime u mojoj bazi? PUBLIKA: [nečujan] DAVID Malan: Što je to? PUBLIKA: [nečujan] DAVID Malan: To je puno memorije, zar ne? M-A-L-A-N. Upravo sam gubio 250 likovi jednostavno pohraniti svoje ime obrambeno, samo u slučaju da netko u razredu ima jako dugu ime. To izgleda kao nepotrebnog tradeoff. Dakle, ispada da SQL, taj jezik baze podataka, zapravo podržava nešto zove VARCHAR ili Promjenjiva CHAR. A to je vrsta lijepo u da je ovaj omogućuje vam da odredite nije fiksna širina, nego varijabla širina. I još točnije, Maksimalna širina područja. Dakle, to znači da ime može biti više od 250 znakova, ali svakako može biti manje. A baza podataka će biti pametni. Ako ne stavite u M-a-L-A-N, to će samo koristiti pet, možda šest bajtova za slično prateći null karakter, a ne provesti dodatna 249 ili 250 bajtova potrebe. Dakle, ovo izgleda kao da sam trebao su počeli s ovom pričom. No, tu je uvijek tradeoff. Dakle, s jedne strane, korisničko ime Ive navedeno da se teško kodirani na 16, a možda to nije pravo poziv, možda ga je, ali zašto ne koristiti VARCHARs za sve? Ona postoji s razlogom. Zašto ne koristiti VARCHARs i za svaku čija je duljina ne znate unaprijed Ako se čini da je velika stvar, zar ne? Koristite samo što više prostora morate do ove granice? PUBLIKA: Sporiji. DAVID Malan: Speller? PUBLIKA: to čini sporije? DAVID Malan: Oh, to je sporije. Dobro, to je gotovo uvijek odgovor, iskreno. Kao što je tradeoff? To bilo košta više prostora ili to košta više vremena. Dakle, u ovom slučaju, to može biti sporije. Zašto? PUBLIKA: [nečujan] utvrđivanje [nečujan]. DAVID Malan: Dobro. Dakle, možda ćete se sjetiti s čak PSED5, igranje s pristupom u rječnik, ako imate alocirati memoriju dinamički ili zadržati uzgoju pufer, koji zapravo može biti spor. Ako imate nazvati malloc ispod haube, a možda to je ono što MySQL radi, tako da sigurno da bi mogao biti slučaj. A ako mislite način natrag na PSet-- ili čak tjedna dva, kad smo radili stvari kao binarno traženje ili čak linearno pretraživanje, jedna od lijepih stvari o svakoj riječi u bazi podataka ili svaku riječ u stupcu što točno iste duljine, čak Ako cijela hrpa onih znakova prazno, je da možete koristiti izravnim pristupom na vašim podacima, zar ne? Ako znate da je svaki Riječ je 16 znakova daleko, možete koristiti pokazivač aritmetiku, tako da govoriti, i ići s nama 16, 32, 48, 64, a vi jednostavno možete skočiti odmah pomoću aritmetičke bilo riječi u vašoj bazi podataka. Dok ako je VARCHAR, što ti umjesto morate učiniti? [Zvonjava telefona] Ako je VARCHAR, što Ne mogu koristiti slučajni pristup. Što morate tražiti ili učiniti? Da? PUBLIKA: [nečujan] DAVID Malan: Pogledajte kroz whole-- traga kroz cijeli popis u potrazi za što, najvjerojatnije? Kakve posebne vrijednosti? PUBLIKA: [nečujan] DAVID Malan: Tražim za nultu terminatora da razgraničenje razdvajanje riječi. Pa opet, tradeoff i nema pravi odgovor. No, ovo je mjesto gdje, pogotovo kada korisnici doći do biti mnogo i tvoj teret na svojim serverima je broj ljudi koristi se dobiva visoka, To su zapravo Netrivijalno odluke. Dakle, možemo ostaviti ih kao ovaj, ali neka je spustite na to pravo ovdje. Sada postoji nekoliko stupaca gdje moramo napraviti sud poziva. Ima li smisla dopustiti korisnik je ime, korisnički korisničko ime ili korisnički a ime, da bude nula? To je, jednostavno prazan. Osjeća malo besmisleno, pa sam Ne ide to provjeriti one kutije. Ali ispada u baze podataka, možete reći, netko može po izboru imati tu vrijednost. Ovaj stupac nema zapravo biti tamo. Zatim, tu je ovaj padajući izbornik. I primijetiti još sam u prvom redu tu, pa ja govorim o korisničkim imenom sada. I ispada da je baza podataka, za razliku od jednostavnog puke tablice, ima snažne značajke zove indeksa. I indeks je način da govore Baza unaprijed da ja, ljudski sam pametniji od tebe. Znam što vrste upita, odaberite ili umetnuti ili izbrisati ili ažurirati, da moj broj ide do kraja se radi na ovoj bazi podataka. Želim pročitati puno podataka. Želim umetnuti puno podataka. Želim da stalno Brisanje puno podataka. Ako znam da ću biti Pristupom polje kao Username puno, Ja preventivno može reći baze podataka, znam više od tebe, a ja želim da se dekretom trebali Indeks ovo područje. Gdje indeksiranje polje ili stupac znači da je baza podataka u unaprijed trebali posuditi neke ideje iz, kao što su, Tjedan četiri i pet i šest od CS50 i zapravo izgraditi nešto kao binarnog pretraživanja stablo ili nešto obično naziva B stablo da bi saznali u klasi kao CS124 na Harvardu, An algoritmi klase, ili bilo koji drugi broj mjesta. Baza podataka i pametna ljudi koji ga provode će shvatiti kako za pohranu da tablica podataka u memoriji tako da pretraga i ostali poslovi su super brzo. Ne moraš to učiniti. Ne morate provoditi linearni traži ili binarno traženje ili spojiti vrsta ili odabir vrsta, ništa od toga. Baza to radi za vas, ako kažem to preventivno indeks ovo polje. A možete vidjeti, postoji neke druge osobine možemo reći baza podataka za provedbu. Što bi to značilo da sam odabrati jedinstvene iz ovog izbornika, jednostavno intuitivno? Da? PUBLIKA: [nečujan] DAVID Malan: Da, korisničko ime mora biti jedinstveno. Je li to dobra stvar ili loša stvar za baza podataka, za web stranice s korisnicima? Ukoliko korisnička imena biti jedinstveni? Da, vjerojatno. Ako je to ono što je Polje se koristiti za prijavu, ti stvarno ne želim da ljudi imaju isti osjećaj ili isto korisničko ime. Dakle, možemo imati Baza provoditi tako da da je sada u mom PHP koda ili bilo kojem jeziku, Nemam se, na primjer, provjerite nužno radi ovaj korisničko ime postojati prije nego što sam neka netko registrirati? Baza podataka neće dopustiti dvije osobe po imenu David ili Malans registrirati u ovom slučaju. I usput, iako je to Izbornik samo vam omogućuje da odaberete jedan, jedinstveni indeks je onaj koji je indeksirane za super brzi nastup, ali ona također provodi jedinstvenost. A mi ćemo se vratiti na ono što je Druga dva znače u samo trenutak. U međuvremenu, ako ja ići na moj drugi red, koji korisniku je ime, trebam navesti da ime treba biti jedinstven? Ne, zato što bi svakako have-- nema dva Davida Malans u ovoj sobi, najvjerojatnije. Ali ako ćemo odabrati drugo ime, mi sigurno može imati sudara. Razmislite hash tablice i slično. Dakle, mi sigurno ne želite da je polje ime jedinstven. Dakle, samo ćemo ostaviti da kao crtica, crtica, crtica, ništa. I ja ću otići sve ostalo sam. Doista, većina tih područja nećemo morati brinuti o tome. A kada sam spremna za spremanje ovaj, ako je internet surađuje, Ja kliknite Spremi, a vrlo, vrlo, vrlo Polako se baza podataka biti spašen. I sada sam natrag na ovaj sučelje, koje doduše, je neodoljiv na prvi pogled. Ali sve ću učiniti je kliknuti na riječi korisnike u gornjem lijevom kutu. Ja ću ići ovdje, kliknite Korisnici i po defaultu, to je izvršiti neku SQL, ali više o tome u ovom trenutku. Evo samo sažetak onoga što sam učinio. I ne brinite da vidite spomenuti latinski i švedski ovdje. Oni su samo zadana Postavke jer MySQL izvorno, ili PHP MyAdmin, jedan od dvojice dogodilo treba napisati neki švedskih ljudi. Ali to je nebitno u našem slučaju ovdje. U redu, pa zašto je sve ovo zanimljivo? Ispada, mogu umetnuti podatke u bazu podataka od strane pisanja koda. A ja ići naprijed i u mom datoteku ovdje, ja sam ići naprijed i praviti se kao to je priključena na toj bazi podataka, koja to nije u ovom trenutku, ali to će se biti kad dođemo do problema postaviti sedam. I ja ću ići naprijed i izvršiti funkciju pod nazivom upita, koje ćemo vam dati problema postaviti sedam distribucija koda, koji traje najmanje jedan argument, što je samo niz. Niz SQL koda. Dakle, vi ste o kako bi naučili kako Napiši Structured Query Language. Ako želim umetnuti novi redak u mom Baza zato što je netko podnio oblik mom kodu, ja bih doslovno Napiši INSERT INTO korisnike sljedeće polja: Korisničko ime, zarez, naziv, vrijednosti, i sad mi treba umetnuti nešto poput Malan i citat, citat 'David Malan. A sada čak i za one koji nisu upoznati s SQL, zašto sam koristeći jednostruke navodnike unutar ovog zelenog string? Ono što bi moglo biti razlog ovdje? Obavijest sam ko-druženje dva jezika. Upita je PHP funkcija, ali to traje argument. I to je argument mora biti sama napisan u drugi jezik zove SQL, Structured Query Language. Dakle, sve što sam Upravo ovdje istaknute je taj jezik zove SQL. Dakle, što je s jednostrukim navodnicima, jednako brzo provjeriti razum? Samo naprijed. Oni su žice. Dakle, citat, citat Malan i citat, citat David Malan su žice. I baš razmišljam intuitivno sada, znajući što znate o C i PHP, zašto ne to, što ja obično Korištene dvostruki navodnici za žice? Zašto ja ne želim to učiniti? Da? PUBLIKA: [nečujan] DAVID Malan: Točno. Zato sam već pomoću dvostruki navodnici na putu izvan argument na PHP funkcije, Ja bi samo zbuniti tumača. Ona neće znati, zar ovi idu zajedno? Nemojte to idu zajedno? Nemojte to idu zajedno? Dakle, ja izmjenjivati ​​umjesto. Ili sam mogao učiniti nešto ovako, backslash citat ili backslash citat. Iskreno, da je samo počne dobiti vrlo nečitak i ružno. Ali to bi se postigla isti rezultat kao dobro. Dakle, ako su za izvršenje ovog upita sada, da vidimo što se događa. Idem ići naprijed i sada radije nego izvršavanje PHP kod, koji je mjesto gdje ćete igrati u problemu postaviti sedam, Idem umjesto otići u PHP MyAdmin. A ja ću ručno ići na SQL kartici, i neka mi uvećanje na sučelju. I ja ću zalijepiti u stvar sam upisali. A kodiranje boja ima promijenio malo sada, Samo zato što su formati programa stvari malo drugačije. Ali primijetite da je sve što sam učinio je sam rekao, umetnite korisnike. Ja sam navedeno, a zatim, u zarez odvojeni zagradi popis dvoje polja koje želim umetnuti, i onda sam doslovno sam rekao vrijednosti slijedi još jedan navodnik, a zatim su te dvije vrijednosti Želim plug-in, i Sada za dobru mjeru, Ja ću staviti zarez na kraju. Dakle, ovo nije C. Ovo nije PHP. To je sada SQL, i ja sam ga zalijepiti u ovom web-temeljen sučelje koje je Samo će me pustiti, čim sam kliknite Idi, izvršiti ovaj upit na bazu podataka trčanje unutar CS50 IDE. Dakle, to je dobro. Obavijest da je rekao jedan red umetnuta, otišao super brzo, 0.0054 sekundi umetnuti te podatke. Dakle, to zvuči prilično zdrava. To preoblikovati svoj upit mi ovdje samo da ga vidim u kakve boje kodirane verziji. Ali sada, ako ja kliknite Pregledavanje, primijetiti da, čak i iako ima puno nereda na zaslon, moj stol sada ima dva reda. Dakle, neka mi ići naprijed i učiniti drugi. Umjesto toga, neka me ići na SQL kartici opet. I ovaj put ću ubaciti nešto poput Rob i ime će mu biti Rob Bowden. Bowden. Idemo kliknite Spremi. Ups, a Go. Ponovno kliknite Pregledaj, a Sada primijetite Imam dva reda. Dakle, ovo je samo način složeniji način otvaranja Google tablice i samo upisivanjem red u koloni. No, ono što je ključno je da sada imamo sintaksu s kojima pisati kod, tako da u konačnici, mogli bismo zapravo učiniti nešto i to. Sjetite se da PHP podržava super globalne varijable. Što je unutar dolara prijaviti podcrtavanja doći u PHP-u? Uzeli smo pogled na jedan ili dva jednostavna primjera. A u PSet6, podsjetiti imate pozdrav dot PHP koji koristi ovu varijablu. Što se tamo? Ili što je to? Malo glasnije. PUBLIKA: [nečujan] DAVID Malan: To je snijeg Sjeme polje, koje je samo fancy način govoreći niz koji ima ključ parove vrijednosti. A ključevi nisu numerički. Oni su riječi ili žice. A Naime, ono što su oni ključni parova vrijednosti? Odakle su došli? Žao nam je? PUBLIKA: [nečujan] DAVID Malan: Ne? Gdje one ključ vrijednost parova dolaze iz? Reci opet? Opet? Jesam li ja jedina rasprava nešto? [Smijeh] To je točno, zar ne? PUBLIKA: [nečujan] DAVID Malan: Da, dolaze iz upitom. Dakle, ako ste natrag u vrijeme da kad smo igrali sa Google a mi smo otišli na google.com slash Traženje upitnik q jednak mačke, ako bih pritisnite Enter, a ako Google je implementiran u PHP, PHP kod koje Google pisao će imati pristup znak za dolar naglašavaju dobiti unutar kojih ključni je nazvao Q i vrijednost nazivaju mačke koje onda može koristiti koristiti za napraviti stvarnu pretraživanje s. Dakle, u stvari, što ću sada je vratiti se mojoj PHP koda da opet ćete vidjeti više u PSet7. I umjesto plugging u tvrdim kodiranih vrijednosti koje ne izgleda poput Vrlo dinamična web stranice, Ja ću vam dati teaser za što vaš stvarni broj će učiniti. Ti bi stavio u dva Pitanje obilježava ovako. Ne znam što je korisničko ime je. Ne znam što je Naziv će biti, ali ja znam da mogu dobili ih dinamički. Dakle, ako kod pišemo sada kod trčanje na Googleovim poslužiteljima, ili ako je to zdravo dot PHP, koji dolazi s PSet6, Idem proći u funkcija upit baš kao printf, druge dvije tvrdnje. GET, citat, citat korisničko ime, i dobiti, citat, citat ime. A sada, primijetiti što se Opća struktura je ovdje. Imam na lijevoj ruka strana poziva, ova funkcija zove upit u PHP. Još uvijek imam kao prvi argument, samo niz teksta. Ali taj komad teksta pisani jezikom zove SQL. I iskreno, to nije veliki jezik. Mi samo će govoriti o je službeno danas, stvarno. A onda je u problemu postaviti sedam, postoji relativno nekoliko značajki koje smo će utjecati. Pitanje maraka, međutim, znači priključiti vrijednost i ovdje priključak u drugoj vrijednosti ovdje. I napomena, ja sam izostaviti ono iz cijelog quote-- Damn it-- oko kotaciju obilježava ovaj put. Ja sam izostavljen citat Oznake oko upitnikom, Žao nam je, ovaj put okolo. Dakle, ono što je lijepo o tome upitnik značajka koja PHP sklon podržati, Ruby i Python i drugih jezika, to samo znači utikač u nekim Cijenimo ovdje i znate što? Vi shvatiti da li koristiti jednostruke navodnike ili dvostruki navodnici. Nemojte me gnjaviti s onima intelektualno nezanimljiv pojedinosti. Ali, uvjerite se da je točna tako da je moj broj je u konačnici operativni i sigurno, što će imati značenje prije dugo. Sada, koliko argumente iznositi, samo da biti jasan, je upita funkcija uzimanje? Svatko želi glasati za više od dva? Tri? Naravno, zašto? Zašto tri? PUBLIKA: [nečujan] DAVID Malan: Točno. Prvi dio je niza. Drugi argument je dolar znak naglašavaju GET nosača korisničko ime. I treći argument je Ista stvar, ali samo ime. Tako je u drugim riječima, sada ako sam imao web obrasca koji je morao tekstualnih polja, jedan za korisnika korisničkim imenom, jedan za njegovo ili njezino ime, samo kao što će vidjeti u web stranicu kada se registrirate za neke web stranice, to može biti kod na stražnjem kraju da zapravo radi umetanja sada u bazu podataka. Sada za razliku od, idemo brzo naprijed. Pretpostavimo korisnik je sad prijavite i želite napisati PHP kod koji provjerava je li osoba koja je samo prijavljeni je zapravo korisnik, možete koristiti prilično jednostavne sintakse. Možete reći SELECT, recimo star, gdje zvijezda znači sve. Ne znam što bih žele, pa samo mi daj svi stupci iz tablice zove Korisnici gdje je, i to je lijepo. Odaberite podržava ono što je zove predikat, što je kao način kvalificiranja ono što želite. Gdje korisničko ime jednako citat, citat Malan. Tako i ovdje, ja sam ugrađeni unutar argument na PHP funkcije, liniju SQL koda. I to SQL kod ova Vrijeme je doslovno ide tražiti citat, citat Malan. Sada to nije sve što je korisno, pa ću preskočiti da i ja ću staviti daleko Ovaj savjet iz Brady, i otići i plug-in umjesto pitanje oznaka ovdje. Dakle, samo da bude jasno, ono trebalo mi je drugi argument se ako je netko upravo prijavljeni i ja provjeriti da li je on ili ona je zapravo korisnik? PUBLIKA: [nečujan] DAVID Malan: Da. Čujem znak za dolar podvlačenje Pošalji citat, korisničko ime. I to bi trebalo vratiti na mene bilo koji od redova u mojoj bazi koji imaju korisničko ime Malan. Sada, nadamo se, da ću se vratiti nula ako Malan je ovdje nikad nije bilo, ili jedan ako ima. Ne bi trebao dobiti natrag dva ili tri ili četiri. Zašto? PUBLIKA: [nečujan] DAVID Malan: Rekao sam jedinstven, zar ne? Jednostavan razlog. Zato sam rekao da je dobio biti jedinstven, baš logično, možete imati samo nula ili jedan Malans u ovom konkretnom baze podataka tablice. Sada kao stranu, samo da ste vidjeli da, iako sam i dalje koristiti GET i iako PSet6 samo koristi GET, sigurno možete imati POST. I podsjetiti da je još jedan post tehnika za podnošenje podataka od oblika, ali ne prikazuju se u URL. To je malo više siguran sigurno za stvari kao što su korisnička imena i lozinke, koji PSet7 će, u stvari, uključiti. Dakle, neka je to u PHP MyAdmin i vidjeti što se događa. Ja ću ići na karticu MySQL. I obavijest da je zadanu vrijednost za PHP MyAdmin, samo pokušati biti od pomoći, je odabrati zvijezdu od korisnika gdje je jedan. Pa, on je uvijek istina, pa ovo je glup snazi samo odaberite sve. Ali ću biti malo više pedantan i ručno upišite se SELECT zvijezdu od korisnika. Sada tehnički, možete citirati naziv tablice. To je rijetko da morate, ali primijetiti to nisu normalne citati o američkoj tipkovnici. To je tzv backtick, koji uglavnom na gornjem lijevom rukom kutak tipkovnici. Ali to je rijetko da ćete zapravo treba gnjaviti s tim, tako da sam samo ću ih izostaviti svejedno. Tako sada, neka mi ići naprijed i udario ići. A koliko redova trebam dobiti kad sam odabrati zvijezdu s korisnicima? PUBLIKA: [nečujan] DAVID Malan: Broj redaka, sigurno. No, koliko je u ovom beton priča upravo sada? Drugo, zato što je ja i bilo je Rob. Dakle, ako ja kliknite Idi, vidim da je vizualno Ja sam dobio natrag, dapače, dva reda. Postoji mnogo nereda na zaslon, ali ja vidim samo dva reda. Nasuprot tome, ako ja to učiniti opet i raditi SELECT zvijezda od korisnika, gdje korisničko ime jednak citat, citat Malan, sad ako ja kliknite Idi, Ja sam samo ide da biste dobili leđa jedan red. I na kraju, ako to učinim nešto kao što je ovaj, pretpostavljam da ne brinu o uzimajući sve, koja je vrsta besmisleno sada, jer ima samo dvije kolone. To nije kao ja odabirom ogromna količina podataka. Pretpostavimo da ići naprijed i Ne SELECT ime FROM Korisnici, gdje korisničko ime jednako je Malan, što je lijepo o SQL iskreno, je da zapravo samo radi što to kažem. To je prilično kratak, ali doslovno samo ga reći ono što želite učiniti. Odaberite naziv od korisnika gdje korisničko ime jednak Malan. I to je uistinu tako eksplicitno. Dakle, sada, ako sam pogodio Idi, koliko Redovi ću dobiti natrag? Jedan, jer to je samo Malan, nadam se. Ili nula ako nije postoji, ali maksimalno. A koliko stupaca ću dobiti natrag? Koliko stupaca? Ovaj put, samo sam ću dobiti jedan jer nisam odaberite zvijezdu, koja je sve. Sada sam odabirom samo ime, pa sam samo dobiti natrag jedan stupac i jedan redak. I to izgleda nekako prikladno smiješno, samo gleda super Mali ovako. Dakle, ono što se zapravo događa? Kada izvršiti SQL upita pomoću odabir, što ste uzimajući natrag iz baze podataka je kao privremena tablica s redaka i stupaca, možda, ali to izostaviti ništa što nije zapravo izabran od strane vas. Dakle, to je kao da je netko imao veliki Proračunska tablica svih studenata registrirana za neke Student grupa, a ti kažeš, daj mi sve brucoš koji ste registrirana za naše studentske grupe, što Vaš kolega u Student grupa može učiniti se oni samo mogli predati što je cijela proračunska tablica. To je kao da kažete odaberite zvijezdu. I to je malo neugodno ako samo htjela brucoš. I tako, ako umjesto toga, rekao je, odaberite zvijezda iz tablica baze podataka gdje godišnje jednak citat, citat brucoš, to je kao da je tvoj prijatelj u studentskoj grupi doslovno je istaknuo i kopirati samo prve redove, ih zalijepiti u novi Google Spreadsheet ili Excel datoteke, i ti predao natrag Nastala je samo datoteku. To je sve što se događa na konceptualno ovdje. Tako je na kraju, možemo učiniti neke prilično ukrasni stvari spremanjem stvari poput korisničkih imena i lozinke i slično. No, ispostavilo se, da radimo malo drugačije od toga. To nije toliko pametan da je samo pohraniti korisničko ime i lozinku. Netko je ranije, mislim ovdje, predložio ID. Sada osobna mogao biti poput Harvard ili Yale ID neto ID, ali to bi mogao biti još jednostavnije u našem slučaju baze podataka. I doista, čest slučaj je još jedan stupac. I ja ću otići naprijed i urediti tablicu. A ako se poigrati s Ovo sučelje za PSet7, vidjet ćete da možete provjeriti Ovaj gumb je ovdje i dodajte polje na početku tablice. I sad ako ja kliknite ići, to se događa da mi daju jednu od tih oblika od ranije. Idem dodati polje nazivom ID. I ja ću ga numerički tip napraviti. Imam hrpu vrijednosti za Brojevi. Samo ću odabrati INT i Ne brinite o različitih veličina. Nemam odrediti duljina ili vrijednost, jer će biti 32 bita bez obzira. Značajke, nismo vidjeli prije. Svako zanimanje bilo koji od ovih opcije izbornika ovo vrijeme? Za INT? Što predlažete? Ne? Da li bilo koji od ovih smisla? Da. Da, nepotpisana, zar ne? Općenito, ako ćemo dati svi jedinstveni broj koji gdje je ova priča ide, ja stvarno samo želim osoba ima broj kao nulu i jedan i dva i tri i četiri. Ne trebam nositi s negativnim brojevima. To samo izgleda kao nepotrebnog složenosti. Želim četiri milijarde mogućih vrijednosti, ne četiri milijarde mogućih vrijednosti, tako da sam samo udvostručen Kapacitet moje INT. Kao na stranu, ako želite da se odnose to nešto poput Facebooka, povratak u vrsti mom dana kada Facebook prvi iziđe, Vjerujem ono što su bili korištenjem u MySQL bazu podataka trgovinu korisnik je identifikator, bio samo INT. Ali, naravno, tu je mnogo od stvarnih ljudi na svijetu. Ima puno lažnih Facebook račune na svijetu. I tako na kraju, Facebook potopilo veličina int, A četiri milijarde vrijednost. Koji je razlog zašto, ako pogledate oko sebe i tu je web stranica koji vam mogu reći što vaš jedinstveni ID. A ako nikada izabrao ime u Facebook, vidjet ćete svoj jedinstveni ID. Mislim da je to profil dot PHP Upitnik ID jednak nešto. To je sada nešto kao velika INT, ili dugo dugo, ako hoćete, što je 64-bitni vrijednost ili nešto usporedivo. Dakle, čak iu stvarnom svijetu učiniti te Problemi u konačnici ponekad smeta. I ispada ovdje, ako sam dajući sve moje korisnika jedinstveni ID, Želim biti super eksplicitno i minimalno bi ovo polje jedinstven. Ali ispada da postoji jedna komad nomenklatura i danas to je primarni ključ. Ako ste projektiranje baze podataka stol i unaprijed znate da je jedan od stupova na tom stolu treba i da će jedinstveno identificiraju redaka u tablici, želite navedite ga i reći baze podataka, ovo je moj primarni ključ. Tu bi moglo biti duplikati u drugim područjima, ali ja govorim da je to baza podataka je moj primarni, moje najvažnije područje, koji je zajamčeno da budu jedinstveni. Sada, to se čini suvišan. Ja sam sada predlaže da smo dodati, klikom na Spremi ovdje polje called-- i idem ići naprijed i kliknite AI, mi ćemo se vratiti da je u trenutku, Spremi. Predlažem da sada moj stol izgleda ovako. Imam polje INT nazivom ID, polje CHAR zove ime, polje VARCHAR zove ime, ali ID, ako je primarni i stoga jedinstvena, zašto sam baš otpada Vrijeme uvođenja što učinkovito je drugi jedinstven Polje naziva ID koji je int? Korisničko ime, podsjetimo, bio Već jedinstven, rekli smo. Tako je samo logično, ne trebate bilo koju bazu podataka iskustvo razloga kroz to, zašto Možda sam uveo int kao moj jedinstveni identifikator kao i? Što this-- kažem opet? PUBLIKA: [nečujan] DAVID Malan: Slučajna Pristup je lakše, zašto? PUBLIKA: [nečujan] DAVID Malan: Da, to je Samo pristupanje brojeve. Dakle, ako mislite da je to doista je stol, kao što je niz, sada imam jedinstvene identifikatore da mogu skakati. I bolje od toga i dalje je da je Koliko je velik int će biti opet? 32 bita ili četiri bajta. Koliko velika je moje korisničko ime će biti? Maksimalno? 16 bajtova. Dakle, ako ste stvarno briga o performanse vašeg koda, mislim natrag PSet5, biste li radije za traženje vrijednosti četiri bajta ili 16 byte vrijednost, zar ne? To je uistinu tako jednostavno. Vi morate učiniti četiri puta više posla tražiti korisničkih imena jer su oni 16 bajtova. Dakle, morate doslovno usporediti sve 16 bajtova se jeste da, ovo je korisničko ime želim. Dok za INT, možete to učiniti sa samo četiri bajta. I usput za one zanima računalni hardver, ispada da može stati nešto poput int ili 32-bitne vrijednosti u nečemu zove registar u računalu CPU, što znači da je super, super brzo, čak i na najmanji Razina hardveru računala. Dakle, postoji samo prednosti sve oko sebe. Dakle, što to znači? U stvari, kada projektiranja tablica baze podataka, gotovo sve vrijeme ćete imati ne samo podatke koje je stalo, ali i nešto poput jedinstveni identifikator jer ovo ide neka nam raditi druge stvari. I neka je spotaknuti jedan problem ovdje. Pretpostavimo da korisnici nisu Samo korisnička imena i nazivi, ali oni također imaju stvari poput gradova i država i poštanski brojevi, barem ovdje u SAD-u. Dakle, ja ću ići naprijed i samo se brzo reći, daj mi još tri stupca na kraju stola. A to će biti grad, to će biti državni, i to će biti Zip. Sada tipa Grad, koje podatke treba to biti, možda? VARCHAR? Ne znam što je Najduži naziv grad. Negdje u Americi, tamo je vjerojatno neki smiješno duge riječi, pa neka je samo ići s 255, nešto povijesno ili samovoljno. Država, ono što želite učiniti? Presuda poziv, zar ne? Što je možda najučinkovitiji? Koliko likovi? Možda samo dva, ako mi može dobiti daleko s radi samo, slično, MA za Massachusetts i slično. Dakle, ja ću ići char vrijednost dva. Poštanski broj je zanimljiva. Mi smo ovdje u 02138, tako da je sugerira da bismo trebali iskoristiti ono? To je INT, zar ne? INT, INT, kratko? Kratko će raditi. Ne? CHAR ili pet, ali želim int. Zašto gurnuti natrag na INT? Uvjeriti me od toga. Što je glupo o INT, mojoj ideji? Da. PUBLIKA: Pokupiti više memorije. DAVID Malan: Pokupiti više memorije. Četiri bajtova, ali si predlaže poštanski broj kao pet bajtova ili netko kao CHAR, koja se osjeća kao eh, to nije stvarno slučaj. Pa, zabavna priča. Prije mnogo godina, kada sam se koristiti Microsoft Outlook za moj e-mail, I na kraju želio prebaciti na Gmail. I tako, izvoze sam sve moje kontakata iz programa Outlook kao CSV datoteku. Vrijednosti odvojenih zarezom, koji je upravo sam mislio imali svi moji prijatelji imena i prezime imena i telefonske brojeve i poštanski brojevi i sve to. I onda sam napravio pogreška se otvaraju u Excelu, koji je Program tablicu koja razumije CSV datoteka kao što smo vidjeli. Ali onda, mora da sam pogodila, kao što su, Naredba ili Kontrola S u jednom trenutku. I Excel očito u vrijeme imao značajku kojom bilo kojem trenutku Vidio broj, pokušala je biti od pomoći. A ako taj broj je započeo s nule, to bi samo dobili osloboditi od njih. Zašto trebate vodeći nula na cijelih brojeva? Oni su besmislene, matematički. Oni nisu beznačajne u US Postal sustava. Dakle, ja sam imao godinama, do danas, još uvijek imati prijatelje da kada rijedak slučaj da trebam netko rješavanje ovih dana, I dalje ćemo vidjeti da sam imati prijatelja u Cambridgeu, Massachusetts, 2138. I to je neugodno ako ste pokušavajući vrsta programski generiranje omotnice ili samo pribilježiti. A to je zbog toga, Izabrao sam pogrešan tip podataka. Dakle, ja volim svoju ideju. Idemo koristiti polje char. Pet znakova, osim tu je kutak slučaj. Ako još uvijek poslati mail, Ponekad zip kodove ovih dana, oni su, kao, plus četiri. Dakle, trebamo crticu, a zatim trebamo još četiri brojeva. Dakle, da budem iskren, to bi ići mnogo različitih načina. Za sada, ja ću zadržati je jednostavan i ja sam samo će reći da je to pet CHAR vrijednost, a mi smo će preskočiti cijelu crtica plus četiri. No, to su vrste tradeoffs. A možete misliti na Isti problemi koji proizlaze s telefonskim brojevima i drugim područjima. A sada, to je zapravo lud ceste ići prema dolje. Pretpostavimo kako Rob i ja i Hannah i Maria i [? Davon?] I Andy i drugi na osoblje sve žive u Cambridgeu, Massachusetts, 02138. To zapravo osjećam glupo da sam dodajući da moj korisnike stol, grad, država, i zip. Zašto? PUBLIKA: [nečujan] DAVID Malan: Reci opet? PUBLIKA: [nečujan] DAVID Malan: Oni su uvijek ići zajedno, zar ne? Kada se ispostavilo, koristili smo razmišljati to bio slučaj dok ne iscrpno Tražili cijeli SAD, i ispada da postoji neke nedosljednosti gdje je više mjesta imaju isti zip, što je čudno. Ali, ako mi propisuje za sada to 02138 Uvijek je Cambridge, Massachusetts, Zašto u svijetu bi li pohraniti u baza podataka Cambridge i MA i 02138 za mene i za Hannah i Rob i za [? Davon?] I drugima koji žive ovdje u Cambridgeu, to je savršeno suvišan. Trebamo izvući sa samo skladištenje što? Samo poštanski broj. Ali onda, ako smo pohraniti samo poštanski broj, ja želim, vjerojatno, za moje web stranice znati na kojem je 02138. Dakle, treba mi još jedan stol. I to je u redu. A u stvari, to je jedan od dizajn procesi projektiranje stolova da ćete učiniti u PSet7 kao i pri čemu Želite li faktor zajedničke podatke. Baš kao što smo faktoring iz čest kod i faktoring iz zajedničkog stilova iz CSS, ovdje također u bazi podataka, ako mi treba samo 02138 jedinstveno prepoznati nečiju rodni grad, nemojte pohranjivati ​​Cambridge, MA za svaki prokleto korisnik u tablici. Umjesto toga, imaju poseban stol pod nazivom Poštanskih brojeva da bi trebali imati što kolumne? Vjerojatno ID polje, samo zato, jer načela govorimo o sada. Vjerojatno polje zip za 02138. A onda vjerojatno ono što drugi stupovi? Grad i država, ali samo imati jedan red za 02138, jedan red za 02139, jedan red za 90210. I to je doslovno svi su poštanski brojevi znam. Tako sada, što možete učiniti? Ovo je problematično, jer Sada imam dvije tablice. Dakle, moji korisnici su uglavnom ovdje, ali njihov grad državne informacije je ovdje. Dakle, ispada SQL, postoji zapravo način da se pridruže informacije, i to ćete vidjeti u PSet. Ali ispada možete učiniti nešto ovako. SELECT zvijezda od korisnika, JOIN zips NA Korisnici dot zip jednak poštanskih brojeva dot zip. Koji je malo razvučen, doduše, ali to jednostavno znači odaberite sve od Proces uzimanja moj korisnicima stol moj poštanskih brojeva tablica. Pridružite im se na jednom području imaju u koloni. Dakle, doslovno radi nešto kao što je ovaj, i dati me natrag nova privremena tablica to je širi, to je veća, koji ima sve stupovi od njih oboje. I to je, jednostavno, bio bi Sintaksa za nešto ovakvo. Dakle, tu je to naprijed, ali se događa biti druge dizajnerske odluke da ćete napraviti, ne samo s indeksima ali i trčanje u izazove. U stvari, tu je izazov u svakom dizajn baze podataka pri čemu ponekad dvoje ljudi možda želite pristupiti iste redove baze podataka stol. Dakle, to je nešto što ćemo susresti u PSet7 kao dobro. Ali sam mislio da ću gledati na jedan napad koji je moguće u SQL. Koje su neke od problemi koji mogu nastati? Dakle, vi ćete naići na to u PSet7. A mi vam reći iskreno što kodiranje rješenje za ovaj problem. Ali ako se uzme višu razinu klase, osobito u operativnim sustavima, idete u susret pitanje valentnost, problem pokušava učiniti više stvari odjednom bez prekida. I ja sam mislio da ću uvesti taj Ideja za PSet7 s metaforom da sam naučio u Margo Seltzer je CS164 operativni sustavi Prije klase godina. Pretpostavimo da imate jednu od ovih domu hladnjaci u vašoj sobi u studentskom domu ili domu, i imate pravi sklonost za mlijeko. I tako, dođete kući iz razreda jednog dana, otvorite hladnjak. Oh, dovraga. Nema mlijeka u hladnjaku. Dakle, zatvorite frižider, zaključavanje vrata, zaključavanje vašem domu, hoda iza ugla na CVS, stati u red, i početi checking out za malo mlijeka. I to će potrajati, jer one proklete samo naplata brojači se zauvijek ionako koristiti. Tako je u međuvremenu, vaš cimer dolazi kući. On ili ona stvarno voli mlijeko, kao dobro. Oni dolaze u sobi u studentskom domu, otvorite hladnjak, oh, prokleto je. Nema više mlijeka. Dakle, on ili ona također ide iza ugla. Ali sada, s obzirom da je kao dva ili tri ili četiri CVSes blizini, oni se dogoditi da ide u jedan od različitih one na trgu. I tako sada, nekoliko minuta kasnije, oboje doći kući i uh, najgori problem ikad. Sada imate previše mlijeka jer će ići kiselo. A ti se sviđa mlijeko, ali stvarno ne sviđa mlijeko. Tako sada, to je skupo pogreška zbog vas oboje napravio odluku na temelju stanje neke varijable koje je u procesu se mijenja od vas, inicijator će dobiti mlijeko. Dakle, ono što je možda i ljudsko Rješenje za taj problem? PUBLIKA: [nečujan] DAVID Malan: Ostavite poruku, zar ne? Uvijek ostavite napomenu, ako ste upoznati s tom showu. Da, tu su nas dvije. Dakle, uvijek ostaviti poruku, ili doslovno zaključali hladnjak s nekom vrstom lokot ili nešto preko vrha kao što je to. Ali to je zapravo će biti Ključni problem s dizajnom baze podataka, pogotovo kad bi mogli imati više preglednicima, više laptopa, više korisnika sve pokušava ažurirati podatke odjednom. Posebno osjetljive informacije kao i financijske informacije, pri čemu uz trgovanje dionicama web stranice kao i ti ćeš biti zgrada, što ako želite provjeriti koliko novca imate i onda ako imate dovoljno, kupiti nešto dionica? Ali što ako netko drugi tko ima zajednički račun s vama istodobno pokušavajući kupiti neke dionice? Dakle, on ili ona provjere račun platne bilance, oboje vratiti isto Odgovor, nema mlijeka. Ili oboje vratiti odgovor, imate 100 $ na računu. Oboje vas pokušati donijeti odluku kupiti jednu dionicu neke tvrtke zaliha. A sada, što se događa? Imate dvije dionice? Nemate dionice? Problemi kao što to može pojaviti. Dakle, mi ćemo naići na to. SQL injection napada, srećom, su nešto što će vam pomoći s, ali to su atrociously uobičajene ovih dana još. Dakle, ovo je samo jedan primjer. Ja ne tražim da Harvard PIN sustava je ranjiva na ovaj napad. Pokušali smo. Ali, vi znate da mi teren ovako. I Yale neto ID ima sličan u potrazi zaslon ovih dana. I to ispada, da je možda PIN sustav je implementiran u PHP-u. A ako je were-- je not-- oni možda kôd koji izgleda ovako. Imaju dvije varijable. Daj mi ime i lozinku iz Post super globalne varijable da smo razgovarali o ranije. Možda Harvard ima upit poput SELECT zvijezda od korisnika gdje korisničko ime jednak i lozinku jednak. I obavijest da sam samo plugging u korištenju Kovrčava braće zapis od drugih dan, što znači samo uključiti u vrijednosti ovdje. Neću pomoću upitnik tehnika. Ja nemam drugi ili treće tvrdnje. Ja sam samo doslovno izgradnje string sebi. Problem je, međutim, da je ako netko sviđa scroob, što je referenca na filmu, prijavljuje se u ovako nešto, i ja sam ukloniti točkice koji obično prikriti lozinke, što ako je on posebno zlonamjerni i njegova lozinka možda je 12345, po filmu pod nazivom "Spaceballs" ali on kritički tipa A Jedan citat nakon pet, onda doslovno riječ ili u prostoru, a zatim citat, citat jedan jednako jedan citat, ali primijetiti da je izostavljeno što? On je izostavljen citat na desnoj a on je propustio citat na lijevoj strani. Jer ako je to napadač scroob je pretpostavka je da su ljudi koji su pisali ovo PHP kod nisu tako svijetle, možda su samo neki pojedinačni citira oko interpolacije varijable u vitičastim zagradama? I tako, možda, mogao vrsta od završe misao za njih, ali na način koji će da ga provalio u PIN sustava. Drugim riječima, pretpostavimo da je to kod i sada priključiti ono scroob upisali. I to je crvena, jer je to loše. A temeljni teksta je ono što je upisali u, scroob mogla izigrati Harvard poslužitelja u izgradnju SQL upit niz koji izgleda ovako. Lozinka jednak 12345 ili jedan jednako jedan. Rezultat koji je, logično, je da će to prijaviti scroob u ako mu je lozinka 12345 ili ako jedan jednako jedan, što je, naravno, uvijek istinito, što znači scroob uvijek dobiva. I tako, put popraviti ovaj, kao iu mnogo slučajeva, bi se napisati više defenzivno. Za korištenje nešto poput naših stvarna funkcija upita, što što ćete vidjeti u PSet7, gdje smo ukopčali nešto slično pitanje obilježava se ovdje. A ljepota Funkcija upit koji smo dati je da brani od ovih Takozvani SQL injekcije napada, u kojima netko prevariti svoj kod u ubrizgavanje svoj vlastiti SQL koda. Jer ono što funkciji upit dajemo ćete zapravo učiniti, ako koristite upitnika sintaksu i drugi i treći argument, je ono što se to dodati na ulaz da korisnik pod uvjetom? Oni backslash citati. Dakle, to bježi bilo potencijalno opasni likovi. Ovo izgleda čudno sada, ali to nije ranjiv jer ne promijeniti logiku više jer cijeli zaporka sada jedan citat koji nije, Zapravo, lozinkom scroob a. Dakle, došlo je do neke šale o tome tijekom godina. Dakle, ovo je fotografija uzeta neke monstrum na parkiralištu pri čemu ti znaš da neki gradovi i država pokušati skenirati vaše licence Ploča vama ili ulaznicu naplatiti vam ako idete kroz bez, kao što su, E-Z pass stvar. Dakle, ta osoba smatra da je možda ljudi pišu na e-Z Pass sustav nisu bile tako svijetle, a možda su Samo spojeni zajedno niz, tako da on ili ona ne može zlonamjerno ne samo završe misao, ali zapravo izvršiti loše naredbu, što nismo još spomenuli, ali vjerojatno možete pogoditi. To osim za brisanje i umetnuti i ažuriranje i odaberite, tu je ključna riječ se zove pad, što doslovno briše sve u bazi podataka, koja Osobito je loše. Možemo uvećanje na ovo ako to je malo teško vidjeti. Ovaj, sada je poznato crtić to je predivno pametan sada i razumljivo. [Smijeh] Da, super. Vrsta geeking van. Dakle, to su, dakle, SQL injection napada. I oni su tako lako izbjeći pomoću pravo kod ili prave knjižnice. I vidjet ćete u PSet7, to je Zato ćemo vam dati funkciju upita. Dakle, nekoliko zadirkivači koje smo mislili da bih vam dati ovdje u našem Preostalo minuta zajedno. Dakle, kao što se sjećate iz tjedna nula, mi uvedena ove dvije žarulje koje su lijepe, a ne samo zato oni su prilično i šarene, nego zato što podržavaju nešto pozvao API, aplikacija Sučelje za programiranje i u CS50 do sada, mi smo uglavnom usmjerena na GET i POST, ali ispada postoji drugi HTTP glagoli poput PUT. A u stvari, to je bio slide iz tjedna nula gdje ako pišete kod koji šalje la PSet6 HTTP zahtjev koji izgleda ovako s ovim komad teksta na dnu, koji se zove JSON, ili JavaScript Objekt oznake da ćemo razgovarati o sljedećem tjednu, možete uključiti ili isključiti ili promjene boja svjetla poput onih. Dakle, ako CS50 ima osim nekih tih žarulja ovdje u New Havenu ako želite posuditi ih za konačne projekte, Također neke Microsoft Bendovi, koji su poput Satovi koje nose oko ručnog zgloba da na sličan način imaju API tako da Možete napisati svoj softver za njih. Imamo račun s Appleov iOS broj tako da, ako imate Apple Satovi ili iPhone ili iPad ili iPod, možete napisati kod koji zapravo radi o onima. Imamo hrpu od Arduinos, koji su maleni malo računala bez slučajeva, u biti, da se možete povezati putem USB, obično na svoj Mac ili PC, napisati kod koji radi na tim fizičko uređaji koji često imaju senzore na njima tako da možete komunicirati sa stvarnim svijetom. Imamo hrpu od Leap Motion uređaja, koji su USB uređaji za Mac i Računala, i ovdje opet, u New Havenu. A ako ga spojite na svoj Mac, zapravo možete kontrolirati vaše računalo pisanjem softvera da putem infracrvenih zraka, otkrije gdje se vaše ljudske ruke, čak i bez dodirivanja tipkovnice. Mislili smo da ćemo podijeliti brz uvid u to, na primjer. [Glazbom] Dakle, imamo cjelinu hrpa tih stvari, također, pozvao MYO ruku bendova koje ste stavili u odnosu na podlakticu a onda možete kontrolirati pravi svijet ili virtualni svijet kao što je ovaj. [Glazbom] Ili, mi također imaju neke Google Karton, što je doslovno, kao što je, kartonska kutija ste mogli staviti na svoje lice, ali tobogan na telefonu u nju tako da stavite čašu svoje Telefon jako blizu svojim očima. I Google Karton je prilično jeftini na $ 10 ili $ 20. I to je malo leće da malo off smjene slika na zaslonu Vašeg čovjeka Oči vam dati osjećaj dubine tako da zapravo imaju 3D okruženje u ispred vas. Također imamo neke Samsung Gear, koji je skuplji verzija ovog, ali da isto tako mogu slajd u Android telefon i dati vam iluziju of-- ili dati iskustvo virtualne stvarnosti. I u naše posljednje dvije minute, mislili smo da ćemo pokušati učiniti. Ako mogu projicirati ono Colton ima Ovdje samo oštriti apetit, neka mi ići naprijed i baciti se na velikom ekranu ovdje. Dopustite mi ubiti svjetla. Colton, želiš ići naprijed i staviti na mobitel trenutak i dođite do sredina pozornici? I želiš project-- to je ono što Colton vidi. Sada, Wi-Fi u ovdje Ne toliko jaka za ovaj uređaj da je to super uvjerljiv, ali Colton je doslovno u ovom čarobnom futuristički mjestu. On vidi samo jednu sliku. Vi vide svoju lijevu i desno oko da je njegov mozak se povezivanjem u trodimenzionalni okoliš na njegovom licu. Upravo je izabrao izbornika ovdje. I tako opet, on je nosio ovaj slušalice sa Samsung telefona na to da je bežično projiciranje našem pretek. Sada ste na Marsu, mislim? COLTON: Mislim da je. Nisam siguran [nečujan]. [Smijeh] DAVID Malan: Ispada Mars ima tih izbornika. COLTON: [nečujan] neke cool mjesta ako želimo ići to-- DAVID Malan: Gdje želimo ići? COLTON: [nečujan] DAVID Malan: I da vidimo gdje Colton nas je da se sada. COLTON: [nečujan] DAVID Malan: Dakle, postoji toliko mnogo različitih mjesta koje možete poduzeti sami. Postoji FAPIs preko kojih možete pisanje igre ili interakcije koje izvoditi, u konačnici, na telefon. Dakle, ti zapravo samo pisanje mobilni telefon app. No, zahvaljujući softveru i grafičke mogućnosti, Sada Colton je to maleni malo vikend. I na rizik sebe neodoljiv, Colton, a ja ću se držati za oko dok je na kraju klase danas ovdje Ako želite da se i igrati. A mi ćemo ih sljedeći tjedan, kao dobro. Bez daljnjeg, Ado to je to za danas. Vidimo se sljedeći tjedan. [MUSIC - ragga TWINS "loš čovjek"]