[Predvaja glasba] DAVID Malan: V redu, to je CS50. To je konec osmih teden. In danes smo začeli da izpolnite v nekaterih kosih ko gre za gradnjo stvari na spletu. Torej, se spomni, da je v ponedeljek smo porabili veliko več časa na PHP, ki je to dinamična programski jezik, ki nam omogoča izhod, med drugim Stvari, HTML in druge take vsebine da bomo želeli videti. Vendar nismo zares pogledal, kako bomo shranjujemo vsako informacijo. Dejansko je skoraj vsak od da je super zanimive spletne strani, ki jih obiščete danes imajo nekakšno zbirko podatkov na zadnji konec, kajne? Facebook zagotovo shrani veliko podatkov o vseh nas in Gmail trgovinah vse vaše e-pošte. In tako, veliko drugih spletnih strani, ne samo statična vsebina, ki je informativna. To je pravzaprav dinamična na nek način. Vam zagotavljajo vhod, posodablja strani za druge ljudi. Dobiš sporočila, ki jih pošljete sporočila, in tako naprej. Torej danes pogledamo pobliže temeljev projekta da boste potopili v naslednjem teden, CS50 Finance, ki se dejansko dogaja, da ste graditi nekaj ni v C, ampak v PHP. Spletna stran, ki izgleda malo kaj takega ki omogoča, da kupujejo in prodajajo staleži, ki so dejansko dogaja črpati realnem času Podatki staleža od Yahoo Finance. In tako na koncu, boste imeli iluzija zase in za uporabnike da ste dejansko odkup in prodajo zaloge in že skoraj v realnem času posodobitve, upravljanje portfelja, ki so vsi se dogaja, da zahtevajo ob, navsezadnje, baze podatkov uporabnikov. Torej, s svojimi besedami, še posebej, če niste super seznanjeni z računalnikom znanost ali podatkovne baze, kar veš, baze podatkov, da bi zdaj, v netehniških smislu? Kaj je to? Kako bi ga opisali s sostanovalcem ali prijatelja? OBČINSTVO: [neslišno] informacije [neslišno] DAVID Malan: Torej, seznam informacij, ali store-- seznam informacij da boste morda želeli, da shranite o nečem, kot uporabnika. In kaj imajo uporabniki povezana z njimi? Če ste uporabnik na Facebooku ali Gmail, kaj so značilnosti da vse nas imajo uporabniki? Všeč, kaj bi lahko nekatere od Stolpci v preglednici, ki smo namiguje zadnjič? Ker spet, lahko mislim baze podatkov res kot fancy Excelove datoteke ali Google Preglednice ali Apple Numbers datoteke. Torej, kaj misliš o ko misliš uporabnika? Kaj imajo? Kaj je to? OBČINSTVO: Ime. DAVID Malan: Ime. Torej, če imena, kot so David Malan bi ime nekega uporabnika. Kaj drugega uporabnik imeti? OBČINSTVO: An ID. DAVID Malan: An ID. Torej, kot številko ID, kot je vaš Harvardu ID ali vaš Yale Čisti ID ali podobno. Kaj drugega bi lahko uporabnik? OBČINSTVO: Geslo. DAVID Malan: geslo, pa se morda naslov, morda telefonsko številko, morda e-poštni naslov. Torej, tam je šopke poljih in to bi nekako uidejo izpod nadzora hitro, takoj ko začnete zavedali, oh, dajmo shranite to in kaj je shranjevanje to in ono. Ampak kako smo pravzaprav storili? Torej še enkrat, mentalni model, da so za danes, kot smo potopite v dejanskem SQL, Structured Query Language, je baza podatkov, ki izgleda takole. To je le nekaj vrstic in stolpcev. In si lahko predstavljate Google Spreadsheets ali poljubno število drugih programov. Toda kaj je ključ o MySQL, ki je baze podatkov programske opreme bomo uporabili, svobodnega odkrito available-- Facebook uporabe je in poljubno število drugih websites-- Baza podatkov shranjuje stvari relacijsko. In relacijske baze podatkov pomeni le eno, da je dobesedno shranjuje svoje podatke v vrsticah in stolpcih. To je tako enostavno, kot da. Torej, tudi nekaj podobnega Oracle, ki Morda ste v glavnem slišali je relacijska podatkovna baza. In pod pokrovom, ga shranjuje podatke v vrsticah in stolpcih. In Oracle vam zaračunava veliko denarja za to, ker MySQL dajatev ti nič za isto. Torej, SQL se dogaja, da se nam vsaj štiri operacije. Sposobnost za izbiro podatkov, kot bralno podatkov, vstavljanje, brisanje in posodabljanje podatkov. Z drugimi besedami, to so res štiri ključne dejavnosti, da se dogaja, da nam omogočajo, da spremenite stvari v teh vrsticah in stolpcih. Orodje, ki ga bomo danes uporabljajo predvsem da se naučijo SQL in z njim igral Ponovno se imenuje PHP MyAdmin. To je spletno orodje. Skupaj naključje, da to je napisano v PHP. Ampak to se dogaja, da nam grafičnim uporabniški vmesnik, tako da bomo lahko dejansko ustvarjanje teh vrstic in stolpcev in potem se pogovarjajte z njimi preko kode. Torej, kaj je zdaj začeti kar mislim, da je odkrito vrsta postopka zabavno gradnjo zadnji konec spletnih strani, deli, ki jih uporabniki ne glej, ampak zagotovo mar, ker to je precej podatkov dogaja. Tako, podobno C in Malo manj kot PHP, SQL, ali zbirka podatkov, ki podpira SQL, ima vsaj te vrste podatkov in grozde drugih. CHAR, VARCHAR, INT, BIGINT, DECIMAL in DATETIME. In tam je cela kup drugih funkcij, ampak dajmo to narediti s način dejansko npr. Jaz bom šel v CS50 IDE kjer vnaprej, sem prijavljeni in sem obiskal tudi URL To orodje se imenuje PHP MyAdmin. In problem nastaviti sedem, bomo povej vam točno, kako priti do tega vmesnika kot dobro. V zgornjem levem kotu, Opazili pa pravi predavanje. In to samo pomeni, da vnaprej, sem ustvaril prazno podatkovno bazo, imenovano predavanje da nima preglednic v njem še ni. Tukaj ni vrstice in stolpce. Ker se prvi stvar, bomo storili se začnete ustvarjati tabele da se dogaja, da shranite naše uporabnike. Torej, dobesedno čez Tukaj v desno, da sem bo povedal baze podatkov Hočem miza imenuje uporabnike. Torej, to je kot datoteka, ki sem želite shraniti vseh mojih podatkov. In koliko stolpcev? No, pa naj bo enostavno za zdaj. Rad bi samo, da shranite Like uporabniško ime in ime uporabnika. Bomo začeli majhen. Torej, želim dveh stolpcih skupaj. In bom, da gredo naprej in kliknite Pojdi. In potem, za te stebri, kaj bom da do-- če te internetu cooperates-- vso pravico, tako da bomo še enkrat poskusite to. Jaz grem, da ustvarite tabelo imenovano Uporabniki z dvema stolpcema, kliknite Go, OK. Zdaj imamo res hitro. Hvala, zelo dobro opravljeno. Vse je v redu, tako da kaj hočemo ti stolpci se imenuje? Torej, ena se dogaja, da se imenuje ime. Torej, vse kar vidim here-- in vmesnik odkrito gets malo grd sčasoma, Ko začnete tipkati v vseh teh podatkov. Toda kaj je lepo je, da nekako paradoksalno, sem ustvarjanju stolpce, vendar ima orodje neumno jih je določeno v vrsticah tako da sem lahko konfigurirate te stolpce. Torej, tam je dve nedokončani tam pod ime. In eden od teh področij I radi imenujemo uporabniško ime, in druga polja želim poklicati ime. In zdaj moram izbrati tipi podatkov za te stvari. Torej, medtem ko je v Excelu in Google Spreadsheets, Če želite stolpec, boste dobesedno vtipkaj ime ali uporabniško ime, pritisnite tipko Enter. Mogoče vam bo to krepko samo za jasnost, ampak to je to. Vi ne določite Vrste stolpcev. Zdaj v Google Spreadsheets ali Excel, vas lahko določite, kako se podatki opravljene. Lahko bi šel v meniju Oblika, in si Določite lahko kažejo na to, kot znak za dolar, prikazati to kot plavajočo vrednosti točke. Torej, to je podobno v duhu da tisto, kar smo o tem, da ne, ampak to se dejansko dogaja na silo Podatki, ki se določena vrsta. Sedaj, čeprav je pred nekaj trenutki sem je dejal, da je le nekaj podatkovni tipi, tam je pravzaprav cel kup, in oni v različne stopnje specifičnosti. In kot prahi, si Lahko tudi narediti fancy stvari kot geometrij shranjevanje znotraj baze podatkov. Lahko shranite stvari kot so GPS koordinate in dejansko ugotovili, matematično, točke, ki so v bližini drugih. Ampak bomo obdržati to super enostavna in pojdite do tu vse ti tipi niz. Torej, tukaj je seznam cel kup možnosti. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. In to je nekako ogromna. In žal, nekoliko paradoksalno na C, char ni res CHAR. Če podate v bazi podatkov da je tvoj tip podatkov CHAR, to pomeni, da ja, to je ZNAK, ampak to je ena ali več znakov. In morate navesti koliko znakov želite. Torej, kaj je tipično Dolžina za uporabniško ime? Ali obstaja omejitev običajno? OBČINSTVO: [neslišno] DAVID Malan: 16 morda? Nekaj ​​podobnega. Veš, nazaj v dan, je nekoč osem. Včasih je 16, včasih je še več kot to. In tako, to ne pomeni, daj mi en CHAR. To pomeni, da moram navesti dolžina polja, in zdaj lahko rečem nekaj takega kot 16 let. In tam je blagovna menjava. Torej, bomo videli v trenutku da to pomeni ena, vsak uporabniško ime mora biti 16 znakov. Toda počakaj minuto, M-A-L-a-N. Če je moje ime in sem z le pet, kaj bi vi predlagali, da je baza podatkov narediti za druge 11 znakov, da Sem rezerviran prostor za? Kaj bi ti naredil? OBČINSTVO: [neslišno] DAVID Malan: Ja, samo da bodo vsi null. Naj jim prostore. Ampak verjetno ničen, zato je Veliko poševnica nazaj ničel. Torej, na eni strani, ki smo jih Zdaj je prepričan, da je moje uporabniško ime ne more biti več kot 16 znakov. In druga plat, ki je da če bi imeli res dolgo ime ali želel res dolgo username kot nekateri od vas fantje bi morali v tej šoli ali na Yale.edu, ne morete imeti eno. In tako v resnici, če ste kdaj registriran za spletno stran in dobili boste vpil na rek Vaše geslo je predolgo ali pa vaše uporabniško ime je predolgo, da je preprosto zato, ker programer, ko konfiguriranje svojo bazo podatkov, se odločili, da na tem področju bo ne sme biti daljši od te dolžine. Vse je v redu, pa kaj, če bomo nadaljevali ime? Kako dolgo naj bi Ime tipične Človeški biti? Kako veliko znakov, 16? Im 'ugibati, smo lahko najti nekoga v tej sobi kjer ga njegovi prvi plus zadnji ime je daljše od 16 znakov. Torej, kaj je bolje, kot da je 17? 18? 25? Večji? 30? OBČINSTVO: [neslišno] DAVID Malan: 5000, oh moj Bog. Torej, to je verjetno dostojno zgornja meja, bomo rekli. In tukaj smo nekako imeli da bi sodbo klic. Kot, da ni pravi odgovor tukaj. Infinite ni povsem mogoče, zato, ker smo na koncu bo have-- smo bo zmanjkalo pomnilnika. Torej, moramo narediti sodba klic na neki točki. Zelo pogosti bi bilo, na primer, da use-- in mi določite CHAR tukaj kot before-- 255 je dobesedno zgornja meja te programske opreme baze podatkov pred leti. In tako, veliko ljudi bi samo rekli, v redu. 255 je omejitev. Poglejmo samo uporabo maksimum. In to je precej smešno. Like, če tipkate nekdo ime za 200 plus znake, da je malo smešno. Ampak, ne pozabite, da je ASCII ne edini sistem za znake. In tako, še posebej v Veliko azijskih jezikov kjer obstaja znakov ne moremo izraziti na tipkovnicah, kot moj ZDA tipkovnica, nekateri znaki dejansko traja do 16 bitov namesto osem bitov. In tako je to v resnici ni vse, da je nerazumno da potrebujemo več prostor, če želimo, da se prilega Večje črke od samega ZDA centric tisti smo urejene, da bi razpravljali. Torej, potrebujemo nekaj zgornja meja. Ne vem, kaj je najbolje, ena je, ampak 255 je na splošno pogost. 25 počuti nizka. 16, 32 čutijo nizka. Jaz bi napačno na strani nečesa več. Ampak tam je kompromis, kot vedno. Kaj je, morda, očitno trade off rezervacijo 255 znakov za ime vsakogar v moji zbirki podatkov? OBČINSTVO: [neslišno] DAVID Malan: Kaj je to? OBČINSTVO: [neslišno] DAVID Malan: To je Veliko spomina, kajne? M-A-L-A-N. Pravkar sem zapravil 250 znakov samo za shranjevanje moje ime osredotočila le v primeru, nekdo v razredu ima zelo dolgo ime. To se zdi kot nepotrebnega kompromis. Torej, se izkaže, da je SQL, ta jezik baze podatkov, dejansko podpira nekaj imenuje VARCHAR ali Variable CHAR. In to je nekako lepo, da je to vam omogoča, da določite ni fiksna širina, ampak, spremenljiva širina. Natančneje, A največja širina področju. Torej, to pomeni, da ime lahko ne sme biti več kot 250 znakov, vendar pa lahko zagotovo manj. In baza podatkov se bo pameten. Če čaka na M-A-L-A-N, to je samo še uporabiti pet, mogoče šest bajte za podobno zadnjim null značaj, in ne preživijo dodatni 249 ali 250 bajtov nepotrebnem. Torej, to se zdi kot, da bi moral so začeli s to zgodbo. Ampak tam je vedno kompromis. Torej, na eni strani, uporabniško ime Sem določeno, da se težko kodirane na 16, in morda to ni bilo pravica klic, morda ga je, ampak zakaj ne bi uporabili VARCHARs za vse? Obstaja z razlogom. Zakaj VARCHARs ne uporabljajte za vsako področje katerih dolžina ne veste vnaprej če se zdi, da je velika stvar, kajne? Uporabljajte le toliko prostora, kot morate do te meje? OBČINSTVO: Počasnejše. DAVID Malan: Speller? OBČINSTVO: to naredi počasneje? DAVID Malan: Oh, to je počasnejši. Dobro, to je skoraj vedno odgovor, odkrito. Všeč, kaj je kompromis? Bodisi stane več prostora ali pa stane več časa. Torej, v tem primeru bi bilo počasnejše. Zakaj? OBČINSTVO: [neslišno] določanje [neslišno]. DAVID Malan: Dobro. Torej, boste morda spomnite iz celo PSED5, igranje s svojim pristopom v slovar, če imate dodeliti pomnilnika dinamično ali obdržati narašča pufer, da lahko dejansko počasi. Če morate poklicati malloc Pod pokrovom motorja in morda to je tisto, MySQL počne, tako gotovo, da bi se lahko zgodilo. In če mislite, da pot nazaj na PSet-- ali celo tednov dve, ko smo naredili stvari, kot binarno iskanje ali celo linearno iskanje, ena od lepih stvari o vsaki besedi v podatkovno bazo ali vsako besedo v koloni da popolnoma enake dolžine, še če je cel kup teh znakov so prazne, je, da lahko uporabite random access o vaših podatkov, kajne? Če veste, da vsak Beseda je 16 znakov proč, lahko uporabite kazalec aritmetike, tako da govori, in pojdite z nami 16, 32, 48, 64, in si lahko samo skok hipu z aritmetično kateremkoli od besed v zbirki podatkov. Ker se, če je to VARCHAR, kaj si namesto tega morali narediti? [Telefon zvoni] Če je to VARCHAR, si ne more uporabiti naključno dostop. Kaj morate iskati, ali ne? Ja? OBČINSTVO: [neslišno] DAVID Malan: Poglej skozi whole-- sledu preko celotnega seznama išče kaj, najverjetneje? Kakšne posebne vrednosti? OBČINSTVO: [neslišno] DAVID Malan: Iščem Za null končnikov da razmejijo ločevanje besed. Torej še enkrat, kompromis, in ni pravilen odgovor. Ampak, to je, če, še posebej, ko uporabniki dobili, da je veliko in vaš tovor na vaših strežnikih je Število ljudi, ki ga uporabljajo, dobi visoko, to so pravzaprav enostavna odločitve. Torej, mi lahko pustite, saj to, ampak dajmo se pomaknite navzdol čez na desno tukaj. Zdaj, tam je par stolpcev kjer imamo, da bi sodbo klic. Ali je smiselno, da se omogoči uporabnikov ime, uporabniško ime uporabnikova ali uporabnikov ime, da je nična? To pomeni, da le prazen prostor. Počutim se malo nesmiselno, tako da sem ne gre za preverjanje tiste škatle. Vendar se izkaže v baze podatkov, lahko rečem, nekdo lahko po želji imajo to vrednost. Ta stolpec nima dejansko tam. Zdaj pa je to spustnem meniju. In opazil, da sem še vedno v prvi vrsti tam, tako da sem govoril o uporabniškim imenom zdaj. In se izkaže, da je v zbirki podatkov, za razliko od preprostega zgolj preglednice, ima zmogljive funkcije, imenovane indeksi. In indeks je način za štetje Baza podatkov vnaprej, da jaz, človeško sem pametnejši od tebe. Vem, kakšne poizvedbe, izberite ali vstavite ali izbrišete ali posodobitev, da moja koda se bo končalo delaš na tej bazi podatkov. Rad bi prebral veliko podatkov. Hočem vstaviti veliko podatkov. Želim, da nenehno izbrisati veliko podatkov. Če vem, da bom lahko dostopu polje kot ime veliko, Znam preemptively povej baza podatkov, vem več kot ti, in želim, da odlok, ki morate indeks tem področju. Kje indeksiranje polje ali stolpec pomeni, da je baza podatkov v vnaprej morala sposoditi nekaj idej, kot so, štiri teden in pet in šest od CS50 in dejansko zgraditi nekaj podobnega binarnega iskanja drevo ali kaj podobnega na splošno imenujemo drevo B da bi se naučili v razredu, kot CS124 na Harvardu, določeni razred algoritmi, ali poljubno število drugih mestih. Podatkovna baza in pametna ljudje, ki ga izvajajo bo ugotoviti, kako shraniti da tabela informacij v spomin, tako da išče in drugi postopki so super hitro. Nimate, da to storite. Nimate izvajati linearna iskanje ali binarno iskanje ali zlivanjem ali izbiro razvrščanje, nič od tega. Baza podatkov to počne za vas, če vam povem, je preemptively indeks na tem področju. In si lahko ogledate tudi, da je nekatere druge značilnosti mi lahko poveste, podatkovna baza za uveljavitev. Kaj bi pomenilo, če sem se odločil Unique Iz tega menija, samo intuitivno? Ja? OBČINSTVO: [neslišno] DAVID Malan: Ja, uporabniško ime mora biti edinstvena. Je to dobro ali slabo stvar za baze podatkov, za spletno stran z uporabniki? Morala uporabniška imena biti edinstven? Ja, verjetno. Če je to tisto, kar Polje, ki jih uporabljamo, da se prijavite, ste v resnici ne želijo, da ljudje, ki imajo enak občutek ali enako uporabniško ime. Torej, lahko imajo Baza podatkov uveljaviti, da tako da je zdaj v moji PHP kode ali katerem koli jeziku, Nimam, da, na primer, preveriti nujno pa to uporabniško ime obstajati, preden sem pustil nekdo registrirati? Podatkovna baza ne bo pustil dva človeka imenom David ali Malans registracijo v tem primeru. In kot prahi, čeprav je to meniju le izberete eno, edinstven indeks je tista, ki je indeksirajo za super hitro delovanje, ampak tudi uveljavlja edinstvenost. In bomo prišli nazaj na to, kar druga dva pa pomeni v samo trenutek. Medtem, če grem na moja druga vrstica, ki Uporabnik je ime, bi moral navesti da bi moralo biti ime edinstveno? Ne, ker si lahko zagotovo have-- ni dva David Malans v tej sobi, najverjetneje. Ampak, če bomo izbrali drugačno ime, bomo lahko zagotovo trčenja. Pomisli nazaj hash tabele in podobno. Torej, mi zagotovo ne želite da bi polje ime edinstveno. Torej, smo le, da bo zapustil da kot dash, dash, dash, nič. In bom zapustil vse ostalo sam. Dejansko je večina teh področjih mi ne bo treba skrbeti. In ko sem pripravljena rešiti to, če internet sodeluje, I kliknite Shrani in zelo, zelo, zelo Počasi se je baza podatkov se shrani. In zdaj sem nazaj na to vmesnik, ki je sicer, je prepričljivo na prvi pogled. Ampak vse bom storiti, je klik na besedo uporabnikov v zgornjem levem kotu. Jaz bom šel tu gor, kliknite Uporabniki, in ga privzeto, da je izpeljal nekaj SQL, vendar več o tem v tem trenutku. Tukaj je samo povzetek tega, kar sem storil. In ne skrbite, da boste videli omenjamo latinščine in švedščini tukaj. Tisti, ki so le privzeto nastavitve, ker MySQL prvotno, ali PHP MyAdmin, eden izmed njiju je zgodilo mora biti napisano v nekaterih švedskih ljudi. Ampak to je v našem primeru nepomembno tukaj. Vse je v redu, zakaj je vse to zanimivo? Izkazalo se je, da lahko vstavite podatke v podatkovni bazi s pisanjem kode. In sem šel naprej in v moji datoteki tukaj sem dogaja, da gredo naprej in se pretvarjati, kot to je nakazan na te baze podatkov, ki je ni v tem trenutku, vendar pa bo bo, ko pridemo do problema nastaviti sedem. In bom, da gredo naprej in izvršiti funkcijo imenovano poizvedbe, ki vam bo dal v problemu določenih sedem na distribucijsko kodo, ki traja vsaj en argument, ki je le niz. Niz SQL kode. Torej, ste o tem, da se naučijo, kako napišite Structured Query Language. Če želim vstaviti novo vrstico v mojem baze podatkov, ker je nekdo bil predložen obrazec za mojo kodo, jaz bi dobesedno napišite INSERT INTO uporabnikov naslednja področja: username, vejica, ime, vrednotah, in zdaj moram vstaviti nekaj podobnega Malan, in ponudbo, Konec citata "David Malan." In zdaj tudi za tiste, ki ne poznajo SQL, Zato sem z uporabo enojne narekovaje znotraj te zelene vrvice? Kaj bi lahko bil razlog tu? Obvestilo, da sem co-druženje dva jezika. Poizvedba je funkcija PHP, vendar pa je potrebno argument. In ta trditev je že sama napisana v drugem jeziku, ki se imenuje SQL Structured Query Language. Torej, vse, kar sem pravkar poudarili tu je ta jezik se imenuje SQL. Torej, kaj je z enojnimi narekovaji, samo kot preverjanje hiter razumnosti? Kar daj. Oni so strune. Torej, citiram, konec citata Malan in citiram, konec citata David Malan so strune. In samo razmišljam intuitivno zdaj, vedoč, kaj veste o C in PHP, zakaj nisem tega naredil, kar sem ponavadi rabljeni dvojni narekovaji za godala? Zakaj nisem hotel narediti to? Ja? OBČINSTVO: [neslišno] DAVID Malan: Točno tako. Ker sem že uporabljate dvojne kotacije na poti izven argument na funkcijo PHP, Jaz bi samo zmesti tolmača. To ne bo vedel, kaj ti gredo skupaj? Ali ti gredo skupaj? Ali ti gredo skupaj? Torej, sem namesto izmenično. Ali lahko naredim kaj takega, poševnica nazaj quote ali poševnica nazaj quote. Odkrito povedano, da je šele začne dobili zelo neberljiv in grda. Ampak, da bi dosegli enak rezultat, kot dobro. Torej, če bi bil za izvedbo tega poizvedba zdaj, da vidimo, kaj se zgodi. Grem, da gredo naprej in zdaj namesto kot izvršiti kodo PHP, ki je, če bom igral v problem nastaviti sedem, Bom namesto da gredo na PHP MyAdmin. In jaz ročno dogaja iti na zavihek SQL, in mi povečate na vmesniku. In bom prilepiti v stvar sem tipkal. In barvne oznake ima spremenila malo zdaj, samo zato, ker so oblike programa stvari malo drugače. Ampak obvestilo, da je vse, kar sem naredil je sem rekel, vstavite uporabnike. Sem določeno, nato pa v vejico ločen oklepajni seznam dva polja, da sem želite vstaviti, in potem sem dobesedno rekel vrednosti sledijo drug paren, In potem dve vrednosti Rad bi plug-in Zdaj za dober ukrep, Bom dal podpičje na koncu. Torej, to ni C. To ni PHP. To je zdaj SQL, in sem ga prilepite v tej spletni vmesnik, ki je samo, da me boš pustil, takoj, ko sem kliknite Go, izvršiti to poizvedbo v bazi podatkov teče znotraj CS50 IDE. Torej, to je dobro. Obvestilo, da je omenjena ena vrstica vstavljena, se je super hiter, 0.0054 sekund za vnos teh podatkov. Torej, to zveni zelo zdrava. To preoblikovan mojo poizvedbo za mene tukaj, samo da ga vidim v nekakšno barvno različico. Ampak zdaj, če sem kliknite Prebrskaj, opazili, da, celo čeprav obstaja veliko nereda na zaslon, moja miza ima zdaj dve vrstici. Torej, naj gredo naprej in ne drugo. Namesto tega, naj me pojdite na zavihek SQL znova. In tokrat bom vstaviti nekaj podobnega Rob in njegovo ime bo Rob Bowden. Bowden. Oglejmo kliknite Shrani. Ups, namesto Pojdi. Spet kliknite Prebrskaj in zdaj opazili, imam dve vrstici. Torej, to je samo način bolj zapleten način odpiranja Google Spreadsheets in vtipkate vrstico v stolpcu. Toda kaj je ključnega pomena, da imamo zdaj sintakso s katero pisati kodo, tako da na koncu, bi lahko dejansko naredite nekaj in to. Spomnimo se, da PHP podpira super globalne spremenljivke. Kaj je notri dolarja prijavite podčrtaj GET v PHP? Vzeli smo si na eni ali dva preprostih primerov. In v PSet6, spomnimo imate zdravo dot PHP, ki uporablja te spremenljivke. Kaj se dogaja tam notri? Ali kaj je to? Malo glasneje. OBČINSTVO: [neslišno] DAVID Malan: To je sneg seme matrike, ki je samo fancy način rekel matrika, ki ima ključne parov vrednosti. In tipke niso številčna. Oni so besede ali nize. In še posebej, kaj so ti ključni parov vrednost? Kje prihajajo? Žal? OBČINSTVO: [neslišno] DAVID Malan: Ne? Kam tistih ključnih parov vrednosti prihaja iz? Spet rekel? Spet? Sem edini zaslišanje kaj? [Smeh] To je pravica, ja? OBČINSTVO: [neslišno] DAVID Malan: Ja, prihajajo iz poizvedbi. Torej, če ste nazaj v čas, da ko smo igrali z Googlom in smo šli na Google.com poševnico Iskanje vprašaj q enak mačke, če bi bil jaz zadeti nastopiti, in če Google so bile izvedene v PHP, PHP koda, da je Google napisal bi imeli dostop do znak za dolar podčrtaj GET znotraj katerega je ključni imenuje Q in vrednost imenovane mačke, ki jo lahko potem uporabite počel dejansko iskanje z. Torej, v resnici, kaj bom zdaj je šel nazaj na moj PHP kodo da boste spet videli več v PSet7. In namesto da bi odpravili v trdih kodiranih vrednosti, ki ne zdi zelo zelo dinamično spletno stran, Bom vam teaser kaj bi vaša dejanska koda storiti. Ti bi dal v dvoje Vprašanje označuje takole. Ne vem, kaj je ime je. Ne vem, kaj je Ime se bo, ampak jaz vem, da lahko jih dobite dinamično. Torej, če je bila oznaka smo zdaj pisanjem je koda teče na Googlovih strežnikih, ali če je to zdravo pika PHP, ki prihaja z PSet6, Bom prehajajo v funkcija izraz tako kot printf, dve drugi argumenti. GET, citiram, konec citata uporabniško ime, in GET, citiram, konec citata ime. In zdaj, opazili, kaj se Splošna struktura je tukaj. Imam na levi strani na desni strani klicem ta funkcija imenuje poizvedbo v PHP. Še vedno kot prvi argument, samo niz besedila. Ampak, da je niz besedila je napisana v jeziku, ki se imenuje SQL. In odkrito povedano, to ni velik jezik. Mi smo samo govorili o formalno danes, res. In potem v problem določiti sedem, tam je relativno Nekaj ​​značilnosti, ki sva bo vzvoda. Vprašanje, znamke, čeprav pomeni priključite vrednost, tukaj in vtič v drugi vrednosti tukaj. In obvestilo, ki sem jih izpustijo, kar iz celega quote-- prekleto it-- okoli citata zaznamuje ta čas. Sem izpuščena kotaciji Ocene okrog vprašajem, Žal, ta čas okrog. Torej, kaj je lepo, o tem Vprašanje funkcija znamka, ki PHP ponavadi podpirajo, Ruby in Python in drugih jezikih, To samo pomeni, čep v nekaterih cenijo tukaj in veš kaj? Ugotovimo, ali želite uporabljati enojni narekovaji ali dvojni narekovaji. Me ne trudi se s tistimi, intelektualno nezanimivi podrobnosti. Ampak, se prepričajte, da je pravilno tako da je moja koda koncu operativno in varno, kar bo imela pomen kmalu. Zdaj, koliko argumenti skupaj, samo da bi bo jasno, ali je funkcija jemanje vprašanje? Kdo želel glasovati za več kot dve? Tri? Seveda, zakaj? Zakaj tri? OBČINSTVO: [neslišno] DAVID Malan: Točno tako. Prvi del je niz. Drugi argument je znak za dolar podčrtaj GET uporabniško ime nosilca. In tretji argument je Ista stvar, ampak samo ime. Torej z drugimi besedami, sedaj če sem imel spletnega obrazca da je bilo na poljih z besedilom, ena za uporabnikovo uporabniško ime, ena za njegovo ali njeno ime, samo kot bi lahko vidite na spletni strani ko se registrirate za nekatere spletne strani, bi to lahko biti kodo na zadnji konec, da je v resnici počne vstavljanja zdaj v podatkovno bazo. Zdaj pa, nasprotno, pa hitro naprej. Recimo, da je uporabnik zdaj prijavi in ​​želite pisati PHP kodo, ki preveri, ali je oseba, ki je pravkar prijavljeni je dejansko uporabnik, lahko uporabiti precej preprosto sintakso. Lahko rečem SELECT, recimo zvezda, kjer zvezda pomeni vse. Ne vem, kaj sem želijo, tako da samo dajte mi vse stolpce iz tabele pozval uporabnike, če je, in to je lepo. Izberite podpira tisto, kar je imenuje predikat, ki je kot način kvalifikacije, kar hočeš. Kje username enaka citiram, konec citata Malan. Torej tudi tu, sem vgrajeni znotraj argumenta na funkcijo PHP, linijo SQL kode. In da SQL koda ta Čas je dobesedno dogaja za iskanje citiram, konec citata Malan. Zdaj pa to še ni vse, da je koristno, tako da bom preskočiti, da in bom dal stran ta tip od Brady, in pojdi in plug-in namesto vprašaj tukaj. Torej, samo da bo jasno, kaj naj bi bil moj drugi argument se, če je nekdo samo prijavljeni in I želeli preveriti, če on ali ona je pravzaprav uporabnik? OBČINSTVO: [neslišno] DAVID Malan: Ja. Slišal sem, da znak za dolar podčrtaj GET citiram, konec citata uporabniško ime. In da bi se morali vrniti k meni koli od vrstic v svoji bazi podatkov ki imajo uporabniško ime Malan. Zdaj upam, da bom dobil nazaj nič, če Malan je nikoli ni bilo tukaj, ali enega, če ima. Jaz ne bi dobili nazaj dva ali tri ali štiri. Zakaj? OBČINSTVO: [neslišno] DAVID Malan: Rekel sem edinstven, kajne? Preprostega razloga. Ker sem rekel, je to dobil biti edinstvena, samo logično, imate lahko samo nič ali enega Malans V tem konkretnem tabele zbirke podatkov. Zdaj kot prahi, samo zato, da ste videli da, čeprav sem še naprej uporabljati GET in čeprav PSet6 uporabljajo samo GET, lahko zagotovo POST. In opozarjajo, da je objava drugo Tehnika za predložitev podatkov svojo obliko, vendar ne pokaže v URL. To je malo bolj varen gotovo za Stvari, kot so uporabniška imena in gesla, ki PSet7 bo, v resnici gre. Torej, dajmo to narediti v PHP MyAdmin in glej kaj se zgodi. Bom šel na zavihek MySQL. In opazil, da so privzete vrednosti za PHP MyAdmin, samo poskusiti, da je koristno, je, da izberete zvezdo od uporabnikov, ko ena. No, eden je vedno velja, da To je neumno učinkovit od le izberite vse. Ampak jaz grem, da se malo bolj občutljiv in ročno tip iz SELECT zvezda iz uporabnikov. Zdaj tehnično, lahko citiram imena tabel. To je redko, da boste morali, ampak obvestilo, to niso svoj običajni kotacije na tipkovnici ZDA. To je tako imenovani backtick, ki je na splošno na zgornji levi strani kotu tipkovnici. Ampak to je redko, da boste dejansko morali ukvarjati s tem, tako da bom samo jih izpustiti anyway. Torej, zdaj, naj gredo naprej in zadeti iti. In koliko vrstic naj dobim nazaj, ko sem izberite zvezdo od uporabnikov? OBČINSTVO: [neslišno] DAVID Malan: število vrstic, seveda. Toda koliko v tem beton zgodba prav zdaj? Drugič, ker ni bilo jaz in tam je bil Rob. Torej, če sem kliknite Go, vidim, da je vizualno Sem prišel nazaj, res, dve vrstici. Obstaja veliko nereda na zaslon, ampak vidim samo dve vrstici. Nasprotno, če bi to še enkrat in ne SELECT zvezda od uporabnikov, kjer je username enaka citiram, konec citata Malan, zdaj, če sem kliknite Go, Jaz sem samo še, da bi dobili nazaj eno vrstico. In nenazadnje, če naredim kaj takega, recimo, da mi ni mar dobili vse, ki je nekako nesmiselno zdaj, ker tam je samo dva stolpca. To ni, kot sem izbiro ogromne količine podatkov. Recimo, da sem šel naprej in ne SELECT ime FROM Uporabniki, kjer username je enak Malan, kaj je lepo o SQL pošteno, je, da je res samo ne kaj vam je povedal, da storiti. To je precej kratka, vendar se dobesedno samo povejte, kaj želite storiti. Izberite ime od uporabnikov, kjer je uporabniško ime je enako Malan. In res je, da je jasna. Torej, zdaj, če sem udaril Go, koliko vrstic bom dobil nazaj? Ena, ker je to samo Malan, upajmo. Ali nič, če ga ni obstaja, vendar maksimalno. In koliko stolpcev bom dobil nazaj? Koliko stolpci? Tokrat sem le, da bo da bi dobili eno, ker nisem izberite zvezdo, ki je vse. Zdaj sem izberete le ime, tako da sem pravkar dobil nazaj en stolpec in eno vrstico. In izgleda nekako ustrezno smešno, samo videti super majhna, kot je ta. Torej, kaj se v resnici dogaja? Ko ste izvršiti SQL poizvedbo z uporabo izberite, kaj ste dobili nazaj iz baze je kot začasno tabelo z vrsticami in stolpci, morda, ampak da izpustite ničesar, ga je tebi dejansko ni izbrana. Torej, to je kot, če nekdo imel velik preglednico vseh študentov registrirana za nekatere študentski skupini, in pravite, mi vse novinec, ki ste registrirana za naše študentske skupine, kar vaš kolega v študent skupina lahko storite se lahko oni samo roko si celotno preglednico. To je, kot pravijo, da izberete zvezdo. In to je malo nadležno, če si želel samo novinec. In tako, če boste namesto tega je rekel, izberite zvezda iz tabele zbirke podatkov kjer je leto je enako citiram, konec citata novinec, to je kot da bi vaš prijatelj v študentski skupini dobesedno poudaril in kopira le novinec vrstice, jih prilepijo v novo Google Preglednice ali Excel datoteka in vam vrnil izhajajo samo datoteko. To je vse, kar se dogaja na konceptualno tukaj. Torej, na koncu, ne moremo storiti nekaj zelo fancy stvari s shranjevanjem stvari, kot so uporabniška imena in gesla in podobno. Ampak, se je izkazalo, moramo storiti malo drugače, kot je ta. Saj ne, da pameten samo shranite uporabniško ime in geslo. Nekdo prej, mislim, dol, predlagal ID. Zdaj bi lahko ID biti kot Harvard ID ali Yale Net ID, vendar bi bilo še enostavnejša V naši podatkovni banki primeru. In res, skupna zadeva je še en stolpec. In bom šel naprej in uredim mizo. In če si igral s ta vmesnik za PSet7, boste videli, da si lahko ogledate ta gumb tukaj in dodajte polje na začetku tabele. In zdaj, če sem kliknite Go, gre da bi mi dal eno od teh oblik od prej. Bom dodati polje imenovano ID. In bom, da bo številčna vrsta. Imam cel kup vrednosti za številkami,. Jaz sem šele tekoč, da izberejo INT in Ne skrbite različnega velikosti. Nimam navesti dolžino ali vrednost, zato, ker se dogaja, da 32 bitov ni važno kaj. Atributi, nismo videli prej. Vse obresti, ki v katerem koli od teh Meni možnosti tokrat? Za INT? Kaj predlagate? Ne? Ali kateri koli od teh smisla? Ja. Ja, nepodpisano, kajne? Na splošno, če bomo dal vsakdo edinstvena številka, ki je, če je ta zgodba dogaja, res samo želim oseba imeti toliko kot nič in ena in dva in tri in štiri. Mi ni treba ukvarjati z negativnimi številkami. Samo zdi kot nepotrebne kompleksnosti. Hočem štiri milijarde možne vrednosti, ne štiri milijarde možne vrednosti, tako da sem samo podvojila kapaciteta mojega INT. Kot prahi, če želite, da se nanašajo da je to nekaj takega kot so Facebook, nazaj v neke vrste moj dan, ko Facebook prvič prišel ven, Mislim, da tisto, kar so bili uporabljajo v njihovi bazi podatkov MySQL Če želite shraniti uporabnikov identifikator, je bil samo INT. Seveda, tam je veliko realnih ljudi na svetu. Tam je veliko lažnih Facebook predstavlja v svetu. In tako na koncu, Facebook preplavila velikost notr, A štiri milijarde vrednost. Kateri je razlog, zakaj, če pogledaš okrog in tam je spletne strani da vam lahko povem, kaj svoj edinstven ID. In če ne boste nikoli izbral ime v Facebook, boste videli svoj edinstven ID. Mislim, da je profil dot PHP Vprašanje znamka ID znaša nekaj. To je zdaj nekaj podobnega velik INT, ali dolgo dolgo, če hočete, ki je 64-bitna vrednost ali kaj primerljivi. Torej, tudi v resničnem svetu, se ti vprašanja, na koncu včasih važno. In se izkaže, tu, če sem daje vse moje uporabnikov edinstven ID, Želim biti super eksplicitno in minimalno narediti na tem področju edinstven. Vendar se izkaže, da je ena kos nomenklature danes preveč da je primarni ključ. Če ste načrtovanju baze podatkov miza in veš vnaprej da je eden izmed stolpcev v tej preglednici morajo biti in bodo enolično identifikacijo vrstice v tabeli, ki jih želite ga določi in povej baze podatkov, to je moj primarni ključ. Morda obstaja dvojnikov na drugih področjih, vendar sem povedal, baze podatkov, da je to je moj primarni, moje najpomembnejše področje, da je zagotovljeno, da je edinstven. Zdaj, to se zdi odveč. Jaz sem zdaj predlaga, da smo dodati, s klikom na Shrani tukaj, polje called-- in grem da gredo naprej in kliknite AI, se bomo vrnili k da je v trenutku, Save. Sem predlagala zdaj, moja miza videti takole. Imam INT polje z imenom ID, char polje imenovano ime, VARCHAR polje imenovano Ime, ampak ID, če je primarna in zato edinstven, Zakaj sem samo zapravljajo Čas uvajanja kaj dejansko je druga edinstvena Polje se imenuje ID, ki je notr? Ime, odpoklic, je bil že edinstvena, smo rekli. Torej samo logično, vam ni treba vsaka izkušnja baze podatkov razloga s tem, zakaj Morda sem predstavil notr kot moj enolično identifikacijsko oznako, kot tudi? Kaj je this-- ponovi? OBČINSTVO: [neslišno] DAVID Malan: Random dostop je lažji, zakaj? OBČINSTVO: [neslišno] DAVID Malan: Ja, to je Samo dostop številke. Torej, če misliš, da je to resnično je tabela, kot matrike, zdaj imam edinstvene identifikatorje da sem lahko skakati okoli. In bolje, kot da je še vedno, da je kako velik se INT bo spet? 32 bitov ali štiri bajte. Kako velika je moje uporabniško ime bo? Maksimalno? 16 bajtov. Torej, če ste res skrbeti izvajanje kode, pomislite na PSet5, bi raje iskati štiri byte vrednosti ali 16 bitna vrednost, kajne? Res je tako enostavno, kot da. Moraš delati štirikrat toliko dela za iskanje imen, ker tisti, 16 bajtov. Torej, moraš dobesedno primerjavo vseh 16 bajtov biti prepričan, da je to uporabniško ime hočem. Ker je za INT, lahko to samo s štirimi bajti. In kot rezerviran za tiste, zanima računalniške strojne opreme, se izkaže, da lahko fit nekaj podobnega notr ali 32-bitna vrednost v nekaj imenovano register v računalniku CPU, kar pomeni, da je super, zelo hitro, tudi pri najnižji raven strojne opreme računalnika. Torej, tam je samo prednosti vsem. Torej, kaj to pomeni? V bistvu, ko ste načrtovanju tabela zbirke, skoraj ves čas se vam dogaja, da imajo ne le podatki, ki jih skrbi, ampak tudi nekaj podobnega edinstven identifikator ker to se dogaja, da Storimo druge stvari. In kaj je spotakniti en problem tukaj. Denimo, da imajo uporabniki ne samo imena in imena, imajo pa tudi stvari, kot je mest in države in poštne številke, vsaj tukaj v ZDA. Torej, bom šel naprej in samo hitro reči, dajte mi tri več stolpcev Na koncu tabele. In to se bo City, To se dogaja, da je država, in to se bo Zip. Zdaj City, kaj tipi podatkov bi to moralo biti, morda? VARCHAR? Ne vem, kaj je Najdaljša ime mesta je. Nekje v Ameriki, tam je verjetno nekaj smešno dolgo besedo, tako da je šele iti z 255, kar je nekoliko zgodovinsko ali samovoljno. Država, kaj želite, da naredim? Sodba klic, kajne? Kaj je morda najbolj učinkovit? Koliko znakov? Mogoče samo dva, če bomo lahko izmaže delaš samo, podobno, MA za Massachusetts in tako naprej. Torej, bom šel vrednost CHAR dveh. Poštna številka je zanimiva. Mi smo tukaj v 02138, tako da predlaga, da bi morali uporabiti, kaj? To je INT, kajne? INT, INT, kratko? Kratek bi delovalo. Ne? CHAR ali pet, ampak hočem INT. Zakaj potisnite nazaj na INT? Prepričati me iz tega. Kaj je neumno približno INT, mojo idejo? Ja. OBČINSTVO: Vpiti več pomnilnika. DAVID Malan: Vpiti več pomnilnika. Štiri bajte, ampak si predlaga poštno številko kot pet bajtov ali je bil nekdo kot CHAR, ki se počuti kot eh, da to ni res Primer. No, zabavna zgodba. Pred leti, ko sem se uporabljajo za uporabo Microsoft Outlook za svoj email, Sčasoma sem želel, da preklopite na Gmail. In tako sem se izvažajo vse moje stike iz Outlooka kot datoteko CSV. Vejico ločene vrednosti, ki samo pomenilo I imeli vsi moji prijatelji imena in priimek Imena in telefonske številke in poštne številke in vse to. In potem sem se postavil na napaka, da odpira v Excelu, ki je preglednice program, ki razume CSV datotek, kot smo videli. Ampak potem, moram se udaril, kot so, Ukaz ali Control S v eni točki. In Excel očitno v času je imel funkcijo pri katerem koli času, ko je Videl številko, je poskušal biti koristen. In če je to število začelo z ničle, bi bilo samo se znebite njih. Zakaj potrebujete vodilni ničlami ​​na cela? Oni so brez pomena, matematično. Oni niso nesmiselna v US Postal sistema. Torej, sem imel več let, na ta dan, sem še vedno imeti prijatelje, da je, ko je redek primer, da moram nekdo reševanje teh dneh, Jaz bom še vedno vidim, da sem imeti prijatelja v Cambridgeu, Massachusetts, 2138. In to je nadležno, če ste poskušajo rešiti s programsko ustvarjajo ovojnice ali pa ga zapišete. In da je zaradi tega razloga, Sem izbral napačno vrsto podatkov. Torej, jaz ljubim svojo idejo. Oglejmo uporabite polje CHAR. Pet znakov, razen je primer kotiček. Če ste še vedno pošiljate pošto, včasih zip kode v teh dneh, oni, kot so, plus štiri. Torej, potrebujemo vezaj in nato moramo še štiri številke. Torej, če sem iskren, bi ga iti mnogo različnih načinov. Za zdaj, grem naprej je preprosta in sem samo reči, da je to pet CHAR vrednost in smo bo preskočiti celotno pomišljaj plus štiri. Ampak to so vrste kompromisi. In si lahko zamislite od Enake težave, ki izhajajo s telefonskimi številkami ali drugih področjih. In zdaj, to je dejansko nespameten cesta iti dol. Denimo tako Rob jaz in Hannah in Maria in [? Davon?] In Andy in drugi na osebje vse živo v Cambridgeu, Massachusetts, 02138. To dejansko počutijo neumno, da sem tako, da moji uporabniki mizo, mesto, državo, in zip. Zakaj? OBČINSTVO: [neslišno] DAVID Malan: Ponovi? OBČINSTVO: [neslišno] DAVID Malan: Oni so vedno šli skupaj, kajne? Ko se izkaže, smo vajeni razmišljati To se je zgodilo, dokler ne bomo izčrpno iskali celo ZDA, in se izkaže, da obstaja so nekatere nedoslednosti kjer več mesta imajo enako zip, kar je čudno. Ampak, če bomo določajo, za zdaj, 02138 Vedno je Cambridge, Massachusetts, Zakaj na svetu bi si shranite v Vaša podatkovna baza Cambridge in MA in 02.138 zame in za Hannah in Robu in za [? Davon?], In za druge, ki živijo tukaj v Cambridgeu, je popolnoma odveč. Mi bi morali pobegniti s samo shranjevanje kaj? Samo poštna številka. Ampak potem, če hranimo samo poštna številka, jaz želim, je verjetno, za mojo spletno stran, da vem, kje je 02.138. Torej, rabim še eno mizo. In to je v redu. In v bistvu je to ena oblikovanje procesov oblikovanja tabel da boste storili v PSet7 kot dobro, pri čemer želite dejavnik skupne podatke. Tako kot smo bili faktoring ven skupna številka in faktoring iz skupne stili iz CSS, tukaj Tudi v podatkovni bazi, če potrebujete le 02138 enolično identificirati nekdo rojstni kraj, Ne shranjujte Cambridge, Mass za vsak darn uporabnik v tabeli. Namesto tega imajo posebno tabelo imenovano Zadrge, da bi morali kaj stolpci? Verjetno polje ID, samo zato, ker za načel govorimo o sedaj. Verjetno zip polje za 02138. In potem je verjetno tisto, kar drugi stolpci? Mesto in država, vendar imajo le eno vrstica za 02138, ena vrstica za 02139, ena vrstica za 90210. In to je dobesedno vsi zip kode vem. Torej sedaj, kaj lahko storim? To je problematična, ker Zdaj imam dve tabeli. Torej, moji uporabniki so večinoma tukaj, vendar je njihova informacije mestna država je tukaj. Torej, se izkaže z SQL, tam je pravzaprav način, da se pridružijo informacije, in boste videli v PSet. Vendar se izkaže, da lahko narediti kaj takega. SELECT zvezda od uporabnikov, JOIN zadrge ON Uporabniki dot zip enaka zadrge dot zip. Ki je malo Razvučen, Res je, vendar je to le pomeni, da izberete vse od Proces ob moji uporabniki mizo in moja zadrge miza. Pridružite se jim na enem Polje imajo v koloni. Torej, dobesedno delaš nekaj kot je ta, in mi dala nazaj nova začasna tabela da je širša, da je večji, da ima vse stebri iz oba. In da, preprosto, bi sintaksa za kaj takega počneš. Torej, da je to prednost, vendar pa se dogaja da bo druge odločitve o oblikovanju boste morali narediti, ne le z indeksi pa tudi teče v izzive. Dejstvo je, da je izziv v vsakem načrtovanje podatkovnih baz pri čemer včasih morda dve ljudje želijo dostop do enake vrste v podatkovni bazi miza. Torej, to je nekaj, kar bomo naletijo na PSet7 kot dobro. Ampak sem mislil, da sem videti na enem napad, ki je mogoča v SQL. Katere so nekatere od težave, ki lahko nastanejo? Torej, boste to srečati v PSet7. In vam povem odkrito, kaj je kodiranja rešitev za ta problem je. Ampak, če ste vzeli višji razred ravni, še posebej v operacijskih sistemih, boste naleteli vprašanje Valentnost, problem poskuša narediti več stvari naenkrat brez prekinitve. In pomislil sem, da bi to uvesti Ideja za PSet7 z metaforo da sem se naučila v Margo Operacijski sistemi CS164 Soda je razred pred leti. Recimo, da imate eno od teh domu hladilnikov v vaši študentski sobi ali hiši, in imate resnično nagnjenj za mleko. In tako, prideš domov iz razredov Nekega dne, ko odprete hladilnik. Oh, prekleto. Ni mleko v hladilniku. Torej, zaprete hladilnik, zakleniti vrata, zaklenite domu, sprehod okoli vogala za CVS, postavi se v vrsto, in začeti preverjanje ven za nekaj mleka. In to bo trajalo nekaj časa, ker tisti prekleti samostojno blagajno števci trajalo celo večnost, da nekako uporabiti. Torej medtem, tvoja cimra pride domov. On ali ona res všeč mleko, kot dobro. Pridejo v študentski sobi, odpreti hladilnik, oh, tako darn. Ni več mleka. Torej, on ali ona tudi gre za vogalom. Toda zdaj, saj je kot dva ali tri ali štiri CVSes bližini, se zgodi, da bi v eni izmed Različne tisti na trgu. In zdaj, nekaj minut kasneje, oba prišel domov in mo, najhujši problem kdaj. Zdaj imate preveč mleka zato, ker se dogaja, da gredo kislo. In radi mleko, vendar pa Ne res rad mleko. Torej sedaj, to je drago napaka, ker oba sprejeli odločitev, ki temelji na stanje neke spremenljivke, ki je v procesu spremenjena s tabo, pobudnik bo dobil mleko. Torej, kaj je morda človek rešitev za ta problem? OBČINSTVO: [neslišno] DAVID Malan: Pustite noto, kajne? Vedno pustite opombo, če ste seznanjeni s to predstavo. Da, obstaja midva. Torej, vedno pustite opombo, ali dobesedno zaklene hladilnik z nekakšno ključavnico ali Nekaj ​​čez vrh takega. Ampak to je dejansko dogaja, da se Ključni problem pri oblikovanju podatkovne baze, še posebej, če imate morda več brskalnikov, več prenosnih računalnikov, več uporabnikov vseh poskuša posodabljanje informacij naenkrat. Posebej občutljive informacije kot so finančne informacije, pri čemer z trgovanje parka spletna stran, kot si ti bomo gradnjo, Kaj pa, če želite preveriti, koliko denarja imate, in potem, če imate dovolj, kupiti nekaj zaloge? Toda kaj, če nekdo drug, ki ima skupni račun z vami je hkrati poskuša kupiti nekaj zaloge? Torej, on ali ona je preverjanju podatkov stanje na računu, tako vas dobili nazaj isto Odgovor, ni mleka. Ali oboje od vas dobil nazaj odgovor, imate 100 $ na računu. Oba poskusil, da bi odločitev kupiti eno delnico nekega podjetja zalogi. In zdaj, kaj se zgodi? Imate dve delnice? Nimate delnice? Lahko se pojavijo težave, kot je ta. Torej, bomo naleteli na to. Injection napadi SQL, na srečo, so nekaj, kar vam bomo pomagali pri, vendar so ti atrociously pogosti v teh dneh še vedno. Torej, to je samo primer. Naredim nobenih zahtevkov, ki Harvard PIN sistem dovzetni za tem napadom. Poskušali smo. Ampak, veste, da mi imeti pogoje, kot je ta. In Yale Net ID je podoben išče zaslon v teh dneh. In se je izkazalo, da morda PIN številka sistema se izvaja v PHP. In če je were-- je not-- so Morda imajo kodo, ki izgleda takole. Imajo dve spremenljivki. Daj mi uporabniško ime in geslo od po super globalne spremenljivke da smo se pogovarjali o prej. Mogoče Harvard ima poizvedbo kot SELECT zvezda iz uporabnike kjer username da je enak in geslo, da je enak. In opazil, da sem samo priklopom v uporabo kodrasti brace zapis od drugega dan, kar pomeni, da samo priključite v vrednosti tukaj. Jaz ne uporabljate Vprašanje tehnika znamka. Nimam nobenega drugega ali tretje argumenti. Jaz sem samo dobesedno gradnji niz sebi. Problem pa je, da če je nekdo všeč scroob, ki je sklicevanje na filmu, dnevniki z nekaj takega, in sem odstranjen pike ki ponavadi prikriti Gesla, kaj če je zlasti zlonamerno in njegovo geslo je morda 12345, na filmu z naslovom "Spaceballs" vendar je kritično Vrste A enojni narekovaj po pet, potem dobesedno beseda ali v prostoru, nato pa citiram, konec citata ena enaka citiram enega, ampak obvestilo, on je kar izpuščen? On je izpuščen citat na desni in on je izpuščena citat na levi strani. Ker če je to napadalec scroob je domneva je, da so ljudje, ki so pisali to PHP koda ni bila tako svetla, Mogoče pa samo še nekaj single navednice interpolacijo spremenljivke v zavitih oklepajih? In tako morda, bi ga lahko nekako za dokončanje svojo misel za njih, vendar na način, ki se dogaja da naj mu vdrl v sistem PIN. Z drugimi besedami, recimo da je ta oznaka in zdaj priključite kaj scroob tipkal. In to je rdeča, ker je to slabo. In temeljno besedilo je tisto, kar je vneseno, scroob lahko trik Harvard je strežnik v gradnji SQL poizvedbo niz, ki izgleda takole. Geslo enaka 12.345 ali eno enaka ena. Rezultat, ki je logično, je, da bo to prijavite scroob se, če je njegov geslo 12345 ali če ena Ene ena, ki je seveda vedno velja, kar pomeni scroob vedno pride v. In tako, tako, da se določi To, kot je v veliko primerih bi bilo bolj osredotočila pisati. Če želite uporabiti nekaj podobnega naši Dejanska funkcija poizvedbe, ki boste videli v PSet7, kjer smo priklopili nekaj podobnega vprašanje zaznamuje tukaj. In lepota Funkcija izraz, da smo vam je brani pred njimi tako imenovani injection napadi SQL, kjer nekdo tricking kodo v vbrizgavanjem svojo lastno kodo SQL. Ker kakšni funkciji poizvedbe smo vam bo dejansko naredil, če uporabite sintakso vprašanje mark in drugi in tretji argument tod je tisto, kar se je to dodati k input, da uporabniku na voljo? Tisti, poševnica nazaj citira. Torej, da pobegne koli potencialno nevarne znake. To izgleda čudno zdaj, vendar to ni ranljiva ker ne spremeniti logiko več ker je cela geslo zdaj enojni narekovaj, da to ni, v resnici, geslo scroob je. Torej, to je bilo nekaj šale o tem v zadnjih letih. Torej, to je fotografija sprejeti nekaterih geek na parkirišču pri čemer morda veste, da se nekaj mest in države poskušajo skeniranje vašega dovoljenja plošča vam ali vstopnice zaračunavati vas če greš skozi brez, kot so, E-Z Pass stvar. Torej, ta oseba domneva, da je morda ljudje pišejo sistem E-Z Pass ni bila tako svetla, in morda so samo združena z verigo skupaj niz, tako da je on ali ona ni mogla zlonamerno ne samo izpolniti svojo misel, ampak dejansko izvršiti slab ukaz, ki jih še nismo omenili, vendar pa boste verjetno lahko uganiti. Da poleg izbrisati, in Vstavljanje in posodobitev in izberite tam je tudi ključna beseda se imenuje padec, ki dobesedno izbriše vse v bazi podatkov, ki je Zlasti je slab. Mi lahko povečate na to, če to je malo težko videti. To je sedaj, je slavni cartoon da je zdaj nadvse pameten in razumljivo. [Smeh] Ja, kul. Vrsta geeking ven. Torej to so torej Injection napadi SQL. In oni so tako enostavno, da bi se izognili z uporabo pravica kodo ali prave knjižnice. In boste videli v PSet7, da je Zato smo vam funkcijo poizvedbo. Torej, nekaj Dražljivke da smo menili, da bi daš tukaj v naši Preostali minut skupaj. Torej, ko se spomnite, od ničelne teden smo uvedla teh dveh žarnic, ki so lepe, ne samo zato, ker oni so precej in so pisane, ampak zato, ker jih podpirajo nekaj imenovano API, Application Programski vmesnik In v CS50 doslej, ki smo jih večinoma osredotočena na GET in POST, vendar se izkaže, tam je druga HTTP glagoli kot DEL. In v resnici je bilo to slide od ničelne tedna pri čemer če pišete kodo, ki pošilja a la PSet6 zahtevo HTTP, ki Izgleda da je ta s tem kos besedila na dnu, ki se imenuje JSON, ali JavaScript Object Notation da bomo govorili o prihodnji teden, lahko vklopite ali izklopite ali sprememba barva svetlobe, kot so tiste. Torej, če ima CS50 tudi poleg nekaterih od teh žarnic v New Haven Če želite izposoditi jih za končne projekte, tudi nekateri Microsoft Trakovi, ki so kot ure, ki jo nosite okoli zapestja ki imajo podobno API, tako da boste Lahko napišete svoje lastne programske opreme za njih. Imamo račun pri Tako koda Apple iOS da če imate Apple Obiskujte ali iPhone ali iPad ali iPod, lahko pišete kodo, ki dejansko deluje na tiste. Imamo cel kup iz Arduinos, ki so mali računalniki brez primere v bistvu da se lahko povežete preko USB, običajno na svoj Mac ali PC, napisati kodo, ki teče na teh fizični Naprave, ki imajo pogosto senzorjev na njih tako da lahko interakcijo z resničnim svetom. Imamo cel kup od Leap Motion naprav, ki so USB naprave za Mac in Računalniki, tu in spet v New Haven. In če ga priključite na vaš Mac, lahko dejansko nadzor računalnika s pisanjem programske opreme da s pomočjo infrardečih žarkov, številke, kje so vaše človeške roke, celo brez dotikanja tipkovnice. Mislili smo, da bi delili hitro pogled na to, na primer. [Predvaja glasba] Torej, imamo celoto kup teh stvari, Tudi imenuje Myo roko pasove ki si dal čez podlaket in potem si lahko nadzorujete pravi svet ali virtualni svet, kot je ta. [Predvaja glasba] Ali pa imamo tudi nekaj Google Lepenka, ki je dobesedno, kot so, kartonska škatla, da bi lahko dal na svoj obraz, ampak slide v telefonu vanjo tako da si dal kozarec vaš telefon zelo blizu tvojih očeh. In Google lepenka je precej poceni na 10 $ ali 20 $. In to je malo leče da je nekoliko off premik slika na zaslonu vašega človeka Oči, da vam občutek globine tako da ste dejansko imajo 3D okolje, ki je pred vami. Imamo tudi nekaj Samsung Gear, ki je dražja različica te, da pa se lahko podobno potisnite v Android telefon in vam iluzijo of-- ali pa izkušnje navidezne resničnosti. In v naših zadnjih dveh minutah, smo menili, da bi poskušali to storiti. Če sem lahko projekt, kar je Colton tukaj samo za Brušenje vaš apetit, Naj gredo naprej in vrgel up na velikem zaslonu tukaj. Naj ubiti luči. Colton, hočeš iti naprej in dal na vašo celico za trenutek in pridi do sredina fazi? In hočeš, da project-- To je tisto, kar Colton vidi. Zdaj, Wi-Fi na tu ni tako močan, za to napravo da je to super prepričljiv, vendar Colton je dobesedno v tem čarobnem futurističnem mestu. On vidi le eno sliko. Vidite svojo levo in desno oko da njegovi možgani so šivi skupaj v tridimenzionalnim okolje, na njegovem obrazu. Pravkar je izbrana možnost menija tukaj. In zato še enkrat, on je nosil te slušalke z Samsung telefon na to, da je brezžično projiciranje na našo režijske stroške. Zdaj ste na Marsu, mislim? COLTON: Mislim, da. Nisem prepričan, da [neslišno]. [Smeh] DAVID Malan: Izkazalo se je, Mars ima te menije. COLTON: [neslišno] nekateri kul mesta, če želimo iti to-- DAVID Malan: Kam hočemo iti? COLTON: [neslišno] DAVID Malan: In poglejmo kjer Colton nas je ob zdaj. COLTON: [neslišno] DAVID Malan: Torej, tam je toliko različnih krajev, ki jih lahko sami. Tam je FAPIs prek katerega lahko pisanje iger ali interakcije, ki teči, navsezadnje, na telefonu. Torej, res samo pisanje mobilni telefon app. Ampak hvala za programsko opremo in grafične zmogljivosti, Sedaj Colton je v tem mali koči. In ob tveganju prepričljivo sebe, Colton in bom ostal za medtem ko na koncu razreda danes če bi rad prišel gor in igral. In jih bomo prinese nazaj naslednji teden, kot tudi. Brez nadaljnje, ado to je vse za danes. Se vidimo naslednji teden. [MUSIC - ragga TWINS, "BAD MAN"]