[MUSIC SPILLE] DOUG LLOYD: I våre videoer på web utvikling emner, vi har nevnt begrepet en database et par ganger, ikke sant? Så en database du er sannsynligvis kjent med fra si å bruke Microsoft Excel eller Google Spreadsheets. Det er egentlig bare en organisert satt av tabeller, rader og kolonner. Og en database er der våre nettsider butikker informasjon som er viktig for vår hjemmeside for å fungere ordentlig. Igjen, en veldig vanlig eksempel her lagrer brukernavn og passord i en database, slik at når en bruker logger inn vår hjemmeside, databasen kan spørres å se hvis denne brukeren finnes i databasen. Og hvis de er, å sjekke at passordet er riktig. Og hvis deres passord er riktig, så vi kan gi dem uansett side de ber om. Så du er nok, igjen, kjent med denne ideen fra Excel eller Google Regneark. Vi har databaser, tabeller, rader og kolonner. Og det er virkelig slags av den grunnleggende sett hierarkisk sammenbrudd her. Så her er et Excel-regneark. Og hvis du noen gang har åpnet denne eller et annet lignende program du vet at disse her er rows-- 1, 2, 3, 4, 5, 6, 7. Dette er kolonner. Kanskje her nede, selv om du kan Ikke bruk denne funksjonen fryktelig much-- Jeg skal zoome in-- vi har denne ideen av et ark. Så kanskje disse arkene, hvis Jeg veksler frem og tilbake, er forskjellige tabeller som eksistere i min database. Og hvis vi fortsetter eksempelet alle Forresten, navnet på denne databasen er Book 1. Kanskje jeg har bok 2 og bok 3. Så hver Excel-fil er en database, er hvert ark en tabell, og innsiden av hvert bord har jeg denne ideen av rader og kolonner. Så hvordan jobber jeg med denne databasen? Hvordan får jeg informasjon fra det? Vel det er et språk som heter SQL-- som jeg vanligvis bare kaller Sequel-- og det står for Structured Query Language. Og det er et programmeringsspråk, men det er en ganske begrenset programmering språk. Det er ikke helt som andre som vi har jobbet med. Men hensikten med denne programmeringsspråk er å søke en database, for å be om informasjon fra en database, finne informasjon i en database, og så videre. Vi også, og det er en veldig in CS50-- felles plattform, det heter MySQL. Det er det vi bruker i kurset. Det er en åpen kildekode plattform som etablerer en såkalt relasjonell database-- en database, effektivt. Vi trenger ikke å få inn i for mye detalj på hva en relasjonsdatabase er. Men SQL språket er veldig flink til å jobbe med MySQL og andre lignende stiler av relasjonsdatabaser. Og mange installasjoner av MySQL komme med noe kalt phpMyAdmin, som er et grafisk brukergrensesnitt interface-- en GUI-- som gjør det litt mer brukervennlig å utføre databasespørringer, fordi databasene ikke er bare brukt av avanserte programmerere, ikke sant? Noen ganger er det disse små bedrifter, og de har ikke råd til ansette et team av programmerere, men de trenger fortsatt å lagre informasjon i en database. Noe som phpMyAdmin gjør det svært enkelt for noen som aldri har programmert før til plukke opp og bli kjent med hvordan å arbeide med en database. Problemet er, phpMyAdmin, mens det er et fantastisk verktøy for læring om databaser, er det manuell. Du er nødt til å logge inn det og utføre kommandoer og skriv ting i manuelt. Og som vi vet fra vår eksempel på PHP web-programmering, å måtte manuelt gjøre ting på vår hjemmeside, hvis vi ønsker en dynamisk, aktiv responsive nettside, kanskje ikke den beste tilnærmingen. Vi ønsker å finne en måte å kanskje automatisere denne liksom. Og SQL vil gjøre oss i stand til å gjøre dette. Så når vi kommer til begynne å jobbe med SQL, vi først må ha en database for å jobbe med. Opprette en database noe du sannsynligvis vil gjøre i phpMyAdmin, fordi du trenger bare å gjøre det en gang, og syntaksen for å gjøre det er mye mer oversiktlig. Det er mye lettere å gjøre det i et grafisk brukergrensesnitt enn å skrive den ut som en kommando. Kommandoen kan bli litt tungvint. På samme måte skaper en tabell kan få seg en bit tungvint også. Og så ting som å lage en database og skape en tabell, som du er sannsynligvis bare kommer til å gjøre once-- en gang pr bord, en gang per database-- det er greit å gjøre det i et grafisk grensesnitt. I fremgangsmåten ifølge lage et bord, vil du har også å spesifisere alle kolonner som vil være i denne tabellen. Hva slags informasjon trenger du ønsker å lagre i tabellen? Kanskje en brukers navn og fødselsdato, passord, bruker-ID, og ​​kanskje by og stat, ikke sant? Og for hver gang vi ønsker å legge til en bruker til databasen, ønsker vi å få alle seks av disse biter av informasjon. Og vi gjør det ved å legge radene i tabellen. Så vi først opprette en database, Da skaper vi et bord. Som en del av å skape et bord, blir vi bedt om å spesifisere hver kolonne som vi ønsker i denne tabellen. Og da vi begynner å legge informasjonen til databasen og søke i databasen mer generally-- ikke bare legge til, men alt annet vi do-- vi vil være å håndtere med rader av bordet, som er ett brukerens informasjon fra hele settet. Så hver SQL kolonne er i stand holder data fra en bestemt datatype. Så vi liksom eliminert dette Ideen om datatyper i PHP, men de er tilbake her i SQL. Og det er mye av datatyper. Her er bare 20 av dem, men det er ikke engang alle av dem. Så vi har ideer som INTs-- Integers-- vi trolig vite at denne kolonnen kan holde heltall. Og det er variasjoner thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. Kanskje vi ikke alltid trenger fire biter. Kanskje vi trenger åtte bytes, og så vi kan bruke disse variasjoner på heltall å være litt mer plasseffektiv. Vi kan gjøre desimaltall, vi kan gjøre flyttall. Dette er ganske lik. Det er noen forskjeller, og hvis du ville liker å se opp SQL slags guide, du kan se hva svak forskjellene mellom dem. Kanskje vi ønsker å lagre informasjon om dato og klokkeslett. Kanskje vi holder styr på når brukeren sluttet seg til vår hjemmeside, og så kanskje vi ønsker å ha en kolonne som er en dato tid eller et tidsstempel som indikerer når brukeren faktisk meldt seg. Vi kan gjøre geometrier og linestrings. Dette er faktisk ganske kult. Vi kunne kartlegge en geografisk område ved hjelp GIS-koordinater for å plotte ut et område. Så kan faktisk lagre den slags av informasjon i et SQL-kolonne. TEKST er bare gigantiske blobs av tekst, kanskje. Enums er like interessant. De faktisk eksisterer i C. Vi gjør ikke snakke om dem fordi de ikke er veldig ofte brukt, minst CS50. Men det er en nummerert datatype, som er i stand til å holde begrensede verdier. Et virkelig godt eksempel her vil være for å skape en enum hvor syv Mulige verdier er søndag, mandag, Tirsdag, onsdag, torsdag, fredag, Lørdag, ikke sant? Den datatypen dag Uke ikke eksisterer, men vi kan skape en nummerert datatype slik at den kolonnen kan bare noensinne holde en av de syv mulige verdier. Vi har listet opp alle av de mulige verdiene. Da har vi CHAR og VARCHAR, og jeg har farge disse grønn fordi vi er faktisk kommer til å ta en ekstra å snakke om forskjellen mellom disse to tingene. Så CHAR, i motsetning til C hvor CHAR var en enkelt karakter, i SQL et CHAR refererer til en fast lengde streng. Og når vi lage dette kolonne, vi faktisk kan angi lengden av strengen. Så i dette eksempelet, vi kan si CHAR (10). Det betyr at hvert element i denne kolonnen vil bestå av 10 byte med informasjon. Ikke mer, ikke mindre. Så hvis vi prøver og satt i en 15 bit eller 15 tegn element eller verdi i denne kolonnen, vi får bare de første 10. Hvis vi setter i de to tegn lang verdi, vi kommer til å ha to tegn, og deretter åtte null biter. Vi vil aldri være mer effektivt enn det. En VARCHAR er typen som våre forestillinger om en streng at vi er kjent med fra C eller fra PHP. Det er en variabel lengde streng. Og når du oppretter denne kolonnen, du bare spesifisere alle mulige lengder. Så kanskje 99, eller allment 255. Det ville være den maksimale lengden. Og så hvis vi lagret 15 tegnstreng, vi ville bruke 15 bytes, kanskje 16 byte for null terminator. Hvis vi lagret en tre-tegnstreng, vi ville bruke tre eller fire byte. Men vi ville ikke bruke hele 99. Så hvorfor skulle vi ha begge deler? Vel, hvis vi trenger å finne ut hvordan lenge noe er med en VARCHAR, vi må slags iterere over det akkurat som vi gjorde i C og finne ut hvor det stopper. Mens hvis vi vet at alt i denne kolonnen er 10 bytes, kanskje vi vet at informasjonen kan vi hoppe 10 byte, 10 bytes, 10 bytes, 10 bytes, og alltid finne begynnelsen av strengen. Så vi kan ha noen kastet plass med en røye, men kanskje det er en trade off av å ha bedre hastighet navigere databasen. Men kanskje vi vil ha den fleksibiliteten til en VARCHAR i stedet for having-- Hvis vår CHAR var 255, men de fleste av våre brukere var bare å legge inn tre eller fire byte verdt av informasjon eller tre eller fire tegn igjen av informasjon. Men noen brukere brukte hele 255, kanskje VARCHAR ville være mer hensiktsmessig der. Det er liksom en trade off, og vanligvis for det formål å CS50, du trenger ikke å bekymre deg for mye om om du bruker en CHAR eller VARCHAR. Men i den virkelige verden, disse tingene gjør saken fordi alle disse kolonnene ta opp fysisk plass. Og fysisk plass, i virkelige verden, kommer på en premie. Så en annen vurdering når du bygger et bord er å velge en kolonne for å være det som kalles en primærnøkkel. Og en primærnøkkel er en kolonne hvor hver verdi er unik. Og det betyr at du enkelt kan plukke ut en enkelt rad bare ved å se på primærnøkkelen for den raden. Så for eksempel, du generelt, med brukere, ønsker ikke to brukere som har samme bruker-ID-nummer. Og så kanskje du har massevis av informasjon, og kanskje to brukere kan har samme name-- du har John Smith og John Smith. Det er ikke nødvendigvis et problem, fordi det er flere folk i verden som heter John Smith. Men vi har bare én bruker-ID-nummer 10, en bruker-ID nummer 11, 12, 13. Vi har to brukere med det samme nummer, og så kanskje bruker ID-numre ville være en god primærnøkkel. Vi har ikke noe dobbeltarbeid, og vi kan nå entydig identifisere hver enkelt rad bare ved å se på den kolonnen. Velge primærnøkler kan faktisk foreta ytterligere tabelloperasjoner mye enklere fordi du kan utnytte det faktum at enkelte rader vil være unik, eller en viss kolonne av databasen eller tabell vil være unik for å plukke ut bestemte rader. Du kan også ha en felles primær nøkkel, som du kan finne anledning å bruke, som er bare en kombinasjon av to kolonnene er garantert å være unik. Så kanskje du har en kolonne som er As og Bs, en kolonne som er en, to, og tre, men du vil bare noensinne ha en enkelt A1, en enkelt A2, og så videre og så videre. Men du kan ha en B2, en C2, eller en A1, A2, A3, A4. Så du kan ha flere As, multippel B, flere seg, flere toere, men du kan bare trenger en enkelt A1, B2, C3, og så videre. Så som jeg sa, er SQL en programmeringsspråk, men det har en ganske begrenset ordforråd. Det er ikke helt like ekspansiv som C og PHP og andre språk at vi snakker i kurset. Det er mer ordrik en språk enn hva vi er kommer til å snakke om i denne video, fordi i denne videoen vi kommer til å snakke om fire operasjoner som vi kan utføre på et bord. Det er mer enn dette. Vi kan gjøre mer enn dette, men for vårt formål vi generelt skal bruke Bare fire operations-- innsats, velge, oppdatere og slette. Og du kan sikkert intuitivt gjette hva alle disse fire tingene gjør. Men vi vil gå inn i en litt detalj på hver enkelt. Så for anvendelsen av denne video, la oss anta vi har de følgende to tabeller i en enkelt database. Vi har en tabell som heter Brukere som har fire columns-- ID-nummer, brukernavn, passord, og fullt navn. Og vi har en annen bord i samme database kalt Moms som bare lagrer informasjon om et brukernavn og en mor. Så for alle eksempler i denne videoen, vil vi skal bruke denne databasen og påfølgende oppdateringer til den. Så la oss si at vi ønsker å legge til informasjon i en tabell. Det er det innsatsen operasjonen gjør. I å forklare alle disse kommandoene, jeg kommer for å gi deg en generell skjelett å bruke. Fordi utgangspunktet, spørringene skal se ganske lik, vi bare kommer til å være i endring litt forskjellige biter av informasjon å gjøre forskjellige ting med tabellen. Så for INSERT, skjelettet ser slags som dette. Vi ønsker å sette inn en bestemt tabell. Så har vi en åpen parentes og en liste over kolonner at vi ønsker å sette verdier inn. Nære parentes, den følgende verdier, og deretter igjen, lister vi ut verdiene vi ønsker å sette i tabellen. Slik at et eksempel på denne være følgende. Jeg ønsker å sette inn i tabellen Brukerne følgende columns-- brukernavn, passord, og fullt navn. Så en ny rad hvor jeg setter i de tre kolonner og vi er kommer til å sette i verdiene Newman, USMAIL, og Newman. Så i dette tilfellet, er jeg sette små bokstaver Newman inn brukernavn kolonne, passordet USMAIL, og fullt navn hovedstaden N Newman inn fullt navn kolonnen. Så her er hva databasen så ut før. Her er hva brukerne tabellen på top så ut før vi gjorde dette. Etter at vi utfører denne spørring, får vi dette. Vi har lagt til en ny rad i tabellen. Men legg merke til en ting at jeg ikke spesifisere, men noe jeg har en verdi for, som er denne 12 her. Jeg sa ikke at jeg ønsket å sette ID-nummer i det. Jeg ønsket å sette brukernavn, passord, fullt navn. Og jeg gjorde det, er det helt greit. Men jeg fikk også denne 12. Hvorfor fikk jeg denne 12? Vel, det viser seg at når du definerer en kolonne som kommer til å være din primærnøkkel, som vanligvis er, som jeg sa, et ID-nummer. Det er ikke alltid nødvendigvis kommer til å være et ID-nummer, men det er vanligvis en god idé å være en slags heltall. Du har et alternativ i phpMyAdmin når du oppretter databasen eller tabellen for å sette det kolonne som auto inkrementeringen. Som er en veldig god idé når du arbeider med en primærnøkkel, fordi du vil at hver verdi i den kolonnen å være unik. Og hvis du har glemt å spesifisere det for mer enn én person, du har nå en situasjon hvor at kolonnen er ikke lenger unik. Du har to blanks, så du kan ikke lenger identifiserer en column-- eller du kan ikke lenger entydig identifisere en rad basert på den kolonnen. Den har mistet all sin verdi som primærnøkkel. Og så tilsynelatende hva jeg har gjort her er konfigurert bruker-ID Kolonnen til auto tilvekst slik at hver gang jeg legge til informasjon i tabellen, det vil automatisk gi meg en verdi for primærnøkkelen. Så jeg kan aldri glemme å gjøre det fordi databasen vil gjøre det for meg. Så det er litt fint. Og så det er derfor vi får 12 i det, fordi jeg har at kolonnen opp til auto tilvekst innstilt. Hvis jeg har lagt noen andre det ville være 13, hvis jeg har lagt noen andre det ville være 14, og så videre. Så la oss bare gjøre én mer innsetting. Vi skal sette inn i moms bordet, i Spesielt brukernavn og mor kolonne, verdiene Kramer og Babs Kramer. Og så hadde vi dette før. Etter at vi utfører det SQL-spørring, har vi dette. Vi har lagt til Kramer og Babs Kramer til moms bordet. Så det er å sette inn. SELECT er det vi bruker til å trekke ut informasjon fra bordet. Så dette er hvordan vi får informasjon ut av databasen. Og så velge kommandoer kommer til å være svært ofte brukt i programmering. Den generelle framework-- den Generelt skjelett ser slik ut. Velg et sett av kolonner fra et bord, og deretter eventuelt du kan angi en condition-- eller det vi vanligvis kaller et predikat, er vanligvis betegnelsen vi bruker i SQL. Men det er i utgangspunktet hva bestemte rader du ønsker å få. Hvis du vil, i stedet for å få alt, begrense det ned, dette er hvor du vil gjøre det. Og så eventuelt kan du også bestilling av en bestemt kolonne. Så kanskje du ønsker å ha ting sortert alfabetisk basert på en kolonne eller alfabetisk basert på en annen. Igjen, WHERE og ORDER BY er valgfrie. Men de vil trolig være useful-- spesielt HVOR vil være nyttig å innskrenke slik at du ikke får hele databasen tilbake og må behandle den, får du bare bitene av det som du bryr deg om. Så for eksempel, kanskje jeg vil velge ID-nummer og fullt navn fra brukerne. Så hva kan dette se ut? Så her er min brukere bord. Jeg vil velge idnum og fullt navn fra brukerne. Hva jeg kommer til å få? Jeg kommer til å få dette. Jeg gjorde ikke begrense det ned, så jeg er å få ID-nummer for hver rad og jeg får den fulle navn fra hver rad. OK. Hva om jeg ønsker å velge passord fra brukerne WHERE-- så nå Jeg legger til en tilstand, en predicate-- hvor idnum er mindre enn 12. Så her er min database på nytt, mitt brukere tabell toppen. Hva jeg kommer til å få hvis jeg ønsker å Velg denne informasjonen, passord, hvor bruker-ID eller idnum er mindre enn 12? Jeg kommer til å få dette informasjon tilbake, ikke sant? Det hender at idnum er 10, mindre enn 12, ID nummer 11 mindre enn 12. Jeg får passordet for de radene. Det er det jeg ba om. Hva med dette? Hva om jeg ønsker å velge stjerne fra moms bordet der brukernavn er lik Jerry? OK, er den spesielle velger stjerne slags wild card såkalte som vi bruker for å få alt. Så de sier velg brukernavn komma mor, som skjedde til å være den eneste to kolonner av denne tabellen, Jeg kan bare velge stjerne og få alt hvor brukernavnet er lik Jerry. Og så det er hva jeg ville få hvis jeg gjorde det aktuelle søket. Nå, databaser er stor fordi de tillater oss å organisere informasjonen kanskje litt mer effektivt enn vi ellers ville. Vi trenger ikke nødvendigvis å lagre hver relevant opplysning om en bruker i den samme tabellen. Vi hadde to bord der. Vi trenger å lagre alles mors navn, og kanskje har vi ikke personnummer nummer, har vi deres fødselsdato. Som ikke alltid trenger til å være i den samme tabell. Så lenge vi kan definere relasjoner mellom tables-- og det er der det relasjonelle database sikt slags kommer inn play-- så lenge vi kan definere relasjoner mellom bordene, vi kan liksom compartmentalize eller abstrakte ting en vei, hvor vi bare har veldig viktig informasjon vi bryr oss om i brukerens tabellen. Og så har vi hjelpeinformasjon eller ekstra informasjon i andre tabeller at vi kan koble tilbake til hoved brukere bord på en bestemt måte. Så her har vi disse to tabellene, men det er en sammenheng mellom dem, høyre? Det virker som brukernavn kan være noe som finnes i vanlig mellom disse to forskjellige tabeller. Så hva om vi nå har en situasjon hvor vi ønsker å få til en bruker fullt navn fra brukerens bordet, og morens navn fra mor bordet? Vi har ikke en måte å komme det som det står, ikke sant? Det finnes ingen enkel tabell som inneholder både fullt navn og mors navn. Vi har ikke den muligheten fra det vi har sett så langt. Og så må vi innføre ideen om en BLI. Og tiltrer er trolig den mest complex-- det er egentlig mest kompleks operasjon vi kommer til å snakke om i videoen. De er litt komplisert, men når du først får taket på det, de er faktisk ikke så ille. Det er bare et spesialtilfelle av en SELECT. Vi kommer til å velge et sett med kolonner fra en tabell å bli med i en andre tabell på noen predikat. I dette tilfellet tenker på det liker dette-- tabell en er en sirkel over her, Tabellen to er en annen sirkel over her. Og at predikatet del i midten, er det liksom som om du tror omtrent som et Venn-diagram, hva har de til felles? Vi ønsker å knytte disse to tabellene basert på hva de har til felles og skape denne hypotetiske tabellen som er en sammenslåing av de to sammen. Så vi får se dette i et eksempel og kanskje det vil hjelpe klare det opp litt. Så kanskje du ønsker å velge user.fullname og moms.mother fra brukere som kobler i moms bord i enhver situasjon hvor brukernavnet kolonne er den samme mellom dem. Og dette er en ny syntaks her, denne brukeren. og moms .. Hvis jeg gjør flere tabeller sammen, kan jeg angi en tabell. Jeg kan skille spesielt på som på helt nederst der. Jeg kan skille brukernavn kolonne i tabellen brukere fra brukernavnet kolonnen i moms bord, som er otherwise-- hvis vi bare sa brukernavn lik brukernavn, som ikke virkelig bety noe. Vi ønsker å gjøre det der de passer. Så jeg kan spesifisere bordet og Kolonnen navn i tilfelle av en situasjon der det ville være uklart hva jeg snakker om. Så det er alt jeg gjør det er jeg sa denne kolonnen fra denne tabellen, og å være veldig eksplisitt. Så igjen, jeg har valgt fullt navn og morens navn fra brukere tabellen koblet sammen med moms bord i enhver situasjon der de deler som column-- de deler som brukernavn forestillingen. Så her er tabellene vi hadde før. Dette er staten vår database som det finnes akkurat nå. Informasjonen vi trekke ut er dette til å begynne med. Dette er den nye tabellen vi kommer for å lage kombinere disse sammen. Og legg merke til vi er ikke fremheve Newmans rad i brukerens bord, og vi er ikke fremheve Kramers rad i moms tabellen fordi ingen av dem eksisterer i både sets-- i begge tabellene. Den eneste informasjonen som er i vanlig mellom dem er Jerry er i begge tabellene og gcostanza er i begge tabellene. Og så når vi gjør SQL BLI, hva vi get-- og vi gjør faktisk få dette. Det er liksom en midlertidig variabel. Det er som en hypotetisk Sammenslåingen av de to tabellene. Vi har faktisk få noe som dette, hvor Vi har slått sammen bordene på informasjon som de har til felles. Så merker at users.username og moms.username kolonne, det er akkurat det samme. Det var den informasjonen som var konsistent fra brukerne bord og moms tabellen. Og så har vi slått sammen dem sammen. Vi forkastet Kramer fordi han ikke eksisterer i tabellen brukere, og vi forkastet Newman, fordi han ikke eksisterte i moms tabellen. Så dette er hypotetisk fusjon bruker BLI drift av SELECT. Og da vi var på jakt etter den brukerens fulle navn og brukerens mor, og så dette er informasjon som vi ville få fra den generelle søket at vi har gjort med SELECT. Så vi sluttet bordene sammen og vi ekstrahert disse to kolonner og så det er hva vi ville få. Men SQL blir en slags komplisert. Du vil sannsynligvis ikke gjøre dem for mye, men bare har noen ide om skjelettet som du kan bruke til å slå sammen to tabeller sammen hvis du måtte. De to siste er en litt enklere jeg lover. Så oppdatering, kan vi bruke UPDATE for å endre informasjon i et bord. Det generelle formatet er UPDATE noen tabellen, angi noen kolonne til en viss verdi HVOR noen predikat er fornøyd. Så for eksempel, kan vi ønsker å oppdatere brukerne tabellen og angi passordet til yada yada, hvor ID-nummeret er 10. Så i dette tilfellet, er vi oppdatering av brukere tabellen. ID-nummeret er ti for at første rad der, og vi ønsker å oppdatere passord for å yada yada. Og så det er hva som ville skje. Det er ganske enkelt, ikke sant? Det er bare en veldig enkel modifikasjon av tabellen. SLETT blir operasjonen vi pleide å fjerne informasjon fra en tabell. DELETE FROM tabell WHERE noen predikat er fornøyd. Vi ønsker å slette fra Brukerne bord for eksempel hvor brukernavnet er Newman. Du kan sikkert gjette hva som kommer til skje her etter at vi henrette at SQL spørring, er Newman gått fra bordet. Så alle disse operasjonene, som jeg har sagt, er veldig lett å gjøre i phpMyAdmin. Det er et meget brukervennlig grensesnitt. Men det krever manuell innsats. Vi ønsker ikke å ansette manuell innsats. Vi ønsker at våre programmer til gjøre dette for oss, ikke sant? Så vi vil kanskje gjøre dette programmatisk. Vi ønsker å innlemme SQL og har noe annet å gjøre dette for oss. Men hva har vi sett som gjør at oss å programma gjøre noe? Vi har sett PHP, ikke sant? Det introduserer noen dynamikk inn i våre programmer. Og så heldigvis, SQL og PHP spiller veldig fint sammen. Det er en funksjon i PHP kalt spørring, som kan brukes. Og du kan passere som parameter eller argumentet til å spørre en SQL-spørring som du ønsker å utføre. Og PHP vil gjøre det på dine vegne. Så etter at du har koblet til databasen med PHP, det er to primærvalg du gjør dette. Det er noe som heter MySQLi og noe som kalles PUD. Vi vil ikke gå inn i en stor Mengden detalj der. I CS50 bruker vi PUD. Etter at du har koblet til databasen, du Deretter kan du gjøre spørringer i databasen ved å sende spørringene som argumenter til PHP funksjoner. Og når du gjør det, lagrer du den resultatsett i en assosiativ array. Og vi vet hvordan de skal jobbe med assosiative arrays i PHP. Så jeg kan si noe som dette-- $ results-- dette er i PHP-- lik spørring. Og deretter innsiden av spørring funksjon som argument at jeg har bestått å spørre som ser ut som SQL. Og faktisk det er SQL. Det er søkestrengen som jeg ville liker å kjøre på min database. Og så i rødt, er dette PHP. Dette er SQL at jeg er integrere i PHP ved å gjøre det argumentet til søket funksjonen. Jeg vil velge fullname fra brukere der ID-nummer tilsvarer 10. Og så kanskje etter at jeg har gjort det, Jeg kan si noe sånt som dette. Jeg ønsker å skrive ut meldings Takk for å logge deg inn. Og jeg vil ha det interpolate-- jeg vil ha å interpolere $ resultater fullt navn. Og så det er hvordan jeg jobber med det assosiativ array at jeg kom tilbake. $ resultater fullt navn ville utgangspunktet ende opp med å skrive ut, takk for å logge inn, Jerry Seinfeld. Det var fullt navn hvor idnum lik 10. Og så alt jeg gjør er jeg now-- jeg lagret min spørring, resultatene av spørringen og resulterer i en assosiativ array, og fullt navn er navnet på kolonnen jeg fikk for. Så det er min nøkkel til resultatene assosiativ array som jeg vil. Så takk for å logge inn, $ resultater, fullt navn vil skrive ut, vil holde midt i mellom de krøllete bukseseler, Jerry Seinfeld. Og jeg liker å skrive ut meldingen Takk for å logge på Jerry Seinfeld. Nå, vi sannsynligvis ikke vil vanskelig kode sånt i, ikke sant? Vi vil kanskje gjøre noe sånt print f, hvor vi kan erstatte og kanskje samle annen informasjon, eller kanskje har spørringen prosessen forskjellig informasjon. Og så spørring, har spørringen funksjon denne oppfatningen av typen erstatninger svært lik for å skrive ut f prosent s og prosent c, er spørsmålstegn. Og vi kan bruke spørsmål merker veldig analogt å skrive ut f for å erstatte variabler. Så kanskje din bruker logget inn tidligere, og du lagret deres bruker-ID-nummer i $ _SESSION av PHP super globalt i nøkkelen ID. Så kanskje etter at de logget inn, du setter $ _SESSION ID er lik 10, ekstrapolering fra eksempelet vi bare så en andre siden. Og så når vi faktisk utfører Dette søket resultatene nå, det ville koble til 10, eller hva den $ _SESSION ID verdi. Og slik som tillater oss å være litt mer dynamisk. Vi er ikke vanskelig koding ting i lenger. Vi lagrer informasjon et sted og deretter Vi kan bruke denne informasjonen på nytt for å slags generalisere hva vi ønsker å gjøre, og bare plug-in og endring oppførselen til vår side basert på hva brukeren ID-nummer faktisk er etter at de har logget inn. Det er også mulig, men at resultatene satt kan bestå av flere rader. I så fall, har du en rekke arrays-- en rekke assosiative arrays. Og du trenger bare å iterere gjennom den. Og vi vet hvordan de skal reagere gjennom en array i PHP, ikke sant? Så her er trolig den mest komplekse ting vi har sett så langt. Det faktisk integrerer tre språk sammen. Her i rødt, er dette litt HTML. Jeg tydeligvis starting-- dette er en bit med noen HTML som jeg har. Jeg begynner et nytt avsnitt som sier de moms av TV Seinfeld. Og deretter umiddelbart etterpå Jeg begynner et bord. Og så etter det, jeg har litt PHP, ikke sant? Jeg har alt dette PHP-kode i det. Jeg tilsynelatende kommer lage en spørring. Og for å gjøre spørringen, kommer jeg til å skal bruke SELECT mødre Fra moms. Så dette er getting-- dette er SQL. Så den blå er SQL. Den røde vi så et sekund siden var HTML. Og den grønne her er PHP. Så jeg gjør en spørring til min database, er jeg velge alle mødre i moms tabellen. Ikke bare begrense det ned til bestemte rad, jeg ber for dem alle. Så sjekker jeg om resultatet er ikke lik lik falsk. Dette er bare min måte å sjekke sort av hvis resultatene ikke er lik null, at vi vil se c for eksempel. I utgangspunktet er dette bare kontrollerer sikker på at det faktisk fikk data tilbake. Fordi jeg ikke ønsker å starte utskriften ut data hvis jeg ikke får noen data. Da for hver resultater som et resultat foreach syntaks fra PHP, alt jeg gjør skriver ut $ resultat mødre. Og så jeg kommer til å få et sett av alle mødrene til each-- det er en rekke assosiativ arrays-- og jeg skriver ut hver og en som en egen rad i en tabell. Og det er egentlig ganske mye alt som skal til. Jeg vet det er en liten bit skjer her i dette siste eksempelet med matriser av arrays-- matriser av assosiative arrays. Men det virkelig bare koke ned i SQL til å lage en spørring, vanligvis velge etter at vi allerede har legge informasjon inn i tabellen, og så bare trekke den ut. Og dette er vi ville trekke den ut i denne saken. Vi vil trekke ut alle de individuelle mødre fra moms tabellen. Vi fikk et helt sett av dem, og vi ønsker å iterere gjennom og skrive ut hver. Så igjen, er dette trolig den mest kompliserte eksempel vi har sett, fordi vi blande tre forskjellige språk sammen, ikke sant? Igjen har vi HTML her i rødt, blandet med litt SQL her i blått, blandet med litt PHP i grønt. Men alle disse spiller pent sammen, er det bare et spørsmål om å utvikle gode vaner, slik at du kan få dem til å arbeide sammen slik du ønsker. Og den eneste måten å virkelig gjøre det er å øve, øve, øve. Jeg er Doug Lloyd, dette er CS50.