>> [Speel van musiek]
David Malan: Alle reg, dit is CS50.
Dit is die einde van die week agt.
En vandag, het ons begin in 'n paar stukkies in te vul
wanneer dit kom by die bou van dinge op die web.
So, onthou dat op Maandag ons spandeer baie meer tyd
op PHP, wat hierdie dinamiese programmeertaal wat
laat ons uitset onder dinge, HTML en ander sulke inhoud
dat ons sal wil sien.
Maar ons het nie regtig gekyk na hoe ons gaan om enige inligting te stoor.
Inderdaad, amper enige van die super interessante webwerwe wat jy besoek vandag
'n soort van databasis op die agterkant, reg?
Facebook winkels beslis baie data oor almal van ons en Gmail winkels al
van jou e-pos.
>> En so baie ander plekke is nie net statiese inhoud wat inligting.
Dit is eintlik dinamiese in een of ander manier.
Jy insette lewer, dit updates die bladsye vir ander mense.
Jy boodskappe, stuur jou boodskappe, en so meer.
So vandag, ons kyk nader aan die fondamente van 'n projek
dat jy duik in die volgende week, CS50 Finansies, wat
is eintlik gaan hê jy bou iets wat nie in C, maar in PHP.
'N webwerf wat 'n lyk bietjie iets soos hierdie
wat dit moontlik maak te koop en verkoop aandele wat eintlik
gaan vestig op die regte tyd voorraad data van Yahoo Finansies.
En so uiteindelik, sal jy die illusie vir jouself en vir gebruikers
wat jy eintlik koop en verkoop aandele en kry byna real time
updates, bestuur van 'n portefeulje, wat almal
gaan om te vereis dat, uiteindelik 'n databasis van die gebruikers.
>> So, in jou eie woorde, veral as jy nie
super vertroud is met die rekenaar wetenskap of databasisse, wat
jy 'n databasis te weet om te wees nou, in nontechnical terme?
Wat is dit?
Hoe sou jy dit beskryf 'n kamermaat of 'n vriend?
>> GEHOOR: [onhoorbaar] inligting [onhoorbaar]
>> David Malan: So, 'n lys van inligting, of 'n store-- 'n lys van inligting
wat jy dalk wil om te stoor oor iets, soos 'n gebruiker.
En wat doen gebruikers wat verband hou met hulle?
As jy 'n gebruiker op Facebook of is Gmail, wat is die eienskappe
dat ons almal gebruikers?
Soos wat dalk 'n paar van die kolomme in die spreadsheet wat ons
verwys laaste keer?
Omdat weer, kan jy dink aan 'n databasis
regtig so 'n fancy Excel lêer of Google Sigblad of Apple Nommers lêer.
>> So, wat dink jy van wanneer jy dink van 'n gebruiker?
Wat doen hulle?
Wat is dit?
>> GEHOOR: 'n naam.
>> David Malan: 'n naam.
So as naam, soos, David Malan sou die naam van 'n paar gebruikers te wees.
Wat doen 'n gebruiker te hê?
>> GEHOOR: 'n ID.
>> David Malan: 'n ID.
So, soos 'n ID-nommer, soos jou Harvard ID of jou Yale Net ID of die wil.
Wat anders kan 'n gebruiker te hê?
>> GEHOOR: Wagwoord.
>> David Malan: 'n wagwoord, miskien 'n adres, miskien 'n telefoonnommer, miskien
'n e-pos adres.
So, daar is trosse van velde en dit kon soort van spiraal buite beheer
vinnig so gou as jy begin besef, o, laat ons die winkel
en laat ons dit en dat te stoor.
>> Maar hoe weet ons eintlik doen?
So weer, die geestelike model om vir vandag soos ons
duik in die werklike SQL, Structured Query Language,
is 'n databasis wat lyk soos hierdie.
Dis net rye en kolomme.
En jy kan dink Google Spreadsheets of enige aantal ander programme.
Maar wat is die sleutel oor MySQL, wat is die databasis sagteware wat ons gaan gebruik,
die vrylik openlik available Facebook gebruike
dit en 'n aantal ander websites-- databasis stoor dinge verhoudings.
En 'n relasionele databasis beteken net een wat letterlik
slaan sy data in rye en kolomme.
Dit is so eenvoudig soos dit.
>> So, selfs iets soos Oracle dat jy dalk oor die algemeen het gehoor van
is 'n relasionele databasis.
En onder die enjinkap, is dit winkels data in rye en kolomme.
En Oracle koste 'n baie geld om dit te doen,
terwyl MySQL aanklagte jy het niks vir dieselfde.
So, SQL gaan om te gee ons ten minste vier bedrywighede.
Die vermoë om data te kies, soos lees data, voeg, te verwyder, en update data.
Met ander woorde, dit is regtig die vier belangrike bedrywighede
wat gaan ons toelaat om te verander dinge in die rye en kolomme.
>> Die instrument wat ons veral sal gebruik vandag SQL leer en te speel met dit
weer genoem PHP MyAdmin.
Dit is web-gebaseerde hulpmiddel.
Totale toeval dat dit is geskryf in PHP.
Maar dit gaan vir ons 'n grafiese gee gebruikerskoppelvlak sodat ons kan eintlik
skep hierdie rye en kolomme en dan met hulle praat via code.
So, laat ons nou begin om wat ek dink is eerlik
soort van die pret proses van die bou van die agterkant van webtuistes,
die dele wat gebruikers nie sien nie, maar sekerlik nie omgee,
want dit is eerder se data gaan.
So, soortgelyk aan C en 'n bietjie minder soos PHP,
SQL, of 'n databasis wat ondersteun SQL, het ten minste hierdie data tipes
en trosse van ander.
CHAR, VARCHAR, INT, BIGINT, DESIMALE en DATETIME.
En daar is 'n hele n klomp van die ander funksies,
maar laat ons dit doen deur manier van die werklike voorbeeld.
>> Ek gaan in CS50 IDE om te gaan waar in advance, het ek geteken
en ek het ook 'n besoek van 'n URL vir hierdie instrument genoem PHP MyAdmin.
En in die sewe probleem is, sal ons vertel jou presies hoe om hierdie koppelvlak te kry
ook.
Op die boonste linker hoek sien dit sê lesing.
En wat net beteken dat in advance, ek geskep
'n leë databasis genaamd lesing wat nog nie sigblaaie in.
Daar is geen rye en kolomme.
Omdat die eerste ding wat ons gaan doen
is begin om 'n tafel te skep wat gaan ons gebruikers te stoor.
>> So, letterlik oor hier om die reg, ek is
gaan na die databasis te vertel Ek wil 'n tabel genaamd Gebruikers.
So, dit is soos die lêer wat ek wil al my data stoor in.
En hoeveel kolomme?
Wel, laat ons hou dit eenvoudig vir nou.
Ek wil net om te slaan soos 'n gebruikersnaam en 'n naam vir 'n gebruiker.
Ons begin klein.
So, ek wil twee kolomme totaal.
En ek gaan om voort te gaan en klik op Go.
En dan, want hierdie kolomme, wat ek gaan
om do-- as dit internet cooperates-- alles reg,
so ons gaan om weer te probeer nie.
Ek gaan 'n tabel genaamd skep Gebruikers met twee kolomme, kliek Gaan OK.
Nou het ons het dit baie vinnig.
Dankie, baie goed gedoen.
Alle reg, so wat wil ons hierdie kolomme genoem te word?
>> So, een gaan genoem word Gebruikersnaam.
So, al wat ek sien here-- en die koppelvlak eerlik kry 'n bietjie lelik uiteindelik,
sodra jy begin tik in al hierdie data.
Maar wat is lekker is dat die soort van Vreemd genoeg, ek skep kolomme,
maar die instrument het dwaas gelê het in rye
sodat ek hierdie kolomme kan instel.
So, daar is twee spasies daar onder Naam.
En een van hierdie velde ek wil Gebruikersnaam genoem,
en die ander in die veld wil ek Naam noem.
>> En nou, ek het om van te kies datatipes vir hierdie dinge.
So, terwyl dit in Excel en Google Spreadsheets,
as jy 'n kolom wil jy letterlik tik net Naam of Gebruikersnaam, druk Enter.
Miskien het jy dit vet gesig te maak net vir duidelikheid, maar dit is dit.
Jy hoef nie spesifiseer die tipes van die kolomme.
Nou in Google Spreadsheets of Excel, jy kan bepaal hoe die data gelewer word.
Jy kan gaan na die menu Formatering en jy kan spesifiseer wys soos hierdie dollar teken
wys hierdie soos 'n drywende punt waarde.
>> So, dit is soortgelyk in die gees aan dat dit wat ons gaan doen,
maar dit is eintlik gaan om te dwing die data om 'n sekere soort wees.
Nou, selfs al is 'n oomblik gelede het ek het gesê daar is net 'n paar tipes data,
daar is eintlik 'n hele klomp, en hulle is
in wisselende grade van spesifisiteit.
En as 'n eenkant, jy kan selfs fancy dinge te doen
soos stoor geometrieën binnekant van 'n databasis.
Jy kan dinge te stoor soos GPS koördinate
en eintlik vind, wiskundig, punte wat naby aan ander.
Maar ons gaan hou hierdie super eenvoudige
en optrek na hier, al die sogenaamde string tipes.
>> So, hier is 'n lys van 'n hele klomp van opsies.
CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
En dit is soort van oorweldigend.
En ongelukkig ietwat paradoksaal om C,
'n CHAR is nie regtig 'n CHAR.
As jy spesifiseer in 'n databasis dat jou data tipe is CHAR,
dit beteken dat ja, dit is 'n CHAR, maar dit is een of meer karakters.
En jy het om te spesifiseer hoeveel karakters wat jy wil.
So, wat is 'n tipiese lengte vir 'n gebruikersnaam?
Is daar 'n beperking tipies?
>> GEHOOR: [onhoorbaar]
>> David Malan: 16 miskien?
Iets soos dit.
Jy weet, terug in die dag, dit gebruik om te wees agt.
Soms is dit 16, soms dit is selfs meer as dit.
En so, beteken dit nie beteken gee my 'n CHAR.
Dit beteken ek moet spesifiseer die lengte van die veld,
en nou kan ek iets soos 16 sê.
En daar is 'n kompromis hier.
So, sal ons sien in 'n oomblik dat dit beteken een
elke gebruikersnaam moet 16 karakters wees.
Maar wag 'n minuut, M-A-L-A-N. As dit my gebruikersnaam en ek is maar net die gebruik van vyf,
wat sou jy voorstel dat die databasis om te doen vir die ander 11 karakters wat
Ek het voorbehou ruimte vir?
Wat sal jy doen?
>> GEHOOR: [onhoorbaar]
>> David Malan: Ja, net maak hulle almal null.
Maak hulle ruimtes.
Maar waarskynlik nul, so 'n baie backslash nulle.
So, aan die een kant, ons het nou seker gemaak dat my gebruikersnaam
kan nie meer as 16 karakters wees.
En die ander kant van wat dat as ek het 'n baie lang naam
of wou 'n baie lang gebruikersnaam soos sommige van julle
ouens dalk in daardie kollege of op Yale.edu, kan jy nie een het nie.
En so in werklikheid, as jy het ooit geregistreer vir 'n webwerf
en jy geskree en gesê jou wagwoord is te lank
of jou gebruikersnaam is te lank, dit is bloot omdat 'n programmeerder, wanneer
instel sy of haar databasis, besluit dat hierdie gebied sal
wees nie meer as dit lank.
>> Alle reg, so what as ons voortgaan om te noem?
Hoe lank moet 'n Noem tipiese menslike wees?
Hoeveel karakters, 16?
Ek vermoed ons kon kry iemand in die kamer
waar deur sy of haar eerste plus laaste naam is langer as 16 karakters.
So, wat is beter as dit, 17?
18?
25?
Groter?
30?
>> GEHOOR: [onhoorbaar]
David Malan: 5000, oh my God.
So, dit is waarskynlik 'n ordentlike boonste verbind het, sal ons sê.
En hier is ons soort het om 'n oordeel te bel.
Soos, is daar geen regte antwoord hier.
Oneindige is nie heeltemal moontlik, want ons is uiteindelik
gaan have-- ons gaan uit van die geheue te hardloop.
So, ons het 'n stel oordeel oproep op 'n sekere punt.
>> Baie algemeen sou wees, byvoorbeeld, om use-- en laat my CHAR hier spesifiseer
as before-- 255 was letterlik die boonste limiet op hierdie databasis sagteware
jare terug.
En so, 'n baie van die mens wil net sê, fyn.
255 is die limiet.
Laat ons net die maksimum gebruik.
En dit is redelik belaglik.
Soos, as jy tik iemand se naam vir 200 plus karakters,
dat 'n bietjie belaglik.
>> Maar, onthou dat ASCII is nie die enigste stelsel vir karakters.
En so nie, veral in 'n baie van Asiatiese tale
waar daar karakters wat ons nie kan nie druk op keyboards soos my Amerikaanse
sleutelbord, sommige van die karakters eintlik neem 16 stukkies in plaas van agt bisse.
En so is dit eintlik is nie al wat onredelik
dat ons meer moet ruimte as ons wil aan te pas
groter is as die karakters baie Amerikaanse sentriese wat ons het geneig om te bespreek.
So, moet ons 'n paar bogrens.
Ek weet nie wat die beste een is, maar 255 is oor die algemeen 'n algemene een.
25 voel laag.
16, 32 voel laag.
Ek sou dwaal op die kant van iets hoër.
Maar daar is 'n kompromis, soos altyd.
Wat is die, miskien, voor die hand liggend kompromis van die reservering 255 karakters
vir almal se naam in my databasis?
>> GEHOOR: [onhoorbaar]
>> David Malan: Wat is dit?
>> GEHOOR: [onhoorbaar]
>> David Malan: Dit is 'n baie van die geheue, reg?
M-A-L-A-N. Ek het nou net vermors 250 karakters net om my naam te stoor
verdediging, net in geval iemand in die klas het 'n baie lang naam.
Dit lyk soos 'n onnodige nadeel.
>> So, dit blyk dat SQL, hierdie databasis taal,
eintlik iets ondersteun genoem VARCHAR of Variable CHAR.
En dit is 'n soort van die mooi in hierdie kan jy 'n vaste spesifiseer nie
breedte, maar eerder 'n veranderlike breedte.
En meer spesifiek, 'n maksimum wydte van die veld.
So, beteken dit dat 'n naam kan nie meer as 250 karakters,
maar dit kan beslis minder wees.
En die databasis gaan slim wees.
As jy sit in M-A-L-A-N, dit gaan slegs om te gebruik vyf
Miskien ses grepe vir soos 'n sleep null karakter,
en nie spandeer 'n bykomende 249 of 250 grepe onnodig.
>> So, dit lyk soos ek moet begin het met hierdie storie.
Maar daar is altyd 'n nadeel.
So, aan die een kant, 'n gebruikersnaam Ek het gespesifiseerde om hard gekodeer op 16,
en miskien was dit nie die regte oproep, miskien is dit
is nie, maar hoekom dit nie gebruik VARCHARs vir alles?
>> Dit bestaan ​​vir 'n rede.
Hoekom VARCHARs nie gebruik vir elke veld waarvan die lengte jy nie vooraf weet
As dit lyk na 'n groot ding wees, reg?
Gebruik slegs soveel ruimte as wat jy nodig het om hierdie limiet?
>> GEHOOR: stadiger.
David Malan: Speller?
GEHOOR: Maak dit stadiger?
David Malan: O, dit is stadiger.
Goed, dit is byna altyd die antwoord, eerlik.
Soos, wat is die nadeel?
Dit kos meer ruimte óf of dit kos meer tyd.
So, in hierdie geval, is dit dalk stadiger wees.
Hoekom?
>> GEHOOR: [onhoorbaar] bepaling [onhoorbaar].
>> David Malan: Goed.
So, kan jy onthou uit selfs PSED5, speel met jou benadering
die woordeboek as jy toeken geheue dinamies of hou
'n groeiende buffer, wat eintlik kan wees stadig.
As jy moet malloc noem onder die enjinkap en miskien
dit is wat MySQL doen, so sekerlik wat kan die geval wees.
En as jy dink manier terug na PSet-- of selfs
weke twee, toe ons het dinge soos binêre soek of selfs lineêre soek,
een van die mooi dinge oor elke woord in 'n databasis of elke woord in 'n kolom
om presies dieselfde lengte, selfs As 'n hele klomp van die karakters
is leeg is, is dat jy kan gebruik ewetoeganklike op jou data, reg?
>> As jy weet dat elke woord is 16 karakters weg,
kan jy wyser rekenkundige gebruik, om so te spreek, en gaan ons 16, 32, 48, 64,
en jy kan net spring onmiddellik met behulp van rekenkundige
aan enige van die woorde in jou databasis.
Terwyl as dit is 'n VARCHAR, Wat doen jy in plaas daarvan het om te doen?
>> [Telefoon lui]
>> As dit is 'n VARCHAR jy kan nie ewetoeganklike gebruik.
Wat jy het om te kyk vir, of doen?
Ja?
>> GEHOOR: [onhoorbaar]
>> David Malan: Kyk deur die whole-- spoor
deur die hele lys soek vir wat, waarskynlik?
Watter soort spesiale waarde?
GEHOOR: [onhoorbaar]
David Malan: soek vir die null terminators
dat baken die skeiding van woorde.
So weer 'n nadeel, en daar is geen regte antwoord.
Maar dit is waar, veral wanneer jou gebruikers kry baie wees
en jou las op jou bedieners, die aantal mense wat dit gebruik kry hoog,
dit is eintlik triviaal besluite.
So, kan ons hierdie verlaat as dit nie, maar laat se rol af na die regte
hier.
Nou, daar is 'n paar van die kolomme waar ons om 'n oordeel te bel.
Maak dit sin om 'n gebruiker toelaat se noem, gebruikersnaam 'n gebruiker se of 'n gebruiker se
naam, nul wees?
Dit is, net leeg.
Voel 'n bietjie nonsens, so ek is gaan nie daardie bokse te gaan.
Maar dit blyk in 'n databasis, kan jy sê:
iemand kan opsioneel het hierdie waarde.
Hierdie kolom het nie om daar eintlik.
>> Nou, daar is dié drop down menu.
En sien ek is nog steeds daar die eerste ry,
so ek praat gebruikersnaam nou.
En dit blyk dat 'n databasis, Anders as 'n eenvoudige spreadsheet blote,
het 'n kragtige funksies genoem indekse.
En 'n indeks is 'n manier van vertel die databasis vooruit dat ek die menslike
is slimmer as jy.
>> Ek weet watter soorte navrae, kies of voeg of te verwyder of te werk,
dat my kode gaan eindig up doen op hierdie databasis.
Ek wil 'n baie data te lees.
Ek wil 'n baie data in te voeg.
Ek wil voortdurend verwyder 'n baie data.
As ek weet dat ek gaan wees toegang tot 'n veld soos Gebruikersnaam 'n baie,
Ek kan preemptively vertel die databasis, ek meer as jy weet,
en ek wil verbod wat jy moet indeks hierdie gebied.
Waar kruip 'n veld of 'n kolom beteken dat die databasis in advance
moet 'n paar idees te leen van, soos, week vier en vyf en ses van CS50
en eintlik opbou iets soos 'n binêre soek
boom of iets algemeen bekend as 'n B boom
dat jy sal leer in 'n klas soos CS124
by Harvard, 'n algoritmes klas, of enige aantal ander plekke.
>> Die databasis en die smart mense wat dit geïmplementeer
sal uitvind hoe om te stoor tafel van die inligting
in die geheue, sodat navrae en ander bedrywighede is super vinnig.
Jy hoef nie om dit te doen.
Jy hoef nie te implementeer lineêre soek of binêre soek
of saamsmelt soort of seleksie soort, enige van daardie.
Die databasis doen dit vir jou as jy vertel dit preemptively na die indeks hierdie gebied.
>> En jy kan ook sien, is daar 'n ander eienskappe
ons kan vertel van die databasis te dwing.
Wat kan dit beteken as ek kies Unieke Van hierdie spyskaart, net intuïtief?
Ja?
>> GEHOOR: [onhoorbaar]
David Malan: Ja, die gebruikersnaam moet uniek wees.
Is dit 'n goeie ding of n slegte ding vir 'n databasis, vir 'n webwerf met die gebruikers?
Moet gebruikers uniek wees?
Ja, waarskynlik.
As dit is wat die gebied ons gebruik om aan te meld,
jy nie regtig wil mense met dieselfde gevoel of dieselfde gebruikersnaam.
Dus, kan ons die het databasis te dwing wat so
wat nou in my PHP-kode of enige taal, Ek het nie ', byvoorbeeld, kyk
noodwendig beteken dit gebruikersnaam bestaan ​​voordat ek laat iemand te registreer?
Die databasis sal nie toelaat dat twee mense met die naam David of Malans registreer in hierdie geval.
>> En as 'n eenkant, selfs al is dit menu kan jy net een te kies,
'n unieke indeks is een wat geïndekseer vir super vinnige prestasie,
maar dit dwing ook uniekheid.
En ons sal terug te kom wat die ander twee beteken in net 'n oomblik.
Intussen, as ek gaan na my tweede ry, wat
is die naam van die gebruiker se moet ek spesifiseer dat die naam moet uniek wees?
Nee, want jy kan beslis have-- daar is geen twee David
Malans in hierdie kamer, waarskynlik.
Maar as ons kies 'n ander naam, ons kan sekerlik botsings.
>> Dink terug aan tafels en dies hash.
So, ons het beslis nie wil hê om die veld naam uniek maak.
So, ons gaan net om te laat dat stamp nie, stamp nie, stamp nie, niks.
En ek gaan om te verlaat alles alleen.
Trouens, die meeste van hierdie velde ons sal nie hoef te bekommer oor.
En wanneer ek gereed is om hierdie te red, indien die internet saam,
Ek klik op Save, en baie, baie, baie stadig nie die databasis gered.
En nou is ek terug na hierdie koppelvlak, wat weliswaar,
is oorweldigend op die eerste oogopslag.
Maar al wat ek gaan doen is kliek op die woord Gebruikers links bo.
Ek gaan hier gaan, kliek Gebruikers, en by verstek, is dit
het uitgevoer paar SQL, maar meer oor dit in 'n oomblik.
Hier is net 'n opsomming van wat ek gedoen het.
En nie bekommerd te wees dat jy sien melding gemaak van Latyns-en Sweedse hier.
Dit is net die standaard instellings, want MySQL oorspronklik,
of PHP MyAdmin, een van die twee gebeur geskryf moet word deur 'n paar mense Sweedse.
Maar dit is irrelevant in ons geval hier.
>> Alle reg, so hoekom is dit alles interessante?
Dit blyk uit, ek kan data in te voeg in 'n databasis deur te skryf kode.
En ek gaan voort en in my lêer hier, ek is
gaan om voort te gaan en te maak asof soos dit is bedraad om die databasis, wat
dit is nie op die oomblik nie, maar dit sal wees wanneer ons by die probleem die sewe.
En ek gaan om voort te gaan en voer 'n funksie genoem navraag,
wat ons aan julle sal gee in die probleem die sewe se verspreiding kode, wat
neem ten minste een argument, wat net 'n string.
'N string van SQL-kode.
So, jy oor om te leer hoe om is skryf Structured Query Language.
>> As ek wil 'n nuwe ry voeg in my databasis omdat iemand voorgelê
'n vorm om my kode, sou ek letterlik skryf voeg in die volgende gebruikers
velde: gebruikersnaam, komma, naam, die waardes,
en nou moet ek voeg iets soos Malan, en kwotasie,
unquote 'David Malan. " En nou selfs vir diegene wat nie vertroud met SQL,
Daarom gebruik ek enkele aanhalings binnekant van hierdie groen string?
Wat kan die rede wees hier?
>> Let Ek is mede-vermenging twee tale.
Query is 'n PHP funksie, maar dit neem 'n argument.
En dat argument het om homself te wees geskryf in 'n ander taal, die sogenaamde
SQL, Structured Query Language.
So, alles wat ek het nou net hier uitgelig
is hierdie taal genoem SQL.
So, wat is die enkele aanhalings, net soos 'n vinnige gesonde verstand tjek?
Gaan voort.
Hulle is snare.
So, haal, unquote Malan en kwotasie, unquote David Malan is snare.
En net te dink nou intuïtief, weet wat jy weet oor C en PHP,
Hoekom het ek nie hierdie wat ek gewoonlik doen, gebruik dubbele aanhalingstekens vir strykers?
Hoekom het ek wil nie om dit te doen?
Ja?
>> GEHOOR: [onhoorbaar]
David Malan: Presies.
Omdat ek reeds gebruik dubbele aanhalingstekens op die pad
buite die argument die PHP funksie,
Ek wil net verwar die tolk.
Dit sal nie weet nie, moenie dit saam gaan?
Moenie hierdie saam te gaan?
So, ek wissel plaas.
>> Of ek kan iets soos dit te doen, backslash kwotasie of backslash kwotasie.
Eerlik, wat net begin kry baie deurmekaar en lelik.
Maar dit sal bereik dieselfde resultaat as well.
>> So, as ek na hierdie voer navraag nou, laat ons sien wat gebeur.
Ek gaan nou en eerder voort te gaan as voer die PHP-kode, wat
is waar jy sal speel in die probleem stel sewe
Ek gaan plaas toe gaan PHP MyAdmin.
En ek met die hand gaan om te gaan na die blad SQL,
en laat my zoom in op die koppelvlak.
En ek gaan om te plak in die ding wat ek net getik.
En die kleurkodering het verander 'n bietjie nou,
net omdat die program formate dinge 'n bietjie anders.
Maar let dat alles wat ek gedoen het is ek gesê het, voeg in Gebruikers.
Ek het gespesifiseer, dan, in 'n komma geskei aangehaalde Lys die twee
velde wat ek wil voeg, en dan Ek het letterlik gesê waardes
gevolg deur 'n ander hakie, en dan sal die twee waardes
Ek wil plug-in, en nou vir 'n goeie maat,
Ek sal 'n kommapunt sit aan die einde.
So, dit is nie C. Dit is nie PHP.
Dit is nou SQL, en ek plak dit in hierdie web-gebaseerde koppelvlak wat
net gaan om my te laat, so gou as ek klik Gaan
voer hierdie navraag op die databasis hardloop binnekant van CS50 IDE.
>> So dit is goed.
Kennis dat gesê een ry ingevoeg, het super vinnig,
0,0054 sekondes om die data in te voeg.
So, dit klink mooi gesond.
Dit microverfilmde my navraag vir my hier net om dit te sien
in soort van kleurgekodeerde weergawe.
Maar nou as ek klik Kyk, let dat, selfs
al is daar is 'n baie van die warboel op die skerm, my tafel het nou twee rye.
>> So, laat my gaan voort en 'n ander te doen.
In plaas van hierdie, laat my gaan na die blad SQL weer.
En hierdie keer sal ek iets soos voeg Rob en sy naam sal wees Rob Bowden.
Bowden.
Kom ons Kliek Save.
Oeps, eerder Gaan.
>> Klik op Blaai weer en nou sien ek het twee rye.
So, dit is net 'n manier meer komplekse manier van die opening Google Spreadsheets
en net tik 'n ry in 'n kolom.
Maar wat is die sleutel, is dat ons het nou die sintaksis
waarmee kode te skryf sodat Uiteindelik, kan ons eintlik
doen 'n paar, en dit.
Onthou dat PHP ondersteun super globale veranderlikes.
>> Wat is die binnekant van dollar teken underscore Kry PHP?
Ons het 'n blik op 'n of twee eenvoudige voorbeelde.
En in PSet6, onthou jy hallo dot PHP wat hierdie veranderlike gebruik.
Wat gaan daar?
Of wat is dit?
'N bietjie harder.
>> GEHOOR: [onhoorbaar]
>> David Malan: Dit is 'n sneeu nageslag van skikking, wat
is net 'n fancy manier om te sê 'n skikking wat sleutel waarde pare het.
En die sleutels is nie numeriese.
Hulle is woorde of snare.
En spesifiek, wat is dié sleutel waarde pare?
Waar kom hulle vandaan?
Jammer?
>> GEHOOR: [onhoorbaar]
David Malan: Geen?
Waar kom dié sleutel waarde pare vandaan?
Weer sê?
Weer?
Is ek die enigste een verhoor iets?
>> [Gelag]
>> Dit is reg, ja?
>> GEHOOR: [onhoorbaar]
David Malan: Ja, hulle kom uit die navraag string.
So, as jy rewind in die tyd van wanneer ons gespeel het met Google
en ons het tot Google.com slash gegaan soek vraagteken q gelyk katte,
as ek druk Enter en as Google geïmplementeer in PHP,
PHP kode wat Google het sou toegang tot dollar teken het
onderstreep AOO binnekant van wat is 'n belangrike genoem Q en 'n waarde
genoem katte wat dit dan kan gebruik gebruik om 'n werklike search doen met.
>> So, in werklikheid, wat ek gaan nou doen is terug te gaan na my PHP-kode
dat jy weer sal sien meer van in PSet7.
En in plaas van die steek in harde gekodeerde waardes wat
lyk nie soos 'n baie dinamiese webwerf,
Ek gaan vir jou 'n teaser van gee wat die werklike kode sou doen.
Jy sal in twee sit vraagtekens soos hierdie.
Ek weet nie wat die gebruikersnaam is.
Ek weet nie wat die naam gaan wees,
maar ek weet ek kan kry hulle dinamiese.
>> Dus, as die kode wat ons nou skryf is die kode wat uitgevoer word op Google se bedieners,
of indien dit hallo dot PHP, wat kom met PSet6,
Ek gaan om te slaag in die navraag funksie
net soos printf, twee ander argumente.
KRY, haal, unquote gebruikersnaam, en kry, haal, unquote naam.
En nou, let op wat die algemene struktuur is hier.
Ek het aan die linkerkant kant van die oproep,
hierdie funksie genoem navraag in PHP.
Ek het nog steeds as 'n eerste argument, net 'n string van die teks.
>> Maar dat string teks is geskryf in 'n taal, die sogenaamde SQL.
En eerlik, dit is nie 'n groot taal.
Ons gaan net om te praat oor dit formeel vandag, regtig.
En dan in die probleem stel sewe, daar is relatief
paar eienskappe wat ons gaan hefboom.
Die vraagtekens, al is, beteken prop in 'n waarde hier en plug in 'n ander waarde
hier.
En kennis, het ek uitgelaat wat van regoor die quote-- damn
it-- rondom die kwotasie punte hierdie tyd.
Ek het die kwotasie uitgelaat punte rondom die vraagteken,
Jammer, hierdie keer.
>> So, wat is lekker oor hierdie vraagteken funksie wat
PHP is geneig om te ondersteun, Ruby en Python en ander tale,
dit beteken net plug in sommige waardeer hier en weet jy wat?
Jy uitvind of om te gebruik aanhalingstekens of dubbele aanhalingstekens.
Moet my nie lastig met dié intellektueel oninteressant besonderhede.
Maar, maak seker dit is korrek sodat my kode is uiteindelik
operasionele en veilige, wat sal 'n betekenis het kort voor lank.
>> Nou, hoeveel argumente totaal, net om duidelik wees, is die soektog funksie neem?
Iemand wil hê om te stem vir meer as twee?
Drie?
Seker nie, hoekom?
Hoekom drie?
>> GEHOOR: [onhoorbaar]
David Malan: Presies.
Die eerste deel is die string.
Die tweede argument is dollar teken onderstreep AOO gebruikersnaam bracket.
En die derde argument is die dieselfde ding, maar net die naam.
So met ander woorde, wat nou as ek 'n web vorm
wat moes teks velde, een vir die gebruiker gebruikersnaam se
een vir sy of haar naam, net soos jy sou in 'n webwerf te sien
wanneer jy registreer vir sommige webwerf, kan dit
wees die kode op die agterkant wat eintlik nie die invoeging nou
in die databasis.
>> Nou daarenteen, laat ons vinnig vorentoe.
Veronderstel 'n gebruiker is nou meld in en jy wil
PHP-kode wat tjeks of skryf die persoon wat is net aangemeld
is eintlik 'n gebruiker, kan jy gebruik eenvoudig sintaksis.
Jy kan sê SELECT, kom ons sê Star, waar sterre beteken alles.
Ek weet nie wat ek wil, so gee my net
al die kolomme van die tafel genoem gebruikers waar, en dit is lekker.
Kies ondersteun wat is bekend as 'n gesegde wat
soos 'n manier om te kwalifiseer wat jy wil.
Waar gebruikersnaam gelyk quote, unquote Malan.
So ook hier, het ek ingesluit binne-in die argument
om 'n PHP funksie, 'n lyn van SQL-kode.
En dat SQL-kode hierdie tyd letterlik gaan
om te soek na quote, unquote Malan.
>> Nou dit is nie al wat nuttig, so ek gaan om te slaan wat
en ek gaan sit weg hierdie wenk van Brady, en gaan
en plug-in plaas 'n vraagteken hier.
So, net om duidelik te wees, wat moet my tweede argument
word as iemand net aangemeld en ek wil om te kyk of hy of sy is eintlik
'n gebruiker?
GEHOOR: [onhoorbaar]
David Malan: Ja.
Ek hoor dollar teken underscore KRY quote, unquote gebruikersnaam.
En dat moet terugkeer na my enige van die rye in my databasis
dat 'n rekening van Malan.
Nou hopelik, ek gaan om terug te kry nul as Malan se hier nooit,
of een of hy.
Ek moet nie terug te kry twee of drie of vier.
Hoekom?
>> GEHOOR: [onhoorbaar]
>> David Malan: Ek het gesê unieke, reg?
Eenvoudige rede.
Want ek het gesê dit het tot uniek wees, net logies,
Jy kan slegs een of nul Malans in hierdie spesifieke databasis tabel.
Nou as 'n eenkant, net sodat jy gesien het dit, alhoewel ek hou die gebruik van AOO
en selfs al PSet6 slegs gebruik , Kan jy seker Post.
En onthou dat Post is 'n ander tegniek vir die indiening van inligting
uit 'n vorm, maar dit nie opdaag nie in die URL.
Dit is 'n bietjie meer veilig beslis vir dinge soos gebruikersname en wagwoorde,
wat PSet7 sal, in werklikheid, te betrek.
>> So, laat ons dit doen in PHP MyAdmin en kyk wat gebeur.
Ek gaan om te gaan na die blad MySQL.
En sien dat die standaard waarde vir PHP MyAdmin, net om te probeer om behulpsaam te wees,
is om sterre te kies uit gebruikers waar 'n mens.
Wel, een is altyd waar is, so dit het die dom effektiewe
van net kies alles.
Maar ek gaan 'n bietjie te wees meer pedanties en met die hand
tik SELECT ster van die gebruikers.
>> Nou tegnies, kan jy haal die naam van die tafels.
Dit is selde dat jy moet, maar kennis van hierdie is nie
jou normale aanhalings op die Amerikaanse sleutelbord.
Dit is die sogenaamde backtick, wat is oor die algemeen aan die linkerkant top hand
hoek van jou sleutelbord.
Maar dit is selde dat jy sal werklik nodig om te pla met wat,
so sal Ek hulle net laat in elk geval.
So nou, laat my gaan voort en tref gaan.
En hoeveel rye moet ek terug toe ek ster van die gebruikers kies?
>> GEHOOR: [onhoorbaar]
David Malan: Die aantal rye, seker nie.
Maar hoeveel van hierdie beton storie nou?
Twee, want daar was my en daar was Rob.
Dus, as ek op Go, ek sien dat die visueel Ek het terug gekry, ja, twee rye.
Daar is 'n baie van die warboel van die skerm, maar ek sien net twee rye.
In teenstelling hiermee, as ek dit weer doen en doen SELECT ster van die gebruikers, waar gebruikersnaam
gelyk quote, unquote Malan, nou as ek klik Gaan
Ek gaan net een ry terug te kry.
En laastens, as ek dit doen iets soos hierdie, veronderstel
dat ek nie omgee om alles,
wat is 'n soort van betekenisloos nou, want daar is slegs twee kolomme.
Dit is nie soos ek kies 'n groot hoeveelheid van die data.
Dink ek gaan voort en moenie KIES naam
gebruikers, waar gebruikersnaam gelyk Malan, wat is lekker oor SQL eerlik,
is dat dit regtig net doen wat jy vertel dit te doen.
Dit is redelik bondige, maar jy letterlik sê net dit wat jy wil doen.
Kies naam van die gebruikers, waar die gebruikersnaam gelyk Malan.
En dit is regtig so duidelik.
So, nou as ek getref Go, hoeveel rye gaan ek om terug te kry?
Een, want dit is net Malan, hopelik.
Of zero as hy nie daar, maar een maksimaal.
>> En hoeveel kolomme ek terug?
Hoeveel kolomme?
Hierdie tyd, is ek net gaan om een ​​te kry, want ek het nie
Kies ster wat is alles.
Nou is ek kies net die naam, sodat ek net terug te kry een kolom en een ry.
En dit lyk soort van toepaslik belaglik, net op soek super
klein soos hierdie.
So, wat is regtig gebeur?
Wanneer jy 'n SQL navraag gebruik van te kies,
wat jy kry terug van die databasis
is soos 'n tydelike tabel met rye en kolomme, miskien,
maar dat niks laat dat was nie eintlik deur jou gekies.
So, dit is soos wanneer iemand het 'n groot spreadsheet van al die studente
geregistreer vir 'n paar student-groep, en jy sê,
gee my al die eerstejaars wat het geregistreer vir ons student groep, wat
jou kollega in die student groep kan doen
is hulle kan net hand jy kan die hele spreadsheet.
Dit is soos om te sê kies ster.
En dit is 'n bietjie irriterend as jy net wou die eerstejaars.
En so, as jy plaas gesê kies ster van databasis tabel
waar jaar gelyk quote, unquote eerstejaars,
dit is asof jou vriend in die student groep
letterlik uitgelig en gekopieer net die eerstejaars rye,
geplak hulle in 'n nuwe Google Sigblad of 'n Excel-lêer,
en oorhandig jou terug die net as gevolg lêer.
Dit is al wat gaan op konseptueel hier.
>> So op die ou end, kan ons doen 'n paar mooi fancy dinge
deur dinge te stoor soos gebruikers en wagwoorde en dies meer.
Maar, dit blyk, moet ons doen 'n bietjie anders as dit.
Dit is nie dat die smart slegs stoor 'n gebruikersnaam en 'n wagwoord.
Iemand het vroeër, dink ek af hier, het voorgestel 'n ID.
Nou 'n ID kan wees soos 'n Harvard ID of Yale se Net ID,
maar dit kon nog makliker wees in ons databasis geval.
En inderdaad, die gemeenskaplike geval is aan 'n ander kolom.
En ek gaan om te gaan voort en my tafel te wysig.
En as jy om te speel met hierdie koppelvlak vir PSet7,
sal jy sien dat jy kan kyk hierdie knoppie hier en voeg
'n veld by die begin van die tafel.
As ek dan nou op Go, dit gaan my een van daardie vorms gee
van vroeër.
Ek gaan 'n veld met die naam ID voeg.
En ek gaan om dit te 'n numeriese tipe te maak.
>> Ek het 'n hele klomp van waardes vir numerieke.
Ek is net gaan 'n INT te kies en nie bekommerd wees oor die uiteenlopende groottes.
Ek hoef nie te spesifiseer 'n lengte of 'n waarde,
want dit gaan wees 32 stukkies nie saak wat.
Eienskappe, het ons nie voor sien.
Belang in enige van hierdie kieslys opsies hierdie tyd?
Vir 'n INT?
Wat het jy voor?
Geen?
Het enige van hierdie maak sin?
Ja.
Ja, unsigned, reg?
>> Oor die algemeen, as ons gaan om te gee almal 'n unieke nommer, wat
is waar hierdie storie is gaan, het ek regtig wil net
'n persoon om die nommer soos nul hê en een en twee en drie en vier.
Ek het nie nodig om te gaan met negatiewe getalle.
Dit lyk net soos onnodige kompleksiteit.
Ek wil 4000000000 moontlike waardes, nie 4000000000 moontlike waardes,
sodat ek net verdubbel die kapasiteit van my INT.
As 'n eenkant, as jy wil om te hou verband hierdie om iets soos Facebook,
terug in soort van my dag toe Facebook eerste uitgekom het,
Ek glo wat hulle die gebruik van hul MySQL databasis
te slaan 'n gebruiker se identifiseerder, was net 'n INT.
Maar natuurlik, daar is 'n baie van die werklike mense in die wêreld.
Daar is 'n baie valse Facebook rekeninge in die wêreld.
En so uiteindelik, Facebook oorstroom die grootte van 'n INT, 'n 4000000000
waarde.
Dit is waarom, as jy kyk rond en daar is webwerwe
wat kan vertel wat jou unieke ID is.
En as jy nog nooit in 'n gebruikersnaam kies Facebook, sal jy sien jou unieke ID.
Ek dink dit is profiel dot PHP vraagteken ID gelyk iets.
Dit is nou iets soos 'n groot INT, of 'n lang lang as jy wil,
wat is 'n 64-bit waarde of iets vergelykbaar.
>> So, selfs in die werklike wêreld hierdie dinge te doen kwessies uiteindelik soms saak.
En dit blyk hier, as ek gee al my gebruikers 'n unieke ID,
Ek wil super eksplisiete wees en minimaal maak hierdie veld uniek.
Maar dit blyk daar is een stuk naam vandag te
dit is 'n primêre sleutel.
As jy 'n databasis is ontwerp tafel en jy vooraf weet
dat een van die kolomme in die tabel moet en sal uniek rye identifiseer
in die tabel, wat jy wil spesifiseer dit en vertel die databasis,
dit is my primêre sleutel.
Daar is dalk duplikate in ander velde,
maar ek sê die databasis wat hierdie is my primêre, my belangrikste veld
dit is gewaarborg om uniek te wees.
>> Nou, dit lyk oorbodig.
Ek is nou voor dat ons voeg deur te kliek Save hier
'n veld called-- en ek gaan om voort te gaan en klik AI,
ons sal terug te kom wat in 'n oomblik, Slaan.
Ek is nou dat die voorstel my tafel lyk.
Ek het 'n INT veld genaamd ID, 'n CHAR veld genaamd Gebruikersnaam,
'n VARCHAR veld genaamd Naam nie, maar ID, As dit is primêre en dus uniek,
hoekom het ek net mors tyd wat die bekendstelling van
effektief is 'n tweede unieke veld genaamd ID dit is 'n INT?
>> Gebruikersnaam, onthou, was reeds unieke, het ons gesê.
Dus net logies, het jy nie nodig 'n databasis ervaring rede
deur middel van hierdie, waarom kan ek bekendgestel
'n INT as my unieke identifiseerder sowel?
Wat this-- weer sê?
>> GEHOOR: [onhoorbaar]
>> David Malan: Random toegang is makliker, hoekom?
>> GEHOOR: [onhoorbaar]
David Malan: Ja, dit is net toegang nommers.
So, as jy dink van hierdie waarlik is 'n tabel, soos 'n skikking,
nou het ek unieke identifiseerders dat ek kan spring rond.
En beter as wat nog is dat Hoe groot is 'n INT weer gaan wees?
32 stukkies of vier grepe.
>> Hoe groot is my gebruikersnaam gaan wees?
Maksimaal?
16 grepe.
>> So, as jy regtig omgee oor die prestasie van jou kode,
dink terug aan PSet5, sou jy verkies om te soek na 'n vier byte waarde of 'n 16
byte waarde, reg?
Dit is regtig so eenvoudig soos dit.
Jy moet vier keer soveel werk te doen om te soek vir gebruikers omdat diegene
16 grepe.
So, jy moet letterlik vergelyk al 16 grepe wees
seker ja, dit is gebruikersnaam wat ek wil.
Whereas vir 'n INT, jy kan doen dit met net vier grepe.
>> En as 'n eenkant vir diegene belangstel in die rekenaar hardeware,
dit blyk jy kan iets soos pas 'n INT of 'n 32-bit waarde in iets
bekend as 'n register in 'n rekenaar CPU, wat beteken dit is super,
super vinnig, selfs op die laagste vlak van hardeware van die rekenaar.
So, daar is net voordele rondom.
So, wat beteken dit?
In werklikheid, as jy die ontwerp van ' databasis tabel, byna almal van die tyd
gaan jy nie slegs die data wat jy omgee,
maar ook iets soos 'n unieke identifiseerder
want dit gaan laat ons doen ander dinge.
En laat ons reis oor 'n probleem hier.
>> Veronderstel dat gebruikers nie net name en name,
maar hulle het ook dinge soos stede en state en zip codes, ten minste
hier in die VSA.
So, ek gaan om voort te gaan en net vinnig sê,
gee my drie kolomme aan die einde van die tafel.
En dit gaan wees City, dit gaan Staat,
en dit gaan Zip wees.
>> Nou tipes City, wat data moet dit wees, miskien?
VARCHAR?
Ek weet nie wat die langste naam van die stad is.
Iewers in Amerika, is daar waarskynlik 'n paar belaglik lang woord,
so laat ons net saam met 255, ietwat histories of arbitrêr.
Staat, wat jy wil om dit te doen?
Oordeel oproep, reg?
Wat is miskien die mees doeltreffende?
Hoeveel karakters?
Miskien net twee, as ons kan wegkom met net doen,
soos, MA vir Massachusetts en so meer.
So, ek gaan 'n CHAR waarde van twee gaan.
>> Poskode is 'n interessante een.
Ons is hier in 02.138, sodat stel voor ons wat moet gebruik?
Dit is 'n INT, reg?
INT, INT, kort?
Kort sal werk.
Geen?
CHAR of vyf, maar ek wil 'n INT.
Hoekom terug te stoot op 'n INT?
Oorreed my uit hierdie.
Wat is stupid oor 'n INT, my idee?
Ja.
>> GEHOOR: Neem meer geheue.
>> David Malan: Neem meer geheue.
Vier grepe, maar jy is stel 'n kode
as vyf grepe of iemand was as 'n CHAR, wat voel soos eh, dit is nie regtig
die geval.
>> Wel, pret storie.
Jare gelede, toe ek gebruik om te gebruik Microsoft Outlook vir my e-pos,
Ek wou uiteindelik oor te skakel na Gmail.
En so, uitgevoer ek al my kontakte van Outlook as 'n CSV-lêer.
Kommas geskei waardes, wat net bedoel ek
het al my vriende name en laaste name en telefoonnommers en zip kodes
en almal van daardie.
En dan het ek die fout van die opening van dit
in Excel, wat 'n spreadsheet program wat
verstaan ​​CSV lêers soos ons gesien het.
Maar dan moet ek getref het, soos, Opdrag of Control S op 'n punt.
En Excel blykbaar by die tyd het 'n funksie waardeur enige tyd dit
het 'n nommer, dit probeer om behulpsaam te wees.
En as dat die getal begin met nulle, sou dit net ontslae te raak van hulle.
Hoekom het jy nodig voorste nulle op heelgetalle?
Hulle is betekenisloos, wiskundig.
Hulle is nie betekenisloos in die US Postal-stelsel.
So, het ek het vir die jaar, tot vandag toe, nog steeds ek
het vriende dat wanneer die seldsame geval dat ek iemand nodig is
spreek hierdie dae, Ek sal nog steeds sien dat ek
het 'n vriend in Cambridge, Massachusetts, 2138.
En dit is irriterende as jy probeer om programmaties soort
genereer koeverte of net jota dit neer.
En dit is as gevolg van hierdie rede, Ek het die verkeerde tipe data.
So, ek is lief vir jou idee.
Kom ons gebruik 'n CHAR veld.
Vyf karakters, behalwe daar is 'n hoek geval.
As jy nog steeds e-pos stuur, soms rits kodes deesdae
hulle is, soos, plus vier.
So, 'n koppelteken en dan moet ons ons moet vier getalle.
So om eerlik te wees, dit kan gaan baie verskillende maniere.
>> Vir nou, ek gaan hou dit eenvoudig en ek is net
gaan om te sê dat dit 'n vyf CHAR waarde en ons is
gaan die hele dash plus vier slaan.
Maar dit is die aard van die werkinge.
En jy kan dink van die dieselfde probleme wat voortspruit
met telefoonnommers of ander velde.
>> En nou, dit is eintlik 'n dwase pad om te gaan.
Veronderstel beide Rob en ek en Hannah en Maria en [? Davon?] En Andy
en die ander op die personeel almal leef in Cambridge, Massachusetts, 02138.
Dit voel eintlik stupid dat ek toe te voeg tot my gebruikers tafel, stad, staat,
en rits.
Hoekom?
>> GEHOOR: [onhoorbaar]
>> David Malan: Weer sê?
GEHOOR: [onhoorbaar]
>> David Malan: Hulle is altyd gaan om saam te gaan, reg?
Wanneer dit blyk, het ons gebruik om te dink dit die geval was, totdat ons uitvoerig
deursoek die hele VSA, en daar blyk dat
is 'n paar teenstrydighede waar verskeie dorpe het
dieselfde zip, wat is vreemd.
Maar, as ons stipuleer vir nou dat 02.138 is altyd Cambridge, Massachusetts,
hoekom in die wêreld sou jy slaan in jou databasis Cambridge en MA en 02.138
vir my en vir Hannah en Rob en vir [? Davon?] En vir ander wat leef
hier in Cambridge, dit is perfek oorbodig.
>> Ons moet wegkom met net die stoor wat?
Net die kode.
Maar dan, as ons net die stoor kode, wil ek, waarskynlik,
vir my website om te weet waar 02.138 is.
So, ek moet 'n ander tafel.
En dit is OK.
En in die feit, dit is een van die ontwerp prosesse van die ontwerp van tabelle
dat jy sal doen in PSet7 sowel waardeur jy wil om faktor gemeenskaplike data.
Net soos ons het is factoring uit algemene kode en factoring gemeenskaplike
style uit CSS, hier Ook in die databasis,
as ek moet net 02138 om uniek identifiseer iemand se tuisdorp,
nie stoor Cambridge, Mass vir elke darn gebruiker in jou tafel.
>> In plaas daarvan, het 'n afsonderlike tabel genoem Poskodes wat behoort te hê wat kolomme?
Waarskynlik 'n ID-veld, net omdat, die beginsels wat ons praat nou.
Waarskynlik 'n rits veld 02138.
En dan waarskynlik wat ander kolomme?
Stad en die staat nie, maar net een ry vir 02.138, een ry vir 02.139,
een ry vir 90.210.
En dit is letterlik al die zip codes wat ek ken.
>> So nou, wat kan jy doen?
Dit is problematies, want nou Ek het twee tafels.
So, my gebruikers is meestal hier, maar hul stad staat se inligting
hier.
So, dit blyk met SQL, daar is eintlik 'n manier om inligting aan te sluit,
en jy sal sien dit in die PSet.
>> Maar dit blyk jy kan iets soos dit te doen.
SELECT ster van die gebruikers, sluit aan by Poskodes OP gebruikers dot zip gelyk Poskodes dot ritssluiter.
Wat is 'n bietjie langdradig, weliswaar, maar dit net
beteken kies alles uit die proses van die neem van my gebruikers tafel
en my Poskodes tafel.
Saam met hulle op die een gebied hulle in kolom.
So, letterlik om iets te doen soos hierdie, en gee my terug
'n nuwe tydelike tafel dit is wyer, dit is groter,
wat al die kolomme van beide van hulle.
En dat, heel eenvoudig, sou wees om die sintaksis vir iets soos dit te doen.
>> So, daar is dié wat voorlê, maar daar gaan
om ander ontwerp besluite wees wat jy sal het om te maak, nie net met indekse
maar ook hardloop in uitdagings.
Trouens, daar is 'n uitdaging in 'n databasis ontwerp
waardeur soms twee mense dalk wil om toegang tot die dieselfde rye van die databasis
tafel.
So, dit is iets wat ons sal teëkom in PSet7 as well.
>> Maar ek het gedink ek wil kyk na een aanval wat moontlik in SQL.
Wat is 'n paar van die probleme wat kan ontstaan?
So, sal jy dit teëkom in PSet7.
En ons vertel wat die volstrekte kodering oplossing vir hierdie probleem is.
Maar as jy 'n hoër vlak te neem klas, veral in bedryfstelsels,
jy gaan teëkom 'n kwessie van atomiciteit,
die probleem van probeer om te doen verskeie dinge op een slag
sonder onderbreking.
>> En ek het gedink ek wil hierdie stel idee vir PSet7 met 'n metafoor
wat ek geleer myself in Margo Seltzer se CS164 bedryfstelsels
klas jaar gelede.
Veronderstel dat jy een van hierdie dorm yskaste in jou koshuiskamer of huis,
en jy het 'n ware gevoel vir melk.
En so, jy by die huis kom van klasse een dag, jy die yskas oopmaak.
O, damn dit.
Daar is geen melk in die yskas.
So, jy die yskas sluit, sluit die deur, sluit jou dorm,
loop om die draai om CVS, kry in die lyn,
en begin uitcheck vir 'n paar melk.
En dit gaan 'n rukkie neem, omdat diegene damn self afhandeling
tellers te neem vir ewig om in elk geval te gebruik.
So intussen, jou kamermaat by die huis kom.
Hy of sy hou regtig melk as well.
Hulle kom in die koshuiskamer, maak die yskas, o, darn dit.
Daar is geen melk meer.
>> So, hy of sy ook gaan om die draai.
Maar nou, omdat daar is soos twee of drie of vier CVSes buurt,
dit gebeur om te gaan na een van die verskillende kinders in die vierkant.
En so nou, 'n paar minute later, albei van julle
huis kom en ugh, ergste probleem ooit.
Nou het jy te veel melk want dit gaan suur gaan.
En jy wil melk, maar jy hou nie regtig melk.
>> So nou, dit was 'n duur fout, want beide van julle
'n besluit geneem gebaseer op die toestand van sommige veranderlike wat
was in die proses van verander word deur jou,
die inisieerder van plan om melk te kry.
So, wat is dalk 'n menslike oplossing vir die probleem?
GEHOOR: [onhoorbaar]
David Malan: Laat 'n aantekening, reg?
Altyd laat 'n nota, as jy vertroud is met die show.
Ja, daar is twee van ons.
So, altyd 'n nota verlaat, of letterlik sluit die yskas
met 'n soort van slot of iets oor die top soos dit.
Maar dit is eintlik gaan wees sleutel probleem met databasis ontwerp,
veral as jy dalk verskeie implementeer, verskeie skootrekenaars,
verskeie gebruikers al probeer om update inligting op 'n keer.
Veral sensitiewe inligting soos finansiële inligting,
waardeur 'n-beurs webwerf soos jy sal gebou word,
wat as jy wil om te kyk hoeveel geld jy het en dan as jy genoeg het,
koop 'n paar voorraad?
>> Maar wat as iemand anders wat het 'n gesamentlike rekening met jou
is terselfdertyd probeer sommige voorraad te koop?
So, hy of sy beheer van die rekening balans, beide van julle
terug te kry dieselfde antwoord, daar is geen melk.
Of albei van julle terug te kry die antwoord, jy het $ 100 in die rekening.
Beide van julle probeer om die besluit te neem een deel van 'n maatskappy voorraad te koop.
>> En nou, wat gebeur?
Jy het twee aandele?
Jy het geen aandele?
Probleme soos wat kan ontstaan.
So, sal ons teëkom nie.
SQL-inspuiting aanvalle, gelukkig, is iets wat ons sal jou help met,
maar hierdie is afgrijselijk algemeen deesdae steeds.
So, dit is net 'n voorbeeld.
Ek maak geen eise wat Harvard PIN stelsel is
kwesbaar vir hierdie spesifieke aanval.
Ons het probeer.
Maar, jy weet dat ons 'n veld soos hierdie.
En Yale se Net ID het 'n soortgelyke soek screen hierdie dae.
En dit blyk, dat ons dalk die PIN stelsel geïmplementeer in PHP.
>> En as dit were-- dis not-- hulle dalk kode wat lyk soos hierdie te hê.
Hulle het twee veranderlikes.
Gee my die gebruikersnaam en wagwoord uit die post super globale veranderlike
dat ons gepraat oor vroeër.
Miskien Harvard het 'n navraag soos SELECT ster van die gebruikers
waar gebruikersnaam gelyk dat wagwoord gelyk nie.
En sien dat ek net steek dit in die gebruik van
die krullerige brace notasie van die ander dag, wat net beteken prop in 'n waarde
hier.
Ek is nie die gebruik van die vraagteken tegniek.
Ek het nie die tweede of derde argumente.
Ek is net letterlik bou die string myself.
>> Die probleem is egter dat As iemand soos 'n scroob,
wat is 'n verwysing na 'n film, inteken met iets soos hierdie,
en ek het die punte verwyder wat gewoonlik bedek
wagwoorde, wat as hy veral kwaadwillige
en sy wagwoord dalk is 12.345, per die film genaamd "Space Balls,"
maar hy krities tipes n enkele aanhaling na die vyf,
dan letterlik die woord of in die ruimte, en dan quote,
unquote een gelyk quote een Maar let hy weggelaat wat?
Hy is weggelaat die kwotasie op die regte en hy is weggelaat die kwotasie aan die linkerkant.
>> Want as hierdie aanvaller scroob se vermoede
is dat die mense wat geskryf het hierdie PHP-kode was nie so helder,
Miskien het hulle net 'n paar enkele haal om die interpolasie
van 'n veranderlike in krulhakies?
En so miskien het, kon hy die soort van hul denke te voltooi
vir hulle, maar op 'n manier wat gaan om hom te laat gekap in die PIN-stelsel.
Met ander woorde, veronderstel dat dit die kode
en ons het nou prop in wat scroob getik.
En dit is rooi, want dit is sleg.
>> En die onderliggende teks is wat hy getik in,
scroob kon bediener Harvard se mislei in die bou van 'n SQL navraag
string wat lyk soos hierdie.
Wagwoord gelyk 12345 of een is gelyk aan een.
Die gevolg van wat, logies, is dat hierdie scroob sal aanmeld
in as sy wagwoord is 12345 of as een gelykes
een, wat natuurlik altyd waar, wat beteken scroob kry altyd in.
>> En so het die manier om vas te stel dit, soos in 'n baie van die gevalle,
sou wees om meer defensief te skryf.
Om iets soos gebruik ons werklike navraag funksie, wat
jy sal sien in PSet7, waar ons prop in iets soos vraagtekens hier.
En die skoonheid van die navraag funksie wat ons
gee is dit verdedig teen hierdie sogenaamde SQL-inspuiting aanvalle, waar
iemand tricking jou kode in spuit sy of haar eie SQL-kode.
Want wat die navraag funksie ons gee jou sal eintlik doen,
as jy die vraagteken sintaksis gebruik en 'n tweede en 'n derde argument hier,
is wat het dit toe te voeg tot die insette wat die gebruiker verskaf?
Diegene backslash haal.
>> So, dit ontsnap enige potensieel gevaarlike karakters.
Dit lyk vreemd nou, maar dit is nie kwesbaar
omdat dit nie die logika nie verander
want dit geheel wagwoord nou 'n enkele aanhaling dit is nie,
in werklikheid, wagwoord scroob se.
So, daar is 'n paar grappies oor hierdie oor die jare.
So, dit was 'n foto geneem van sommige geek in 'n parkeerterrein
waardeur jy kan weet dat sommige stede en state probeer om jou lisensie te scan
plaat aan u of kaartjie wetsontwerp jy as jy deur gaan sonder, soos,
Die e-Z Pass ding.
So, hierdie persoon vermoed dat miskien die mense die skryf van die E-Z Pass stelsel
was nie so helder, en miskien is hulle net saam saamgevoeg n string,
sodat hy of sy kan nie kwaadwillig nie net hul gedagtes te voltooi,
maar eintlik 'n slegte opdrag uit te voer, wat ons nog nie genoem het,
maar jy kan seker raai.
Dat bykomend tot verwyder en voeg en werk en kies,
daar is ook 'n navraag genoem drop, wat letterlik verwyder alles
in die databasis, wat is veral sleg.
>> Ons kan zoom in op hierdie of dit is 'n bietjie moeilik om te sien.
Dit, nou, is 'n bekende strokiesprent dit is wonderlik slim nou
en verstaanbaar.
>> [Gelag]
>> Ja, cool.
Soort geeking uit.
So het hierdie, dan, is SQL-inspuiting aanvalle.
En hulle is so maklik om te vermy deur die gebruik van die regte kode of die reg biblioteke.
En jy sal sien in PSet7, dit is Daarom gee ons jou die navraag funksie.
So, 'n paar van die teasers dat ons gedink ons ​​wil
gee jou hier in ons oorblywende minute saam.
So, as jy onthou van week nul, ons bekendgestel hierdie twee gloeilampe wat
is mooi, nie net omdat hulle is redelik en is kleurvol,
maar omdat hulle iets te ondersteun genoem 'n API, 'n Aansoek
Programming Interface En in CS50 dusver, het ons
meestal gefokus op AOO en POST, maar dit blyk
daar is ander HTTP werkwoorde soos PUT.
>> En in die feit, dit was 'n skyfie van week nul
waardeur as jy skryf kode wat stuur a la PSet6 n HTTP-versoek dat
lyk met hierdie stuk van die teks aan die onderkant, wat genoem word into
of JavaScript Object Notasie dat ons sal praat oor die volgende week,
jy kan draai op of af of verandering die kleur van die ligte soos dié.
So as CS50 het ook bykomend tot 'n van daardie gloeilampe hier in New Haven
As jy wil om te leen hulle vir die finale projekte,
ook 'n paar Microsoft Bands, wat soos
horlosies wat jy dra om jou pols wat insgelyks 'n API sodat jy
kan jou eie sagteware te skryf vir hulle.
>> Ons het 'n rekening by Apple se iOS-kode so
dat as jy 'n Apple Watch of 'n iPhone of 'n iPad of 'n iPod,
kan jy die kode te skryf wat eintlik loop op hulle.
Ons het 'n hele klomp van Arduinos, wat
klein bietjie rekenaars sonder gevalle wese,
wat jy kan koppel via USB, tipies om jou eie Mac of PC,
skryf kode wat op hierdie fisiese loop toestelle wat dikwels sensors op hulle
sodat jy kan kommunikeer met die werklike wêreld.
Ons het 'n hele klomp van Leap Motion toestelle,
wat USB toestelle vir Macs is en Rekenaars, hier en weer in New Haven.
En as jy dit te koppel aan jou Mac, jy kan eintlik jou rekenaar te beheer
deur te skryf sagteware wat via infrarooi strale,
figure uit waar jou menslike hande is, selfs sonder om te raak van jou sleutelbord.
Ons het gedink ons ​​wil deel 'n vinnige blik op hierdie, byvoorbeeld.
>> [Speel van musiek]
So, ons het 'n hele n klomp van hierdie dinge,
Ook genoem Myo armbandjies wat jy oor jou voorarm
en dan kan jy beheer oor die werklike wêreld of die virtuele wêreld soos hierdie.
>> [Speel van musiek]
Of, het ons ook 'n paar Google Karton, wat is letterlik, soos,
'n kartondoos wat jy kan op sit jou gesig, maar skyfie in jou selfoon in dit
sodat jy die glas jou telefoon regtig naby aan jou oë.
En Google karton is baie goedkoop by $ 10 of $ 20.
En dit het min lense wat effens af verskuiwing
die beeld op die skerm vir jou menslike oë vir julle 'n gevoel van diepte te gee
sodat jy eintlik 'n 3D omgewing in die voorkant van jou.
Ons het ook 'n paar Samsung Gear, wat is die duurder weergawe van hierdie,
maar wat kan insgelyks gly in 'n Android-selfoon en gee jou die illusie
of-- of gee die ervaring van virtuele realiteit.
En in ons laaste twee minute, Ons het gedink ons ​​wil probeer om dit te doen.
As ek kan projekteer wat Colton het hier net jou eetlus aan te wakker,
laat my gaan voort en gooi op die groot skerm hier.
Laat my die ligte dood te maak.
Colton, wil jy om voort te gaan en sit op jou sel vir 'n oomblik
en kom op oor na die middel van die verhoog?
En wil jy project-- dit is wat Colton sien.
>> Nou, die Wi-Fi in hier is nie so sterk vir hierdie toestel
dat dit super dwingende, maar Colton is letterlik
in hierdie magiese futuristiese plek.
Hy sien net een beeld.
Jy sien sy linker en regter oog dat sy brein saam stiksel
in 'n drie-dimensionele omgewing op sy gesig.
Hy is net 'n opsie gekies hier.
En dit weer, hy dra hierdie headset met 'n Samsung selfoon op dit wat
draadloos projekteer om ons oorhoofse.
Nou is jy op Mars, dink ek?
COLTON: Ek dink nie so nie.
Ek is nie seker [onhoorbaar].
[Gelag]
>> David Malan: Turns out Mars het hierdie spyskaarte.
>> COLTON: [onhoorbaar] paar cool plekke as ons wil aan- gaan
>> David Malan: Waar wil ons heen?
>> COLTON: [onhoorbaar]
David Malan: En laat ons sien waar Colton se nou besig ons.
COLTON: [onhoorbaar]
>> David Malan: So, daar is so baie verskillende plekke kan jy jouself.
Daar is FAPIs via wat jy kan skryf speletjies of interaksies wat
hardloop, uiteindelik, op die telefoon.
So, jy regtig net skryf van 'n selfoon app.
Maar te danke aan die sagteware en die grafiese vermoëns,
nou Colton is in hierdie klein huisie.
En by die risiko van onsself oorweldigend,
Colton en ek sal hou om vir terwyl aan die einde van die klas vandag hier
As jy wil om te kom en te speel.
En ons sal hulle bring terug volgende week as well.
Sonder verdere, omslag dit is dit vir vandag.
Ons sal sien dat jy volgende week.
>> [MUSIEK - ragga tweeling, "slegte MAN"]