[Musiikkia] DAVID MALAN: Okei, tämä on CS50. Tämä on viikon lopussa kahdeksan. Ja tänään, aloitamme täyttää joitakin paloja kun se tulee rakentaa asiat verkossa. Niin, muistuttaa, että maanantaina vietämme paljon enemmän aikaa PHP, joka on tämä dynaaminen ohjelmointikieli, joka antaa meidän tuotos, muun asioita, HTML ja muita sisältöä että me haluamme nähdä. Mutta emme ole todella pohtinut, miten aiomme säilyttää mitään tietoja. Itse asiassa lähes kaikki kyseisen Super Mielenkiintoisia sivustoja käyt tänään jonkinlainen tietokannan loppupäätä, eikö? Facebook varmasti tallentaa paljon tietoja noin meitä kaikkia ja Gmail tallentaa kaikki sähköposteja. Ja niin monet muut sivustot eivät ole vain staattista sisältöä, joka on kattava. Se on todella dynaaminen jollakin tavalla. Voit antaa panoksensa, se päivittää sivut muita ihmisiä. Saat viestit, voit lähettää viestejä, ja niin edelleen. Joten tänään, katsomme lähemmin perustuksista hankkeen että voit sukeltaa seuraava viikko, CS50 Finance, joka on todella menossa on rakentaa jotain ei C, mutta PHP. Sivusto, joka näyttää vähän jotain tällaista jonka avulla voidaan ostaa ja myydä varastot, jotka ovat todella aikoo hyödyntää reaaliaikaisesti Varastossa tietoja Yahoo Finance. Ja niin lopulta, sinulla on illuusio itse ja käyttäjille että olet todella ostamalla ja myymällä varastot ja saada lähes reaaliajassa päivityksiä, toimitusjohtaja portfolio, jotka kaikki aikoo vaatia ottaa, lopulta, tietokanta käyttäjiä. Joten, omin sanoin, varsinkin jos et ole Super perehtynyt tietokoneen tiede tai tietokantojen, mitä tiedät tietokanta olla juuri nyt, kuin teknisen kannalta? Mikä se on? Miten kuvailisit sitä ja kämppäkaveri tai ystävä? Yleisö: [äänetön] tiedot [äänetön] DAVID MALAN: Niin, luettelo tiedoista, tai store-- luettelo tiedoista että saatat haluta tallentaa jotain, kuten käyttäjä. Ja mitä käyttäjät ovat niihin liittyviä? Jos olet käyttäjä Facebookissa tai Gmail, mitä ominaisuuksia että me kaikki käyttäjät ovat? Kuten, mitä voisi olla joitakin sarakkeet taulukkolaskenta jota viittasi viimeksi? Koska uudelleen, voit ajatella tietokannan todella niin hieno Excel-tiedosto tai Google Taulukkolaskenta tai Apple Numerot tiedosto. Joten, mitä mieltä olet kun ajattelee käyttäjän? Mitä ne ovat? Mikä tuo on? Yleisö: nimi. DAVID MALAN: nimi. Joten jos nimi, kuten David Malan olisi nimi joidenkin käyttäjä. Mitä muuta käyttäjä on? Yleisö: tunnus. DAVID MALAN: tunnus. Joten, kuten henkilötunnus, kuten teidän Harvard Tunnus tai Yale Net tunnus tai vastaava. Mitä muuta voi käyttäjä olla? Yleisö: Salasana. DAVID MALAN: salasana, ehkä osoite, ehkä puhelinnumero, ehkä sähköpostiosoite. Niin, siellä on rypäleterttuja aloilla ja tämän voisi tavallaan karkaa käsistä nopeasti heti, kun aloitat ymmärtämättä, oi, nyt tallentaa tämän ja nyt tallentaa sitä ja tätä. Mutta miten me todella tehdä? Joten jälleen, henkinen malli on tänään kuin me sukeltaa todellinen SQL, Structured Query Language, on tietokanta, joka näyttää tältä. Se on vain rivejä ja sarakkeita. Ja voit kuvitella Google Spreadsheets tai useita muita ohjelmia. Mutta mikä on avain noin MySQL, joka on tietokantaohjelmisto aiomme käyttää, vapaasti avoimesti available-- Facebook käyttötarkoitukset se ja useita muita websites-- tietokanta tallentaa asioita relationally. Ja relaatiotietokannan vain tarkoittaa joka kirjaimellisesti tallentaa tietonsa riveihin ja sarakkeisiin. Se on niin yksinkertaista. Joten, vaikka jotain Oracle, joka saatat olla yleisesti kuullut on relaatiotietokanta. Ja alla huppu, se tallentaa tiedot rivejä ja sarakkeita. Ja Oracle laskuttaa sinua paljon rahaa tehdä niin, katsoo MySQL maksut te mitään saman. Joten, SQL aikoo antaa meille vähintään neljä toimintaa. Kyky valita tiedot, kuten lukea tiedot, lisätä, poistaa ja päivittää tietoja. Toisin sanoen, ne ovat todella neljä keskeistä toiminta jotka ovat menossa, jotta voimme muuttaa kamaa ne riveihin ja sarakkeisiin. Työkalu että käytämme tänään erityisesti oppia SQL ja leikkiä sillä on jälleen kutsutaan PHP MyAdmin. Se on web-pohjainen työkalu. Yhteensä sattumaa, että se on kirjoitettu PHP. Mutta se tulee antaa meille graafinen käyttöliittymä jotta voimme todella luoda nämä rivit ja sarakkeet ja sitten puhua heille kautta koodia. Joten, nyt nyt alkaa mielestäni on suoraan sanottuna tavallaan hauskaa prosessi rakennus loppupäätä sivustot, osat, että käyttäjät eivät katso, mutta varmasti tehdä välitä, koska se on melko tietoja on menossa. Niin, samanlainen kuin C ja hieman vähemmän kuin PHP, SQL, tai tietokanta, joka tukee SQL, on ainakin nämä tietotyypit ja rypäleterttuja muut. CHAR, VARCHAR, INT, bigint, DECIMAL, ja DATETIME. Ja siellä koko joukko muita ominaisuuksia, mutta katsotaan tehdä tämän tapa todellinen esimerkki. Aion mennä CS50 IDE missä, etukäteen, olen kirjautunut ja olen myös käynyt URL tämä työkalu nimeltään PHP MyAdmin. Ja ongelma asettaa seitsemän, kerromme sinulle kuinka päästä tähän käyttöliittymä yhtä hyvin. On vasemmassa yläkulmassa, huomata se sanoo luento. Ja se tarkoittaa vain sitä, että etukäteen, olen luonut tyhjä tietokanta nimeltä luento että ei ole laskentataulukoita sitä vielä. Ei ole rivejä ja sarakkeita. Koska ensimmäinen asia aiomme tehdä on alkaa luoda taulukon että menee tallentaa myös käyttäjille. Joten, kirjaimellisesti yli täällä oikealle, olen kerron tietokantaan Haluan pöytä soitetuille käyttäjille. Niin, tämä on kuin tiedosto, että olen haluat tallentaa kaikki minun tiedot. Ja kuinka monta saraketta? No, pitää se yksinkertainen nyt. Haluan vain tallentaa kuin käyttäjätunnus ja nimi käyttäjälle. Aloitamme pieni. Joten, haluan kaksi saraketta yhteensä. Ja aion mennä eteenpäin ja valitse Siirry. Ja sitten, näiden pylväät, mitä aion jotta do-- jos tämä internet cooperates-- kunnossa, joten aiomme kokeilla uudelleen. Aion luoda taulukon nimeltä Käyttäjät, joilla on kaksi saraketta, valitse Siirry, OK. Nyt meillä se todella nopeasti. Kiitos, hyvin tehty. Selvä, joten mitä haluamme nämä sarakkeet kutsua? Niin, yksi tulee olemaan nimeltään Käyttäjätunnus. Joten, kaikki näen here-- ja käyttöliittymä rehellisesti saa hieman ruma lopulta, kun alkaa kirjoittaa kaiken tämän tiedon. Mutta mikä on mukavaa on, että sellainen Paradoksaalisesti Luon sarakkeet, mutta työkalu on tyhmästi panivat riveihin jotta voin määrittää nämä sarakkeita. Niin, siellä on kaksi aihioita on alle nimi. Ja yksi näistä aloista I haluavat kutsutaan Käyttäjänimi, ja muut alan haluan soittaa nimi. Ja nyt minun on valittava tietotyyppejä näitä asioita. Joten, kun taas Excel ja Google Spreadsheets, jos haluat sarake, voit kirjaimellisesti kirjoita Nimi tai käyttäjätunnus, Enter. Ehkä teet sen rohkea kasvot vain selvyyden vuoksi, mutta siinäpä se. Et määritä tyyppisiä sarakkeita. Nyt Google Spreadsheets tai Excel, olet voi määrittää, miten tiedot on suoritettu. Voisit mennä Muotoile-valikosta ja sinä voi määrittää näytä tätä kuten dollarin merkki, näytä tätä kuin liukulukuarvoksi. Niin, se on samanlainen hengeltään että mitä aiomme tehdä, mutta tämä on todella menossa pakottaa tiedot ovat tietynlainen. Nyt, vaikka hetki sitten sanoi, että on vain vähän tietoja tyyppejä, siellä oikeastaan paljon, ja ne ovat vaihtelevalla erityisyyttä. Ja sivuun, te voi jopa tehdä hienoja asioita kuten varastointi geometriat sisällä tietokantaan. Voit tallentaa asioita kuten GPS-koordinaatit ja itse löytää, matemaattisesti, kohtia, jotka ovat lähellä toisiaan. Mutta aiomme pitää tämä Super yksinkertainen ja mennä jopa täällä, kaikki ns merkkijono tyyppejä. Niin, tässä on luettelo koko joukko vaihtoehtoja. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. Ja se on tavallaan ylivoimainen. Ja valitettavasti hieman paradoksaalisesti C, CHAR ei oikeastaan ​​CHAR. Jos määrität tietokantaan että tietotyyppi on CHAR, se tarkoittaa, että kyllä, se on CHAR, mutta se on yksi tai useampia MERKEILLÄ. Ja sinun on määritettävä kuinka monta MERKEILLÄ haluat. Joten, mikä on tyypillinen pituus käyttäjätunnusta? Onko raja tyypillisesti? Yleisö: [äänetön] DAVID MALAN: 16 ehkä? Jotain sellaista. Tiedäthän, takaisin päivä, se käytti olla kahdeksan. Joskus se on 16, joskus se on vielä enemmän. Ja niin, tämä ei tarkoittaa anna minulle yksi CHAR. Tämä tarkoittaa minun pitää ilmoittaa kentän pituutta, ja nyt voisin sanoa jotain 16. Ja siellä kaupan tehoilla. Joten näemme hetken että tämä tarkoittaa yhtä, jokainen käyttäjänimen on oltava 16 merkkiä. Mutta odota minuutti, M--L--N. Jos se käyttäjätunnukseni ja olen vain käyttämällä viittä, mitä ehdottaisitte, että tietokanta tehdä muiden 11 merkkejä Olen varattu tilaa? Mitä sinä tekisit? Yleisö: [äänetön] DAVID MALAN: Joo, juuri ne kaikki null. Tee niitä tiloja. Mutta luultavasti null, joten paljon kenoviiva nollia. Niin, toisaalta, olemme nyt varmistanut, että käyttäjätunnukseni voi olla enintään 16 merkkiä. Ja kääntöpuoli, jotka on että jos minulla oli todella pitkä nimi tai halusi todella pitkä käyttäjätunnus kuten jotkut teistä kaverit saattaisi olla, että korkeakoulussa tai klo Yale.edu, et voi olla yksi. Ja niin itse asiassa, jos olet koskaan rekisteröity sivusto ja saat huusi sanoen salasana on liian pitkä tai käyttäjätunnuksesi on liian pitkä, se on yksinkertaisesti siksi ohjelmoija, kun määrittämällä hänen tietokanta, päätti, että tällä alalla tulee olla enää kuin tämä pituus. Hyvä on, niin mitä jos etenemme nimi? Kuinka kauan Tyypillinen ihmisen nimi on? Kuinka monta merkkiä, 16? Olen arvaamaan voisimme löytää joku tässä huoneessa jossa hänen tai hänen ensimmäinen plus viimeinen nimi on pidempi kuin 16 merkkiä. Joten, mikä on parempi kuin että, 17? 18? 25? Isompi? 30? Yleisö: [äänetön] DAVID MALAN: 5000, Voi luoja. Niin, se on luultavasti kunnollinen yläraja, sanokaamme. Ja tässä meillä sellainen on tehdä arvostele. Kuten, ei ole oikea vastaus täällä. Infinite ei ole täysin mahdollista, koska olemme lopulta menossa have-- olemme menossa loppuu muisti. Joten, meidän on tehtävä arvostele jossain vaiheessa. Hyvin yleinen olisi esimerkiksi jotta use-- ja haluan täsmentää CHAR täällä kuten before-- 255 oli kirjaimellisesti yläraja tällä tietokantaohjelmisto vuosia sitten. Ja niin, paljon ihmisten olisi vain sanoa, hieno. 255 on rajana. Haluan vain käyttää maksimi. Ja tämä on melko naurettavaa. Kuten, jos kirjoitat jonkun nimetä 200 plus merkkiä, että vähän naurettavaa. Mutta muista, että ASCII ei ole ainoa järjestelmä merkkiä. Ja niin, erityisesti paljon aasialaisia ​​kieliä missä on merkkejä emme voi ilmaista koskettimet mun US näppäimistö, jotkut hahmot ovat vievät 16 bittiä sijasta kahdeksan bittiä. Ja niin, oikeastaan ei ole kovin kohtuuton että tarvitsemme enemmän tilaa, jos haluamme sovittaa suurempi merkkejä kuin hyvin Yhdysvalloissa centric niistä olemme yleensä keskustella. Joten, tarvitsemme ylärajan. En tiedä, mitä paras on, mutta 255 on yleensä yhteinen. 25 tuntuu alhainen. 16, 32 tuntea alhainen. Haluaisin varmuuden vuoksi jotain korkeampaa. Mutta on vaihtokauppa, kuten aina. Mikä on, ehkä, ilmeinen kauppa pois varata 255 MERKEILLÄ kaikkien nimi minun tietokantaan? Yleisö: [äänetön] DAVID MALAN: Mikä tämä on? Yleisö: [äänetön] DAVID MALAN: Se on paljon muistia, eikö? M--L-A-N-. Olen vain hukkaan 250 merkkiä vain tallentaa nimeni puolustautui, vain jos joku luokassa on todella pitkä nimi. Se tuntuu kohtuuttoman kompromissi. Joten, käy ilmi, että SQL, tämä tietokanta kieli, todella tukee jotain kutsutaan VARCHAR, tai muuttuva CHAR. Ja tämä on tavallaan mukavaa, että tämä Voit määrittää ole kiinteä leveys, vaan vaihteleva leveys. Ja erityisemmin suurin leveys kentän. Joten, tämä tarkoittaa, että nimi voi olla enintään 250 merkkiä, mutta se voi varmasti olla vähemmän. Ja tietokanta tulee olemaan fiksu. Jos et laita M--L--N, se on vain aio käyttää viisi, ehkä kuusi tavua, kuten jäljessä null hahmo, ja ei viettää ylimääräinen 249 tai 250 tavua tarpeettomasti. Joten, tämä tuntuu minun pitäisi on aloitettu tämän tarinan. Mutta on aina kompromissi. Niin, toisaalta, käyttäjätunnus olen määritelty olemaan koodattu 16, ja ehkä se ei ollut oikea puhelu, ehkä se on, mutta miksi ei käytä VARCHARs kaikesta? Se on olemassa syystä. Miksi ei käytä VARCHARs kaikkien alojen joiden pituus et tiedä etukäteen jos se näyttää olevan suuri juttu, eikö? Käytä vain yhtä paljon tilaa kuin sinun täytyy tähän rajaan? Yleisö: Hitaampi. DAVID MALAN: Speller? Yleisö: Tekee se hitaammin? DAVID MALAN: Voi, se on hitaampi. Hyvä, se on lähes aina vastaus, rehellisesti. Kuten, mikä on kompromissi? Se joko maksaa enemmän tilaa tai se maksaa enemmän aikaa. Eli tässä tapauksessa se saattaa olla hitaampaa. Miksi? Yleisö: [äänetön] määritettäessä [äänetön]. DAVID MALAN: Hyvä. Joten, saatat muistan jopa PSED5, leikkii lähestymistapa sanakirjaan, jos sinulla on varata muistia dynaamisesti tai pitää kasvaa puskuri, joka voi todella olla hidasta. Jos sinun täytyy soittaa malloc alla huppu ja ehkä se mitä MySQL tekee, niin varmasti, että voisi olla kyse. Ja jos luulet tapa takaisin PSet-- tai jopa viikkoa kaksi, kun teimme asioita, kuten binäärihakupuu tai jopa lineaarinen haku, yksi mukavia asioita jokainen sana tietokantaan tai jokaisen sanan sarakkeessa on täsmälleen sama pituus, vaikka jos koko joukko näistä merkeistä ovat tyhjiä, on, että voit käyttää random access tietosi, eikö? Jos tiedät, että jokainen sana on 16 merkkiä pois, voit käyttää osoitin aritmeettinen, niin puhua, ja mene meille 16, 32, 48, 64, ja voit vain hypätä heti käyttäen aritmeettinen Jonkin sanat tietokantaan. Ottaa huomioon, jos se on VARCHAR, mitä sen sijaan on tehtävä? [Puhelimen soivan] Jos se on VARCHAR, sinua voi käyttää random access. Mitä sinun täytyy etsiä tai tehdä? Joo? Yleisö: [äänetön] DAVID MALAN: Katso kautta whole-- jälki läpi koko lista etsivät mitä todennäköisesti? Minkälainen erityinen arvo? Yleisö: [äänetön] DAVID MALAN: Katse varten null terminaattorit että rajattava erottaminen sanoja. Joten jälleen, kompromissi, ja ei ole oikea vastaus. Mutta tämä on silloin, erityisesti kun käyttäjät saavat olla monia ja kuorma palvelimiin, ihmisten määrä käyttää sitä saa korkea, nämä ovat todella triviaali päätöksiä. Joten, voimme jättää nämä kuin tämä, mutta Katsotaanpa selaa yli oikealle täällä. Nyt siellä on pari saraketta jossa meidän on tehtävä arvostele. Onko järkevää sallia käyttäjän nimi, käyttäjän käyttäjätunnuksen tai käyttäjän nimi, olla null? Eli vain tyhjä. Tuntuu hieman järjetön, joten olen aio tarkistaa niitä laatikot. Mutta se osoittautuu vuonna tietokanta, voit sanoa, joku voi mahdollisesti olla tämän arvon. Tämä sarake ei ole todella olla siellä. Nyt, on tämä pudotusvalikosta. Ja huomaa olen yhä ensimmäisellä rivillä siellä, joten puhun käyttäjätunnuksen nyt. Ja käy ilmi, että tietokanta, toisin kuin yksinkertainen pelkkä taulukkolaskenta, on tehokkaita ominaisuuksia kutsutaan indeksit. Ja indeksi on tapa kertoa tietokanta etukäteen, että olen ihmisen olen fiksumpi kuin sinä. Tiedän millaisia ​​kyselyjä, valitse tai lisätä tai poistaa tai päivittää, että minun koodi tulee päättymään jopa tekee tästä tietokannasta. Haluan lukea paljon tietoa. Haluan lisätä paljon tietoa. Haluan jatkuvasti poistaa paljon tietoa. Jos tiedän, että aion olla päästä kenttä kuin Käyttäjänimi paljon, Voin ennaltaehkäisevästi kertoa tietokanta, tiedän enemmän kuin sinä, ja haluan käskyn, että sinun pitäisi indeksi tällä alalla. Jos indeksointi kenttä tai sarake tarkoittaa sitä, että tietokannan etukäteen pitäisi lainata ideoita, kuten, viikko neljä ja viisi ja kuusi CS50 ja todella rakentaa jotain binäärihaku puu tai jotain yleensä kutsutaan B puu että oppisit luokkaansa kuten CS124 Harvardin, algoritmit luokka, tai useita muita paikkoja. Tietokanta ja fiksu ihmisiä, jotka toteutetaan sen tulee selvittää, miten säilyttää että tietotaulukkoa muistiin jotta haut ja muut toiminnot ovat erittäin nopea. Sinun ei tarvitse tehdä sitä. Sinun ei tarvitse toteuttaa lineaarinen haku tai binäärihaku tai yhdistää lajitella tai valinta lajitella, mitään sellaista. Tietokanta tekee sen puolestasi jos kerrot se ennaltaehkäisevästi indeksoida tällä alalla. Ja voit nähdä myös, siellä jotkut muut ominaisuudet voimme kertoa tietokannan valvoa. Mitä se voisi tarkoittaa, jos päätän Unique tästä valikosta, vain intuitiivisesti? Joo? Yleisö: [äänetön] DAVID MALAN: Joo, Käyttäjätunnus on oltava ainutlaatuinen. Onko tämä hyvä vai huono asia tietokanta, verkkosivuilla käyttäjiin? Jos käyttäjänimiä on ainutlaatuinen? Joo, luultavasti. Jos niin kenttä käytämme kirjautua sisään, et todellakaan halua ihmisiä, joilla sama tunne tai samaa käyttäjätunnusta. Joten, voimme olla tietokanta valvoa, että niin että nyt minun PHP tai millä tahansa kielellä, Minulla ei tarvitse esimerkiksi tarkistaa välttämättä tekee tämän käyttäjätunnus olemassa ennen kuin antaa jonkun rekisteröityä? Tietokanta ei anna kaksi ihmistä nimeltä David tai Malans rekisteröidä tässä tapauksessa. Ja syrjään, vaikka tämä valikon vain voit valita yksi, yksilöllinen indeksi on yksi, joka on indeksoitu super nopea suorituskyky, mutta se myös valvoo ainutlaatuisuutta. Ja me palata mitä Kaksi muuta tarkoita vain hetken. Samaan aikaan, jos menen toinen rivi, joka on käyttäjän nimi, minun pitäisi määritellä että nimi olisi ainutlaatuinen? Ei, koska voisit varmasti have-- ei ole kaksi David Malans tässä huoneessa, todennäköisesti. Mutta jos me valita eri nimi, voisimme varmasti törmäykset. Muistelen hash taulukoita ja vastaavia. Joten, emme missään nimessä halua tehdä nimikenttä ainutlaatuinen. Joten, me vain lähdössä että viiva, viiva, viiva, ei mitään. Ja aion lähteä kaikki muu yksin. Itse asiassa suurin osa näillä aloilla meidän ei tarvitse välittää. Ja kun olen valmis pelastamaan tätä, Jos Internet yhteistyötä, I valitse Tallenna, ja hyvin, hyvin, hyvin hitaasti ei tietokantaan tallentuvat. Ja nyt olen takaisin tähän käyttöliittymä, joka tosin, on ylivoimainen ensi silmäyksellä. Mutta kaikki aion tehdä, on klikkaa sanaa Käyttäjiä vasemmassa yläkulmassa. Aion mennä tänne, napsauta Käyttäjiä, ja oletuksena, se on toteuttanut joitakin SQL, mutta siitä lisää hetken kuluttua. Tässä on vain yhteenveto siitä, mitä tein. Ja ei hätää, että näet mainita Latinalaisen ja Ruotsin täällä. Nämä ovat vain oletus asetukset, koska MySQL alunperin, tai PHP MyAdmin, toinen tapahtui on kirjoittanut noin Ruotsin kansa. Mutta se on merkityksetöntä tässä tapauksessa täällä. Hyvä on, joten miksi tämä kaikki mielenkiintoinen? On käynyt ilmi, voin lisätä tietoja tietokantaan kirjoittamalla koodin. Ja minä mennä eteenpäin ja minun tiedosto täällä, olen menossa eteenpäin ja teeskennellä kuin tämä on kytketty tietokantaan, joka se ei ole tällä hetkellä, mutta se olla, kun saamme ongelman asettaa seitsemän. Ja aion mennä eteenpäin ja suorittaa toiminto nimeltään kyselyn, joka annamme sinulle ongelma asettaa seitsemän jakelu- koodin, että kestää ainakin yhden argumentin, joka on vain merkkijono. Jono SQL-koodin. Joten, olet aikeissa oppia kirjoittaa Structured Query Language. Jos haluan lisätä uuden rivin minun tietokanta koska joku on toimittanut muodossa minun koodi, olisin kirjaimellisesti kirjoittaa INSERT INTO käyttäjät seuraavat kentät: käyttäjätunnus, pilkku, nimi, ARVOT, ja nyt minun täytyy lisätä jotain Malan, ja lainaus, lainaus "David Malan." Ja nyt myös niille, jotka eivät tunne SQL, miksi minulla on käytössä puolilainausmerkkejä sisäosat vihreä merkkijono? Mikä voisi olla syy täällä? Huomata Olen sekoittuminen kahdella kielellä. Kysely on PHP funktio, mutta se vie argumentti. Ja että väite on itsessään kirjoitettu toisella kielellä nimeltään SQL, Structured Query Language. Niin, kaiken, mitä juuri korostettu täällä on tällä kielellä nimeltään SQL. Joten, mitä kanssa puolilainausmerkkejä, yhtä nopeasti järki tarkistaa? Mene eteenpäin. He jouset. Niin, lainaus, lainaus Malan ja lainaus, lainaus David Malan ovat merkkijonoja. Ja vain ajatella intuitiivisesti nyt, tietäen mitä tiedät C ja PHP, Miksi en tee tätä, jota yleensä käytetyt lainausmerkit jousille? Miksi en halua tehdä sitä? Joo? Yleisö: [äänetön] DAVID MALAN: Aivan. Koska olen jo käytössä lainausmerkit matkalla ulkopuolella argumentti PHP funktio, Haluan vain sekoittaa tulkki. Se ei tiedä, nämä liittyvät toisiinsa? Ovatko nämä menevät yhteen? Ovatko nämä menevät yhteen? Joten, minä vuorottelevat sijaan. Tai voisin tehdä jotain tällaista, kenoviiva lainaus tai kenoviivaa tarjous. Suoraan sanottuna, että vain alkaa saat hyvin lukukelvoton ja ruma. Mutta se saisi saman tuloksen kuin hyvin. Joten, jos olisin suorittaa tämän kysely nyt, katsotaan mitä tapahtuu. Aion mennä eteenpäin nyt ja melko kuin suorittaa PHP, joka on jossa voit pelata ongelmatilanteissa asettaa seitsemän, Aion sen sijaan mennä PHP MyAdmin. Ja olen itse menossa mennä SQL välilehti, ja haluaisin suurentaa käyttöliittymän. Ja aion liitä mitä olen juuri kirjoittanut. Ja värikoodit on hieman muuttunut nyt, vain koska ohjelma formaatteja asiat hieman eri tavalla. Mutta huomaan, että kaikki olen tehnyt on olen sanonut, työnnä käyttäjät. Olen määritelty, sitten, vuonna pilkku erotettu suluissa lista kaksi kenttiä, jotka haluan lisätä, ja sitten Olen kirjaimellisesti sanoi arvot seurasi toinen paren, ja sitten kaksi arvoa Haluan plug-in, ja nyt hyvä toimenpide, Laitan puolipiste lopussa. Niin, tämä ei ole C. Tämä ei ole PHP. Tämä on nyt SQL, ja olen liittämällä se tähän web-pohjainen käyttöliittymä, joka on vain aio antaa minulle, heti kun olen klikkaa Go, suorittaa tämän kyselyn tietokantaan käynnissä sisällä CS50 IDE. Joten tämä on hyvä. Huomaa, että mainittu yksi rivi Lisätään, meni huippunopea, 0,0054 sekuntia lisätä tietojen. Niin, että kuulostaa melko terve. Se alustanut kysymykseni minulle täällä vain nähdä se on eräänlainen värikoodatut versio. Mutta nyt jos napsautan Selaa, huomaa, että vaikka vaikka siellä on paljon sotkua näyttö, minun pöytäni on nyt kaksi riviä. Joten, anna minun mennä eteenpäin ja tehdä toinen. Tämän sijasta haluaisin Siirry SQL välilehti uudelleen. Ja tällä kertaa minä lisätä jotain Rob ja hänen nimensä on Rob Bowden. Bowden. Katsotaanpa sitten Tallenna. Hups, mieluummin mennä. Valitse Selaa uudelleen, ja Nyt huomaan on kaksi riviä. Joten, tämä on vain tapa monimutkaisempi tapa avata Google Spreadsheets ja kirjoittamalla rivi pylvääseen. Mutta mikä on avain on, että meillä on nyt syntaksi jolla kirjoittaa koodia niin, että lopulta, voisimme todella tehdä joitakin ja tämän. Muista, että PHP tukee Super globaaleja muuttujia. Mikä on sisällä dollari kirjaudu alaviiva GET PHP? Otimme katsele yhtä tai kaksi yksinkertaisia ​​esimerkkejä. Ja PSet6 Recall olet hei piste PHP joka käyttää tätä muuttujaa. Mikä menee siellä? Vai mikä se on? Vähän kovempaa. Yleisö: [äänetön] DAVID MALAN: Se on lunta siemen array, joka on vain hieno tapa sanoa array, joka on keskeinen arvo-pareja. Ja näppäimet eivät ole numeerisia. He sanoja tai merkkijonoja. Ja erityisesti, mitä ovat ne keskeiset arvo-pareja? Mistä ne tulevat? Anteeksi? Yleisö: [äänetön] DAVID MALAN: Ei? Jos tekemään niitä keskeisiä arvo pareja tulevat? Sano uudelleen? Uudelleen? Olenko ainoa kuulo jotain? [Naurua] Aivan oikein, kyllä? Yleisö: [äänetön] DAVID MALAN: Joo, he tulevat kyselyn merkkijono. Joten, jos taaksepäin ajoissa kun olemme pelataan Google ja olemme menneet Google.com kauttaviiva haku kysymysmerkki Q on yhtä kissat, jos olisin paina Enter ja jos Google toteutettiin PHP, PHP-koodin että Google kirjoitti olisi pääsy dollarin merkki korostaa GET jonka sisällä on keskeinen kutsutaan Q ja arvo kutsui kissat että se voi sitten käyttää tapana tehdä todellinen haku. Joten itse asiassa, mitä aion nyt on palata minun PHP että voit taas nähdä lisää vuonna PSet7. Ja sen sijaan kytkemällä kovaa koodattuja arvoja ei tunnu erittäin dynaamisen sivuston, Aion antaa sinulle teaser mitä todellinen koodi tekisi. Voisitte laittaa kaksi kysymys merkitsee näin. En tiedä, mikä käyttäjätunnus on. En tiedä mitä nimi tulee olemaan, mutta tiedän voin saada heidät dynaamisesti. Joten, jos koodi haluamme ilmoittaa nyt koodi käynnissä Googlen palvelimille, tai jos tämä on hei piste PHP, joka tulee PSet6, Aion kulkeutua hakutoiminto aivan kuten printf, kaksi muuta väitettä. GET, lainaus, lainaus päättyy käyttäjätunnuksen, ja GET, lainaus, lainaus nimi. Ja nyt, huomaa, mitä yleinen rakenne on täällä. Minulla vasemmalla puolella puhelun, tämä toiminto nimeltään kyselyn PHP. Minulla on vielä ensimmäisenä argumentti, vain merkkijono. Mutta että merkkijono on kirjoitettu kielellä nimeltään SQL. Ja rehellisesti, se ei ole iso kieli. Olemme vain aio puhua se virallisesti tänään, todella. Ja sitten Harjoitus seitsemän, siellä on suhteellisen muutamia ominaisuuksia, että olemme menossa hyödyntää. Kysymysmerkkejä kuitenkin tarkoita kytke arvo täällä ja pistoke toisessa arvo täällä. Ja ilmoitus, olen pois mitä ympäri quote-- pirun it-- ympäri lainaus merkitsee tällä kertaa. Olen pois lainaus tavaramerkit ympärillä kysymysmerkki, pahoillani, tällä kertaa. Joten, mitä mukavaa tästä kysymysmerkki ominaisuus, joka PHP pyrkii tukemaan, Ruby ja Python ja muilla kielillä, tämä tarkoittaa vain plug joissakin Arvostamme täällä ja tiedättekö mitä? Voit selvittää, käytetäänkö puolilainausmerkkejä tai lainausmerkkeihin. Älä häiritse minua kanssa älyllisesti mielenkiinnoton tiedot. Mutta varmista, että se on oikein niin että minun koodi on lopulta toiminnalliset ja turvallinen, joka on merkitystä ennen pitkää. Nyt, kuinka monia perusteita yhteensä, vain oltava selkeä, on hakutoiminto ottaen? Kukaan halua äänestää yli kaksi? Kolme? Toki, miksi? Miksi kolme? Yleisö: [äänetön] DAVID MALAN: Aivan. Ensimmäinen osa on merkkijono. Toinen argumentti on dollarin merkki korostaa GET kiinnike käyttäjätunnus. Ja kolmas väite on sama asia, mutta vain nimi. Eli toisin sanoen, nyt jos olisin verkkolomakkeella jotka oli tekstikenttiä, yksi käyttäjän käyttäjätunnus, yksi hänen nimensä, vain kuten voit nähdä verkkosivuilla kun rekisteröidyt jotkut verkkosivuilla, tämä saattaa olla koodi loppupäätä että itse asiassa tekee lisäys nyt tietokantaan. Nyt sen sijaan, katsotaanpa eteenpäin. Oletetaan käyttäjä on nyt kirjautumalla sisään ja haluat kirjoittaa PHP koodia, joka tarkistaa, onko henkilö, joka on juuri kirjautunut sisään on todella käyttäjä, voit käyttää melko yksinkertainen syntaksi. Voit sanoa VALINTA, sanokaamme Star, jossa tähti merkitsee kaikkea. En tiedä mitä minä haluavat, joten anna minulle kaikki taulukon sarakkeita soitetuille käyttäjille missä, ja tämä on mukavaa. Valitse tukee mitä kutsutaan predikaatti, joka on kuten tapa täyttäviä mitä haluat. Jos käyttäjätunnus on sama lainaus, lainaus Malan. Niin tässäkin, olen sulautettujen sisällä argumentti on PHP funktio, rivi SQL-koodin. Ja että SQL-koodin tämä aika on kirjaimellisesti menossa etsiä tarjous, Lainaus päättyy Malan. Nyt ei ole kaikki, että hyödyllinen, joten aion skip että ja aion laittaa pois tämä kärki Brady, ja mennä ja plug-in sen sijaan kysymysmerkki täällä. Joten, vain olla selkeä, mitä pitäisi Toinen väite on jos joku on juuri kirjautunut sisään ja minä haluat tarkistaa, jos hän on itse käyttäjä? Yleisö: [äänetön] DAVID MALAN: Joo. Kuulen dollarin merkki alaviiva Lähetä pyyntö, lainaus käyttäjätunnus. Ja että pitäisi palata minulle tahansa rivien tietokannasta että on käyttäjätunnus Malan. Nyt toivottavasti, aion saada takaisin nolla, jos Malan ole koskaan ollut täällä, tai yksi jos hänellä on. Minun ei pitäisi saada takaisin kaksi tai kolme tai neljä. Miksi? Yleisö: [äänetön] DAVID MALAN: Sanoin ainutlaatuinen, eikö? Yksinkertainen syy. Koska sanoin sen täytyy olla ainutlaatuinen, vain loogisesti, voit vain olla nolla tai yksi Malans tässä nimenomaisessa tietokannan taulukkoon. Nyt kun sivuun, juuri niin olet nähnyt se, vaikka pidän käyttäen GET ja vaikka PSet6 käytetään vain GET, voit varmasti POST. Ja muistuttaa, että Post on toinen tekniikka tietojen ilmoittamista lomakkeesta, mutta se ei näy URL. Se on hieman turvallisempi varmasti asioita, kuten käyttäjätunnuksia ja salasanoja, joka PSet7, itse asiassa, liittyy. Niin, tehdään tämä PHP MyAdmin ja katso mitä tapahtuu. Aion mennä MySQL välilehti. Ja huomaa, että oletusarvo PHP MyAdmin, vain yrittää olla avuksi, on valita tähden käyttäjiltä jossa yksi. No, yksi on aina totta, niin tämä on typerä tehokas vain Valitse kaikki. Mutta aion olla hieman enemmän pikkutarkka ja manuaalisesti kirjoittamiseen SELECT tähden käyttäjiltä. Nyt teknisesti, voit Lainaan nimi taulukoita. On harvinaista, että sinulla on, mutta huomaa nämä eivät ole normaali lainausmerkkejä Yhdysvaltain näppäimistöllä. Tämä on niin sanottu backtick, joka on yleensä ylhäällä vasemmalla kulmassa näppäimistön. Mutta se on harvinaista, että sinun itse tarvitse vaivautua että, joten minä vain jättää niitä joka tapauksessa. Joten nyt, anna minun mennä eteenpäin ja osui mennä. Ja kuinka monta riviä minun pitäisi saada takaisin kun valitsen tähden käyttäjiltä? Yleisö: [äänetön] DAVID MALAN: rivien, varma. Mutta kuinka moni tässä konkreettisia tarina juuri nyt? Kaksi, koska siellä oli minua ja oli Rob. Joten, jos olen valitse Siirry, näen visuaalisesti että Olen saanut takaisin, todellakin, kaksi riviä. Siellä on paljon sotkua näyttö, mutta näen vain kaksi riviä. Sitä vastoin, jos en tee tätä uudelleen ja tehdä SELECT tähti käyttäjiltä, ​​missä käyttäjätunnus vastaa lainaus, lainaus Malan, nyt jos olen valitse Siirry, Olen vain menossa saada takaisin yhden rivin. Ja lopuksi, jos en jotain tällaista, kai että en välitä saada kaiken, joka on tavallaan merkityksetön nyt, koska siellä on vain kaksi saraketta. Se ei ole kuin olen valitsemalla valtava määrä tietoa. Kai mennä eteenpäin ja Tehtävät Valitse nimi käyttäjille, jossa käyttäjänimi on yhtä Malan, mikä on mukavaa noin SQL rehellisesti, on, että se todella vain tekee mitä kerrot sen tehdä. Ihan ytimekäs, mutta voit kirjaimellisesti vain kertoa se, mitä haluat tehdä. Valitse nimi käyttäjiltä missä käyttäjätunnus vastaa Malan. Ja se todella on, että nimenomainen. Joten, nyt jos osuin Go, kuinka monta rivit olen menossa saada takaisin? Yksi, koska se on vain Malan, toivottavasti. Tai nolla, jos hän ei ole siellä, mutta yksi maksimaalisesti. Ja kuinka monta saraketta pääsen takaisin? Kuinka monta saraketta? Tällä kertaa, olen juuri menossa saada yksi koska en Valitse tähti, joka on kaiken. Nyt olen valinnut vain nimi, niin minä vain saada takaisin yhteen sarakkeeseen ja yhden rivin. Ja se näyttää tavallaan asianmukaisesti naurettava, just looking Super pieni näin. Joten, mitä todella tapahtuu? Kun suoritat SQL kysely käyttäen Valitse, mitä saat takaisin tietokannasta on kuin tilapäinen taulukko rivit ja sarakkeet, ehkä, mutta jättää mitään, ei oikeastaan ​​te valitsette. Niin, se on kuin jos joku oli suuri taulukkolaskenta kaikkien opiskelijoiden rekisteröity joitakin opiskelijaryhmän, ja sanot, anna minulle kaikki fuksi jotka olemme rekisteröity meidän opiskelija ryhmä, mitä sinun kollegansa opiskelija ryhmä voisi tehdä on ne voisi vain käsi sinua koko laskentataulukon. Se on kuin sanoisi valitse tähti. Ja se on vähän ärsyttävää, jos vain halusi fuksi. Ja niin, jos sen sijaan sanoi, Valitse tähti tietokannan taulukon jossa vuosi on lainaus, lainaus päättyy fuksi, se on ikään kuin ystäväsi oppilaan ryhmässä kirjaimellisesti esiin ja kopioida vain fuksi rivit, liittää ne uuteen Google Taulukkolaskenta tai Excel-tiedoston, ja antoi takaisin Tuloksena tiedosto vain. Siinä kaikki että menee on käsitteellisesti täällä. Joten lopulta, voimme tehdä joitakin melko hienouksia tallentamalla asioita, kuten käyttäjätunnuksia ja salasanat ja vastaavat. Mutta, se kääntyy pois, meidän pitäisi tehdä hieman eri tavalla kuin tämä. Se ei ole järkevää vain tallentaa käyttäjätunnuksen ja salasanan. Joku aikaisemmin, mielestäni täällä, ehdotti tunnus. Nyt tunnus voisi olla Harvard tunnus tai Yalen Net tunnus, mutta se voisi olla jopa helpompaa tietokantaamme tapauksessa. Ja todellakin, yhteinen asia on saada toisen sarakkeen. Ja aion mennä eteenpäin ja muokata pöytä. Ja jos pelaat noin kanssa tämä käyttöliittymä PSet7, näet, että voit tarkistaa tätä painiketta täällä ja lisää kentän alussa taulukon. Ja nyt jos olen valitse Siirry, se tulee antaa minulle yksi niistä muodoista aiemmista. Aion lisätä kentän nimeltä tunnus. Ja aion tehdä numeerinen tyyppi. Minulla on koko joukko arvojen numeriikan. Olen juuri menossa valita INT ja välitä erilaisia ​​kokoja. Minulla ei tarvitse määrittää pituus tai arvo, koska se tulee olemaan 32 bittiä mitä tahansa. Attribuutteja, emme nähneet ennen. Mikä tahansa kiinnostunut kaikista näistä valikon vaihtoehdot tällä kertaa? Saat INT? Mitä ehdotatte? Ei? Tee jokin näistä järkeä? Joo. Joo, allekirjoittamaton, eikö? Yleensä jos me aiomme antaa jokainen yksilöllinen numero, joka on, jos tämä tarina on menossa, en oikeastaan ​​vain halua henkilö on numero kuin nolla ja yksi ja kaksi ja kolme ja neljä. En tarvitse käsitellä kanssa negatiivisia lukuja. Se vain tuntuu turha monimutkaisuus. Haluan neljä miljardia mahdolliset arvot, ei neljä miljardia mahdolliset arvot, joten en juuri kaksinkertaistunut kapasiteetti minun INT. Sivuhuomautuksena, jos haluat liittyä tämä jotain, kuten Facebook, takaisin tavallaan minun päivä, kun Facebook ensimmäinen tuli ulos, Uskon, mitä ne olivat käyttämällä niiden MySQL-tietokannan tallentaa käyttäjän tunniste, oli vain INT. Mutta tietenkin, siellä on paljon oikeita ihmisiä maailmassa. Siellä on paljon väärennettyjä Facebook tilit maailmassa. Ja niin lopulta, Facebook overflowed koko INT, neljä miljardia arvo. Minkä vuoksi, jos tarkastellaan ympärillä ja siellä on sivustoja joka voi kertoa teille, mitä yksilöllinen tunnus on. Ja jos et koskaan valinnut käyttäjätunnus Facebook, näet oman yksilöllinen tunnus. Minusta se on profiili piste PHP kysymysmerkki tunnus vastaa jotain. Tämä on nyt jotain iso INT, tai pitkään pitkään, jos haluatte, joka on 64-bittinen arvo tai jotain vertailukelpoisia. Joten, vaikka todellisessa maailmassa nämä kysymykset lopulta joskus merkitystä. Ja se kääntyy pois täältä, jos olen antamalla kaikille minun käyttäjien yksilöllinen tunnus, Haluan olla erittäin selvä ja minimaalisesti tekevät tällä alalla ainutlaatuinen. Mutta se osoittautuu siellä on yksi pala nimikkeistön tänään liian se perusavain. Jos olet suunnittelussa tietokantaan pöytä ja tiedät etukäteen että yhden sarakkeen kyseisessä taulukossa olisi ja yksilöimään riviä taulukossa, jonka haluat määrittää sen ja kertoa tietokanta, tämä on minun ensisijainen avain. Saattaa olla kaksoiskappaleita muilla aloilla, mutta Kerron tietokanta että tämä on minun ensisijainen, minun tärkein kenttä, joka on taatusti ainutlaatuinen. Nyt tämä näyttää tarpeeton. Olen ehdottaa nyt, että me lisätä, painamalla Tallenna täällä, kenttä called-- ja aion mennä eteenpäin ja valitse AI, me palaamme että hetki, Tallenna. Ehdotan nyt, että minun pöytä näyttää tältä. Minulla INT kenttä nimeltä tunnus, CHAR kenttä nimeltään Käyttäjätunnus, VARCHAR kenttä nimeltä nimi, mutta tunnus, jos se on ensisijainen ja siksi ainutlaatuinen, miksi olen vain tuhlaa aika ottaa käyttöön mitä tehokkaasti on toinen ainutlaatuinen kenttä kutsutaan tunnus, joka on INT? Käyttäjätunnus, Recall, oli jo ainutlaatuinen, sanoimme. Joten loogisesti, sinun ei tarvitse tahansa tietokannan kokemusta syy kautta, miksi ehkä olen ottanut käyttöön INT minun yksilöllinen tunniste samoin? Mitä this-- sano uudelleen? Yleisö: [äänetön] DAVID MALAN: Satunnainen pääsy on helpompaa, miksi? Yleisö: [äänetön] DAVID MALAN: Joo, se on vain päästä numeroita. Joten, jos luulet tämän todella on taulukko, kuten array, nyt minulla on yksilölliset tunnisteet että voin hypätä ympäri. Ja parempi kuin vielä on, että kuinka suuri on INT olemaan taas? 32 bittiä tai neljä tavua. Kuinka suuri on minun käyttäjätunnuksen olemaan? Maksimaalisesti? 16 tavua. Joten, jos olet todella välitämme suorituskykyä koodin, muistelen PSet5, haluatko etsiä neljä tavulla tai 16 tavulla, eikö? Se on todellakin niin yksinkertaista. Sinun täytyy tehdä neljä kertaa niin paljon työtä etsiä käyttäjätunnuksia, koska niille 16 tavua. Joten, sinun täytyy kirjaimellisesti vertailla 16 tavua olla varma Kyllä, tämä on käyttäjätunnus haluan. Kun taas INT, voit tehdä sen vain neljä tavua. Ja syrjään kyseisiä kiinnostuneita atk-laitteet, se kääntyy pois mahtuu jotain INT tai 32-bittinen arvo jotain kutsutaan rekisteri tietokone CPU, mikä tarkoittaa että se on super, huippunopea, jopa alhaisin taso tietokoneen laitteisto. Niin, siellä on vain etuja ympäri. Joten, mitä tämä tarkoittaa? Itse asiassa, kun olet suunnittelussa tietokannan taulukko, lähes koko ajan aiot ole vain tietoja välität, mutta myös jotain yksilöllinen tunniste koska tämä on menossa tehkäämme muita asioita. Ja nyt kompastua yksi ongelma. Oletetaan, että käyttäjät eivät ole vain käyttäjätunnukset ja nimet, mutta niillä on myös asioita, kuten kaupungeissa ja valtioiden ja postinumerot, ainakin täällä Yhdysvalloissa. Joten, aion mennä eteenpäin ja vain nopeasti sanoa, anna minulle kolme saraketta lopussa taulukossa. Ja tämä tulee olemaan Kaupunki, tämä tulee olemaan valtion, ja tämä tulee olemaan Zip. Nyt City, mitä tietotyyppejä pitäisi tämä olla, ehkä? VARCHAR? En tiedä mitä pisin nimi kaupunki on. Jossain Amerikassa, siellä todennäköisesti joitakin naurettavan pitkä sana, joten haluan vain mennä 255, hieman historiallisesti tai mielivaltaisesti. Valtion, mitä haluat tehdä? Arvostele, eikö? Mikä ehkä tehokkain? Kuinka monta merkkiä? Ehkä vain kaksi, jos voimme saada pois tekemässä vain, kuten, MA Massachusetts ja niin edelleen. Joten, aion mennä CHAR arvo kaksi. Postinumero on mielenkiintoinen. Olemme täällä 02138, niin että ehdottaa meidän pitäisi käyttää mitä? Se INT, eikö? INT, INT, lyhyt? Lyhyt toimisi. Ei? CHAR tai viisi, mutta haluan INT. Miksi työntää takaisin INT? Vakuuta minua tästä. Mikä tyhmä noin INT, minun idea? Joo. Yleisö: vievät enemmän muistitilaa. DAVID MALAN: vievät enemmän muistitilaa. Neljä tavua, mutta olet ehdottaa postinumeron viisi tavua tai joku oli CHAR, joka tuntuu EH, se ei oikeastaan tapaus. No, hauska tarina. Vuosia sitten, kun minulla oli tapana käyttää Microsoft Outlook for sähköpostiini, Olen lopulta halusin vaihtaa Gmailiin. Ja niin, minä vienyt kaikki minun yhteystietoja Outlook CSV-tiedostona. Pilkulla erotettuna arvot, joka vain tarkoitti I oli kaikki ystäväni nimet ja viime nimiä ja puhelinnumeroita ja postinumerot ja kaikki tämä. Ja sitten tein virhe avaamista Excel, joka on taulukkolaskentaohjelma, joka ymmärtää CSV-tiedostoja kuten olemme nähneet. Mutta sitten, minun täytyy lyödä, kuten, Komento tai Control S jossain vaiheessa. Ja Excel ilmeisesti aikaan oli ominaisuus, jolla tahansa se näki numero, se yritti olla avuksi. Ja jos määrä alkoi nollat, se olisi vain päästä eroon niistä. Miksi tarvitset johtava nollille kokonaislukuja? He merkityksetön, matemaattisesti. He eivät ole merkityksetön Yhdysvaltain Postal järjestelmän. Joten, minulla on ollut vuosia, tähän päivään, olen edelleen on ystäviä, kun harvinainen tapaus, että tarvitsen jonkun puuttua näinä päivinä, Olen silti nähdä, että minä on ystävä Cambridge, Massachusetts, 2138. Ja se on ärsyttävää, jos olet yrittää tavallaan ohjelmallisesti tuottaa kirjekuoret tai vain hiukkaakaan alas. Ja se johtuu tästä syystä, Valitsin väärän tiedon tyyppi. Joten, minä rakastan ideasi. Katsotaanpa käyttää CHAR kenttä. Viisi merkkiä, paitsi on nurkassa tapaus. Jos vielä lähettää postia, joskus postinumerot näinä päivinä, he ovat, kuten, sekä neljä. Joten, tarvitsemme tavuviiva ja sitten Tarvitsemme neljä enemmän numeroita. Joten olla rehellinen, se voisi mennä monin eri tavoin. Nyt aion pitää se yksinkertainen ja olen vain aio sanoa, että se on viisi CHAR arvo ja olemme menossa ohittaa koko viiva plus neljä. Mutta nämä ovat erilaisia ​​kompromisseja. Ja voit ajatella Sama ongelmia kanssa puhelinnumeroita tai muilla aloilla. Ja nyt, tämä on todella typerä tie mennä alas. Oletetaan sekä Rob ja minä ja Hannah ja Maria ja [? Davon?] Ja Andy ja muut henkilöstön kaikki elämme Cambridge, Massachusetts, 02138. Tämä todella tuntea tyhmä, että olen lisäämällä minun käyttäjille pöytä, kaupunki, valtio, ja zip. Miksi? Yleisö: [äänetön] DAVID MALAN: Sano uudestaan? Yleisö: [äänetön] DAVID MALAN: ne ovat aina mene yhdessä, eikö? Kun se kääntyy pois, meillä oli tapana ajatella näin oli, kunnes me tyhjentävästi etsinyt koko USA, ja käynyt ilmi, että siellä joitakin epäjohdonmukaisuuksia jossa useat kaupungit ovat sama vetoketju, joka on outo. Mutta, jos me määrätään nyt, että 02138 on aina Cambridge, Massachusetts, miksi ihmeessä te tallentaa tietokannan Cambridge ja MA ja 02138 minun ja Hannah ja Rob ja varten [? Davon?] Ja muille, jotka asuvat täällä Cambridge, se on täydellisesti tarpeeton. Meidän pitäisi päästä pois vain tallentamiseen mitä? Vain postinumeron. Mutta sitten, jos Tallennamme vain postinumero, en halua, luultavasti, minun verkkosivuilla tietää, missä 02138 on. Joten, tarvitsen toisen taulukon. Ja se on OK. Ja itse asiassa tämä on yksi suunnittelu prosessit suunnittelusta taulukoiden että voit tehdä PSet7 samoin jolloin haluat tekijä yhteiset tiedot. Aivan kuten olemme factoring ulos yhteinen koodi ja factoring yhteiset tyylejä CSS, tässä liian tietokantaan, jos minulla on vain 02138 yksikäsitteisesti tunnistaa jonkun kotipaikan, älä säilytä Cambridge, Mass varten jokainen hiton käyttäjä taulukon. Sen sijaan, on erillinen taulukko nimeltään Vetoketjut että pitäisi olla mitä sarakkeita? Luultavasti ID kenttä, vain siksi, varten periaatteet puhumme nyt. Luultavasti zip kenttä 02138. Ja sitten luultavasti mitä muut sarakkeet? Kaupunki ja valtio, mutta vain yksi rivi 02138, yhden rivin 02139, yksi rivi 90210. Ja se on kirjaimellisesti kaikki postinumerot tiedän. Joten nyt, mitä voit tehdä? Tämä on ongelmallista, koska Nyt minulla on kaksi taulukkoa. Joten minun käyttäjät ovat enimmäkseen täällä, mutta heidän kaupunkinsa valtio Informationin täällä. Niin, se kääntyy pois SQL, siellä todella tapa liittyä tietoja, ja näet tämän PSET. Mutta se osoittautuu voit tehdä jotain tällaista. SELECT tähti käyttäjiltä, ​​JOIN vetoketjut users piste zip vastaa vetoketjut piste zip. Joka on hieman monisanainen, tosin mutta tämä vain tarkoittaa valitse kaikkea ottamassa minun käyttäjien pöytä ja minun vetoketjut pöytä. Liity ne yhteen kenttä heillä sarakkeessa. Joten, kirjaimellisesti tehdä jotain näin, ja anna minulle takaisin uusi tilapäinen taulukko se on laajempi, se on isompi, että on kaikki sarakkeita molemmat. Ja että yksinkertaisesti olisi syntaksi tehdä jotain tällaista. Joten, on tämä eteenpäin, mutta siellä tulee olla muita suunnittelun päätöksistä ll on tehtävä, paitsi indeksit mutta myös törmätä haasteita. Itse asiassa siellä on haaste missä tahansa tietokannan suunnittelu jolloin joskus kaksi ihmiset saattavat haluta käyttää samaa riviä tietokannan pöytä. Joten, tämä on jotain, että me will kohtaavat PSet7 samoin. Mutta ajattelin katsoa yksi hyökkäys se on mahdollista SQL. Mitkä ovat ongelmia, jotka voivat syntyä? Joten, tapaat tämän PSet7. Ja me kerromme teille suoraan mitä koodaus ratkaisu tähän ongelmaan on. Mutta jos otat korkeampi luokka, erityisesti käyttöjärjestelmät, aiot kohdata kysymys atomisuuden, ongelma yrittää tehdä useita asioita kerralla keskeytyksettä. Ja minä ajattelin esitellä tämän idea PSet7 kanssa metafora että opin itseni Margo Seltzer n CS164 käyttöjärjestelmät luokka vuotta sitten. Oletetaan, että sinulla on jokin näistä asuntolan jääkaapit omassa asuntolan huoneessa tai talo, ja sinulla on todellinen rakastaa maitoa. Ja niin, tulet kotiin luokat yksi päivä, avaat jääkaappi. Voi hitto. Jääkaapissa ei ole yhtään maitoa. Joten, suljet jääkaappi, lukita oven, lukita asuntolan, kävellä nurkan takana CVS, saada linjassa, ja aloittaa tarkkailun joitakin maitoa. Ja se tulee viemään aikaa, koska ne pirun itse kassalle laskurit kestää ikuisesti käyttää muutenkin. Joten välin, kämppäkaveri tulee kotiin. Hän todella pitää maitoa samoin. He tulevat asuntolan huoneessa, Avaa jääkaappi, OH, hiton se. Ei ole maitoa. Niin, hän myös menee nurkan takana. Mutta nyt, koska siellä on kuin kaksi tai kolme tai neljä CVSes lähellä, he sattuvat mennä johonkin eri pienimmille neliö. Ja nyt, muutama minuutti myöhemmin, molemmat teistä tulla kotiin ja yäk, pahin ongelma koskaan. Nyt sinulla on liikaa maitoa koska se tulee mennä hapan. Ja pidät maitoa, mutta sinä eivät todellakaan pidä maitoa. Joten nyt, tämä oli kallis virhe, koska molemmat teistä teki päätöksen perusteella tilaa noin muuttujan oli parhaillaan muutetaan sinä, alullepanija menossa maitoa. Joten, mikä on ehkä ihmisen ratkaisu tähän ongelmaan? Yleisö: [äänetön] DAVID MALAN: Jätä huomata, eikö? Jätä huomata, jos olet perehtynyt jotka osoittavat. Kyllä, on olemassa kaksi meistä. Niin, aina jättää huomata, tai kirjaimellisesti lukko jääkaappi jonkinlainen riippulukko tai jotain päälle niin. Mutta se on todella olemaan keskeisenä ongelmana tietokannan suunnittelu, varsinkin kun saatat olla useita selaimia, useita kannettavia tietokoneita, useita käyttäjiä kaikki yrittävät päivittää tiedot kerralla. Erityisen arkaluonteisten tietojen kuten taloudellisia tietoja, jolloin kanssa varastossa kaupankäynnin verkkosivuilla kuten sinun on rakentaa, mitä jos haluat tarkistaa, kuinka paljon rahaa sinulla on ja sitten jos sinulla on tarpeeksi, ostaa varastossa? Mutta entä jos joku muu, joka on yhteinen tili sinua on samanaikaisesti yrittää ostaa varastossa? Niin, hän on tarkistaa saldo, molemmat teistä saada takaisin saman vastaus, ei ole maitoa. Tai molemmat saat takaisin vastauksen, sinulla on $ 100 tilin. Molemmat yrität tehdä päätöksen ostaa osuus jonkin yrityksen varastossa. Ja nyt, mitä tapahtuu? Sinulla on kaksi osaketta? Sinulla ei ole osakkeita? Ongelmia, kuten että voi syntyä. Joten, me kohtaavat että. SQL-injektio-iskut, onneksi, ovat jotain autamme sinua, mutta nämä ovat atrociously yhteinen näinä päivinä vielä. Joten, tämä on vain esimerkki. En tee mitään väitteitä, Harvard PIN järjestelmä on alttiita tässä hyökkäys. Olemme yrittäneet. Mutta, te tiedätte, että me on kentän näin. Ja Yalen Net tunnus on samanlainen näköinen näyttö näinä päivinä. Ja se osoittautuu, että ehkä PIN-järjestelmä on toteutettu PHP. Ja jos se were-- se on not-- ne saattaa olla koodi, joka näyttää tältä. Heillä on kaksi muuttujaa. Anna minulle käyttäjätunnus ja salasana post Super globaali muuttuja että puhuimme aiemmin. Ehkä Harvard on kyselyn kuten SELECT tähti käyttäjiltä jossa käyttäjätunnus on sama kuin ja salasana on sama kuin. Ja huomaa, että olen vain kytket sen avulla kihara ahdin merkintä muista päivä, mikä tarkoittaa vain kytke arvo täällä. En käytä kysymysmerkki tekniikkaa. Minulla ei ole mitään toista tai kolmannen perusteluja. Olen vain kirjaimellisesti rakentaa merkkijono itse. Ongelmana on kuitenkin se, että jos joku kuten scroob, joka on viittaus elokuva, kirjautuu sisään jotain tällaista, ja olen poistanut pisteitä että yleensä peitellä salasanat, mitä jos hän on erityisen ilkeä ja hänen salasana ehkä on 12345, per elokuvan nimeltä "Spaceballs" mutta hän kriittisesti tyypit tarjouksen jälkeen viisi, sitten kirjaimellisesti sana tai tilaan, ja sitten lainaus, lainaus yksi on lainaus yksi, huomaamatta hän on pois mitä? Hän jättää lainaus oikealla ja hän on jättänyt tarjouksen vasemmalla. Koska jos tämä hyökkääjä scroob olettama on, että ihmiset, jotka kirjoittivat tämä PHP ei niin kirkas, Ehkä he vain joitakin yksittäisiä lainausmerkkeihin interpolointi muuttujan aaltosulkeita? Ja niin ehkä hän voisi laji ja saattamaan ajattelun heille, mutta tavalla, joka menee antaa hänen murtautunut PIN järjestelmään. Toisin sanoen, oletetaan että tämä on koodi ja nyt kytke mitä scroob kirjoitetaan. Ja se on punainen, koska se on huono. Ja taustalla teksti on mitä hän kirjoittanut, scroob voisi huijata Harvardin palvelimella osaksi rakentaa SQL-kysely merkkijono, joka näyttää tältä. Salasana vastaa 12345 tai yksi on yksi. Seurauksena, loogisesti, on että tämä kirjaa scroob sisään jos hänen salasana on 12345 tai jos yksi on yksi, joka on tietysti aina totta, mikä tarkoittaa scroob aina joutuu. Ja niin, tapa korjata Tässä, kuten paljon tapauksia, olisi kirjoittaa enemmän puolustuksellisesti. Jos haluat käyttää jotain meidän todellinen kyselyn toiminto, joka voit nähdä PSet7, jossa kytke jotain kysymys merkitsee täällä. Ja kauneus hakutoiminto että me antaa teille on se puolustaa näitä ns SQL-injektio-iskut, joissa joku on huijaaminen sinun koodi pistämällä oman SQL-koodin. Sillä mitä hakutoiminto annamme sinulle todella tehdä, jos käytät kysymysmerkki syntaksin ja toinen ja kolmas argumentti täällä, on mitä se lisää tulo että käyttäjä tarjotaan? Ne kenoviiva lainaa. Niin, se pakenee tahansa mahdollisesti vaarallinen merkkiä. Tämä näyttää oudolta nyt, mutta se ei ole haavoittuva koska se ei ole vaihtaa logiikka enää koska koko salasana on nyt yksi tarjous, joka ei ole, itse asiassa, scroob salasana. Niin, että on ollut joitakin vitsejä tästä vuosien mittaan. Niin, tämä oli otettu kuva Joidenkin pelle parkkipaikalla jolloin saatat tietää, että jotkut kaupungit ja valtiot yritä skannata lisenssi levy laskuttaa sinulle tai lippu sinulle jos menet läpi ilman, kuten, E-Z Pass juttu. Joten, tämä henkilö olettaa, että ehkä ihmiset kirjoittaminen E-Z Pass järjestelmä ei niin kirkas, ja ehkä ne vain ketjutetaan yhdessä merkkijono, niin että hän ei voinut haitalliseksi ei vain täydentää ajatus, mutta todellisuudessa suorittaa huono komento, joka olemme ei ole mainittu vielä, mutta arvata. Että lisäksi poistaa ja lisätä ja päivittää ja valitse, siellä on myös avainsanan kutsutaan pudota, joka kirjaimellisesti poistaa kaiken tietokantaan, joka on erityisen huono. Voimme zoomata tämä, jos se on hieman vaikea nähdä. Tämä nyt on kuuluisa sarjakuva se on ihanan ovela nyt ja ymmärrettävää. [Naurua] Joo, viileä. Tavallaan geeking ulos. Joten nämä sitten ovat SQL-injektio-iskut. Ja ne ovat niin helppo välttää käyttämällä oikea koodi tai oikealle kirjastoissa. Ja voit nähdä PSet7, se on miksi annamme sinulle hakutoiminto. Niin, pari kiusoittelu että ajattelimme antaa sinulle täällä meidän Jäljellä minuuttia yhdessä. Joten, kun muistat viikosta nolla, me esitteli nämä kaksi lamput, jotka ovat mukavia, ei vain siksi, ne ovat melko ja ovat värikkäitä, mutta koska ne tukevat jotain kutsutaan API, Application Programming Interface Ja vuonna CS50 toistaiseksi, olemme keskittynyt lähinnä GET ja POST, mutta se osoittautuu siellä on muita HTTP verbejä kuten PUT. Ja itse asiassa tämä oli dia viikko nolla jolloin jos kirjoitat koodin, joka lähettää la PSet6 HTTP-pyyntöä näyttää tämä tämän kimpale tekstin alareunassa, jota kutsutaan JSON, tai JavaScript Object Notation että me puhumme ensi viikolla, voit kytkeä tai sammuttaa tai muutos valojen väri kaltaisia. Joten jos CS50 on myös lisäksi joitakin Näiden hehkulamppujen täällä New Haven jos haluat lainata ne opinnäytetöiden, myös joitakin Microsoft Bändejä, jotka ovat kuin kellot että puet noin ranteen että samalla on API jotta voit voi kirjoittaa oman ohjelmiston heille. Meillä on tili Applen iOS koodi niin että jos sinulla on Apple Watch tai iPhonen tai iPadin tai iPod, voit kirjoittaa koodin, joka todella toimii näiden. Meillä on koko joukko ja Arduinos, jotka ovat pikku tietokoneet ilman tapauksissa olennaisesti, että voit liittää USB, tyypillisesti oman Mac tai PC, kirjoittaa koodia, joka toimii nämä fyysiset laitteet, jotka on usein anturit niitä joten voit olla vuorovaikutuksessa reaalimaailman. Meillä on koko joukko Leap Motion laitteita, jotka ovat USB-laitteita Macit ja PC, täällä ja jälleen, New Haven. Ja jos liität sen Maciin, voit itse ohjata tietokoneen kirjoittamalla ohjelmisto että Infrapunavast.otto palkit, luvut, missä ihmisen kädet ovat, jopa koskematta näppäimistön. Ajattelimme jakaa nopeasti Hangon tässä, esimerkiksi. [Musiikkia] Joten, meillä on kokonainen nippu näistä asioista, Myös nimeltään Myo käsivarsi bändejä joka laitat yli kyynärvarsi ja sitten voit hallita todellinen maailma tai virtuaalimaailmassa näin. [Musiikkia] Tai, meillä on myös joitakin Google Pahvi, joka on kirjaimellisesti, kuten, pahvilaatikko voit laittaa kasvot, mutta dian puhelimesi se niin että laitat lasillinen puhelin todella lähellä silmäsi. Ja Google Pahvi on melko halpaa osoitteessa $ 10 tai 20 $. Ja se on vähän linssit että hieman pois siirtyminen kuva ruudulla oman ihmisen silmät antaa sinulle tunteen syvyys niin että sinulla todella on 3D ympäristö edessäsi. Meillä on myös joitakin Samsung Gear, joka on kalliimpi versio, mutta että voidaan samalla liukua Android-puhelinta ja antaa sinulle illuusion of-- tai antaa kokemusta virtuaalitodellisuus. Ja meidän kaksi viimeistä minuuttia, ajattelimme yrittää tehdä tämän. Jos en voi heijastaa mitä Colton on täällä vain alkupaloiksi, anna minun mennä eteenpäin ja heittää ylös valkokankaalla täällä. Saanen tappaa valot. Colton, haluat mennä eteenpäin ja laittaa Matkapuhelimella hetkeksi ja tulevat yli, keskellä vaiheessa? Ja haluat project-- tämä on mitä Colton näkee. Nyt, Wi-Fi tässä ei niin vahva tätä laitetta että tämä on erittäin vakuuttava, mutta Colton on kirjaimellisesti Tässä maaginen futuristinen paikka. Hän näkee vain yhden kuvan. Näette hänen vasemman ja oikean silmän että hänen aivonsa ovat ompelemalla yhteen kolmiulotteinen ympäristö hänen kasvonsa. Hän vain valitun valikon täällä. Ja niin taas, hän on päällään tämä kuulokkeet kanssa Samsung puhelin se, joka on langattomasti ulkonevat meidän yläpuolella. Nyt olet Marsissa, luulen? COLTON: Luulen niin. En ole varma [kuultavissa]. [Naurua] DAVID MALAN: Osoittautuu Mars on valikoita. COLTON: [äänetön] hienoja tarkkuudella jos haluamme mennä to-- DAVID MALAN: Missä haluamme mennä? COLTON: [äänetön] DAVID MALAN: Ja katsotaanpa jossa Colton vie meidät nyt. COLTON: [äänetön] DAVID MALAN: Niin, siellä on niin paljon eri paikoissa voit tehdä itse. On FAPIs jonka kautta voit kirjoittaa pelejä tai vuorovaikutus juosta, lopulta, puhelimessa. Joten, te oikeastaan ​​vain kirjallisesti matkapuhelin app. Mutta kiitos ohjelmisto ja grafiikkaominaisuudet, nyt Colton on tässä pikku mökki. Ja riski ylivoimainen itsemme, Colton ja minä kiinni ympäriinsä vaikka lopussa luokan täällä tänään jos haluat tulla ja pelata. Ja me tuoda ne takaisin ensi viikolla samoin. Ilman edelleen Ado se on siinä tänään. Nähdään ensi viikolla. [MUSIC - Ragga Twins, "paha mies"]