[Musik spiller] DOUG LLOYD: I vores videoer på webudvikling emner, vi har nævnt begrebet en database, et par gange, ikke? Så en database, du er formentlig bekendt med fra sige ved hjælp af Microsoft Excel eller Google Regneark. Det er virkelig bare en organiseret sæt af tabeller, rækker og kolonner. Og en database er hvor vores hjemmeside butikker information, der er vigtig til vores hjemmeside for at fungere korrekt. Igen, en virkelig almindeligt eksempel her gemmer brugernavne og adgangskoder i en database, så når en bruger logger ind i vores hjemmeside, databasen kan forespørges at se hvis denne bruger eksisterer i databasen. Og hvis de er, at kontrollere, at deres password er korrekt. Og hvis deres password er korrekt, så kan vi give dem, hvad side de er anmoder om. Så er du sikkert, igen, kender med denne idé fra Excel eller Google Regneark. Vi har databaser, tabeller, rækker og kolonner. Og det er virkelig sortere af de grundlæggende sæt af hierarkisk opdeling her. Så her er et Excel-regneark. Og hvis du nogensinde har åbnet dette eller en anden lignende program du ved, at disse her er rows-- 1, 2, 3, 4, 5, 6, 7. Disse er kolonner. Måske hernede, selvom du måske ikke bruge denne funktion forfærdeligt much-- Jeg vil zoome in-- vi har denne idé om et ark. Så måske disse plader, hvis I skifte frem og tilbage, er forskellige tabeller, eksisterer i min database. Og hvis vi fortsætter eksemplet alle den måde, navnet på denne database er Bog 1. Måske har jeg Bog 2 og Bog 3. Så hver Excel-fil er en database, hvert ark er en tabel, og indersiden af ​​hver tabel har jeg denne idé af rækker og kolonner. Så hvordan kan jeg arbejde med denne database? Hvordan får jeg information fra det? Godt der er et sprog kaldet SQL-- som jeg normalt bare kalde Sequel-- og det står for Structured Query Language. Og det er et programmeringssprog, men det er en temmelig begrænset programmering sprog. Det er ikke helt ligesom andre at vi har arbejdet med. Men formålet med denne programmeringssprog er at forespørge en database, til anmode om oplysninger af en database, finde oplysninger i en database, og så videre. Vi har også, i CS50-- og det er en meget fælles platform, kaldes det MySQL. Det er, hvad vi bruger i løbet. Det er en open source platform, der etablerer en såkaldt relationel database-- en database, effektivt. Vi har ikke brug for at få for meget i detaljer om, hvad en relationel database er. Men SQL sproget er meget dygtige til at arbejde med MySQL og andre lignende stilarter relationsdatabaser. Og mange installationer af MySQL komme med noget kaldet phpMyAdmin, som er en grafisk brugergrænseflade interface-- en GUI-- der gør det lidt mere brugervenlig at udføre databaseforespørgsler, fordi databaser ikke bare brugt af avancerede programmører, ikke? Nogle gange er der disse små virksomheder, og de kan ikke tillade sig at leje et team af programmører, men de har stadig brug for at gemme oplysninger i en database. Noget som phpMyAdmin gør det meget nemt for nogen som aldrig programmeret før til afhente og blive fortrolig med, hvordan at arbejde med en database. Problemet er, phpMyAdmin, mens Det er et fantastisk værktøj til at lære om databaser, det er manuel. Du kommer til at have til at logge ind det og udføre kommandoer og typen ting i manuelt. Og som vi kender fra vores eksempel på PHP web programmering, skulle manuelt gøre ting på vores hjemmeside, hvis vi ønsker en dynamisk, aktiv lydhør hjemmeside, måske ikke den bedste fremgangsmåde. Vi vil gerne finde en måde at måske automatisere dette eller anden måde. Og SQL vil give os mulighed for at gøre dette. Så når vi kommer til at begynde at arbejde med SQL, vi først nødt til at have en database at arbejde med. Oprettelse af en database noget du sandsynligvis vil gøre i phpMyAdmin, fordi du kun behøver at gøre det én gang, og syntaks for at gøre det er meget mere ligetil. Det er meget nemmere at gøre det i en grafisk brugergrænseflade end at skrive det ud som en kommando. Kommandoen kan få lidt besværligt. Ligeledes oprette en tabel kan få ganske lidt besværlig som godt. Og så ting som at oprette en database og skabe en tabel, som du er sandsynligvis kun vil gøre once-- én gang pr bord, én gang pr database-- det er OK at gøre det i en grafisk brugerflade. I processen med skabe et bord, vil du også nødt til at angive alle de kolonner, der vil være i tabellen. Hvilken slags oplysninger gør du ønsker at gemme i tabellen? Måske en brugers navn og fødselsdato, adgangskode, bruger-ID-nummer, og måske by og stat, ikke? Og for hver gang vi ønsker at tilføje en bruger til databasen, vi ønsker at få alle seks af disse stykker information. Og det gør vi ved at tilføje rækker til bordet. Så vi først oprette en database, så skaber vi et bord. Som en del af at skabe et bord, bliver vi bedt at specificere hver kolonne, vi gerne i denne tabel. Og derefter som vi begynder at tilføje oplysninger til databasen og søge i databasen mere generally-- ikke blot at tilføje, men alt andet, vi do-- vi vil være der beskæftiger sig med rækker af tabellen, som er en brugerens information fra hele sættet. Så hver SQL kolonne er i stand til holder data for en bestemt datatype. Så vi slags elimineret dette idé om datatyper i PHP, men de er tilbage her i SQL. Og der er en masse af datatyper. Her er kun 20 af dem, men det er ikke engang dem alle. Så vi har ideer som INTs-- Integers-- vi kender sikkert at denne kolonne kan holde heltal. Og der er variationer thereon-- SMALLINT, tinyint, MEDIUMINT, BIGINT. Måske har vi ikke altid behøver fire bid. Måske har vi brug for otte byte, og så vi kan bruge disse variationer på heltal at være en smule mere plads effektiv. Vi kan gøre decimaltal, vi kan gøre flydende komma tal. Disse er temmelig ens. Der er nogle forskelle, og hvis du ville gerne se op SQL slags vejledning, du kan se, hvad den lille forskelle mellem dem. Måske vi ønsker at gemme information om dato og tid. Måske vi holde styr på når brugeren sluttede vores hjemmeside, og så måske vi ønsker at have en kolonne, der er en dato tid eller et tidsstempel, der angiver, når brugeren rent faktisk tilmeldt. Vi kan gøre geometrier og linestrings. Dette er faktisk ret cool. Vi kunne kortlægge en geografisk område ved hjælp af GIS-koordinater til plot ud af et område. Så kan faktisk gemme den slags af oplysninger i en SQL-kolonne. TEKST er blot kæmpe klatter af tekst, måske. Gentagelsestyper er lidt interessant. De faktisk eksisterer i C. Vi gør ikke taler om dem, fordi de ikke er frygtelig almindeligt anvendt, i det mindste CS50. Men det er en nummereret datatype, som er i stand til at holde begrænsede værdier. Et rigtig godt eksempel her ville være at skabe en enum hvor syv Mulige værdier er søndag, mandag, Tirsdag, onsdag, torsdag, fredag, Lørdag, ikke? At datatype Dag Uge ikke eksisterer, men vi kunne skabe en optalt datatype sådan at denne kolonne kun nogensinde kan holde en af ​​de syv mulige værdier. Vi har optalt alle af de mulige værdier. Så har vi CHAR og VARCHAR, og jeg har farve disse grønne fordi vi er faktisk kommer til at tage en anden at tale om forskellen mellem disse to ting. Så CHAR modsætning C, hvor CHAR var et enkelt tegn, i SQL en CHAR refererer til en streng fast længde. Og når vi skaber dette kolonne, vi faktisk kan angive længden af ​​strengen. Så i dette eksempel, vi kan sige CHAR (10). Det betyder, at hver element i denne kolonne vil bestå af 10 bytes af information. Ikke mere, ikke mindre. Så hvis vi forsøger og sat i en 15 bit eller en 15 karakter element eller værdien i denne kolonne, vi kun får de første 10. Hvis vi lægger i de to karakter lange værdi, vi vil have de to tegn, og derefter otte null bid. Vi vil aldrig være mere effektiv end det. En VARCHAR er lidt ligesom vores opfattelse af en streng at vi kender med fra C eller fra PHP. Det er en variabel streng længde. Og når du opretter denne kolonne, skal du bare specificere den maksimale mulige længder. Så måske 99, eller almindeligvis 255. Det ville være den maksimale længde. Og så hvis vi var lagring 15 tegnstreng, vi ville bruge 15 bytes, måske 16 bytes for null terminator. Hvis vi var lagring af en tre tegnstreng, vi ville bruge tre eller fire bytes. Men vi ville ikke bruge den fulde 99. Så hvorfor skulle vi have begge dele? Tja, hvis vi har brug for at regne ud, hvordan lange noget er med en VARCHAR, vi er nødt til slags ITERATE- på tværs af det ligesom vi gjorde i C og finde ud af hvor det stopper. Hvorimod hvis vi ved, at alt i denne kolonne er 10 bytes, måske vi ved, at information, kan vi hoppe 10 bytes, 10 bytes, 10 bytes, 10 bytes, og altid finde den begyndelsen af ​​strengen. Så vi kan have nogle spildt plads med en CHAR, men måske er der en handel off for at have bedre hastighed i navigering databasen. Men måske vi ønsker fleksibiliteten i et VARCHAR i stedet for having-- Hvis vores CHAR var 255, men de fleste af vores brugere blev kun indlæsning tre eller fire bytes værd af oplysninger eller tre eller fire tegn værd af oplysninger. Men nogle brugere brugte hele 255, måske VARCHAR ville være mere passende der. Det er en slags en afvejning, og generelt med henblik på CS50, du behøver ikke at bekymre dig for meget om uanset om du bruger en CHAR eller VARCHAR. Men i den virkelige verden, disse ting enten noget, fordi alle disse kolonner optager faktiske fysiske rum. Og fysiske rum, i virkelige verden, kommer på en præmie. Så en anden overvejelse når du bygger et bord er at vælge en kolonne til at være hvad der kaldes en primær nøgle. Og en primær nøgle er en kolonne hvor hver enkelt værdi er unik. Og det betyder, at du nemt udvælge en enkelt række blot ved at kigge på den primære nøgle i den pågældende række. Så du for eksempel generelt med brugerne, ønsker ikke to brugere, der har det samme bruger-id-nummer. Og så måske du har masser af oplysninger, og måske to brugere kan har samme name-- du har John Smith og John Smith. Det er ikke nødvendigvis et problem, fordi der er flere personer i verden ved navn John Smith. Men vi har kun én bruger id-nummer 10, en bruger-id nummer 11, 12, 13. Vi har ikke to brugere med det samme antal, og så måske bruger id-numre ville være en god primær nøgle. Vi har ikke nogen overlapning, og vi kan nu entydigt identificere hver enkelt række lige ved at se på denne kolonne. Valg primære nøgler kan faktisk gøre efterfølgende tabel operationer meget lettere, fordi du kan udnytte det faktum, at visse rækker vil være unikke eller en bestemt kolonne af din database eller bord vil være unik at gå af bestemte rækker. Du kan også have en fælles primær nøgle, som du kan finde lejlighed at bruge, som er blot en kombination af to kolonner, er garanteret at være unik. Så måske du har en kolonne, der er så og Bs, én kolonne, der er en, to, og tre, men du vil altid kun have en enkelt A1, en enkelt A2, og så videre og så videre. Men du måske har en B2, en C2, eller A1, A2, A3, A4. Så du kan have flere Som, flere Bs, flere dem, flere toere, men du kan altid kun have en single A1, B2, C3, og så videre. Så som jeg sagde, SQL er en programmeringssprog, men det har en temmelig begrænset ordforråd. Det er ikke helt så ekspansiv som C og PHP og andre sprog at vi taler i løbet. Det er mere detaljeret et sprog, end hvad vi er vil tale om i denne video, fordi i denne video vi kommer til at tale om fire operationer, som vi kan udføre på et bord. Der er mere end dette. Vi kan gøre mere end dette, men til vores formål, vi generelt skal bruge blot fire operations-- indsats, Vælg, opdatere og slette. Og du kan sikkert intuitivt gætte hvad alle fire af disse ting gør. Men vi vil gå ind i en lidt detaljer om hver enkelt. Så for anvendelsen af ​​denne video, lad os antage Vi har følgende to tabeller i en enkelt database. Vi har en tabel kaldet Brugere, der har fire columns-- id-nummer, brugernavn, adgangskode og fulde navn. Og vi har en anden tabel i den samme database kaldet Moms, der bare gemmer oplysninger om et brugernavn og en mor. Så for alle eksempler i denne video, vi får bruge denne database og efterfølgende opdateringer til det. Så lad os sige, vi ønsker at tilføj oplysninger til en tabel. Det er, hvad indsatsen operationen gør. Forklare alle disse kommandoer, jeg skal at give dig en generel skelet til at bruge. Fordi Grundlæggende forespørgsler går se temmelig ens, vi bare kommer til at være under forandring lidt forskellige stykker information at gøre forskellige ting med bordet. Så for INSERT, skelettet ser lidt ligesom dette. Vi ønsker at indsætte i en bestemt tabel. Så har vi en åben parentes og en liste over kolonner at vi ønsker at sætte værdier ind. Luk parenteser, den følgende værdier, og derefter igen, vi liste ud de værdier Vi ønsker at sætte i tabellen. Så et eksempel på denne vil være følgende. Jeg ønsker at indsætte i tabellen brugere følgende columns-- brugernavn, adgangskode og fullname. Så en ny række, hvor jeg lægger i disse tre kolonner, og vi er kommer til at sætte i værdierne Newman, USMAIL, og Newman. Så i dette tilfælde, er jeg sætte små bogstaver Newman i brugernavn kolonnen adgangskoden USMAIL, og det fulde navn hovedstad N Newman i fullname kolonnen. Så her er hvad databasen lignede før. Her er, hvad brugerne tabellen på top lignede før vi gjorde dette. Efter at vi udføre denne forespørgsel, vi får dette. Vi har tilføjet en ny række i tabellen. Men bemærke dette ene ting at jeg ikke angive, men på en måde jeg har fået en værdi for, som er denne 12 lige her. Jeg sagde ikke, jeg ville sætte ID-nummer derinde. Jeg ønskede at sætte brugernavn, adgangskode, fullname. Og jeg gjorde det, det er fint. Men jeg fik også denne 12. Hvorfor fik jeg denne 12? Tja, det viser sig, at når du definerer en kolonne, der vil være din primær nøgle, hvilket er normalt, som jeg sagde, et ID-nummer. Det er ikke altid nødvendigvis kommer til at være et ID-nummer, men det er som regel en god ide at være en slags heltalsværdi. Du har en mulighed i phpMyAdmin når du opretter din database eller dit bord til at indstille, at kolonne som auto inkrementeringen. Som er en virkelig god idé, når du arbejder med en primær nøgle, fordi du vil have hver værdi i kolonnen for at være unik. Og hvis du glemmer at angive det for mere end én person, du nu har en situation, hvor denne kolonne er ikke længere enestående. Du har to blanke, så du kan ikke længere entydigt at identificere et column-- eller du kan ikke længere entydigt identificere en række baseret på denne kolonne. Det har mistet alle sine værdi som en primær nøgle. Og så tilsyneladende, hvad jeg har gjort her er konfigureret bruger-ID kolonne til auto tilvækst, således at hver gang jeg tilføjer oplysninger til bordet, Det vil automatisk give mig en værdi for den primære nøgle. Så jeg kan aldrig glemme at gøre det, fordi databasen vil gøre det for mig. Så det er lidt rart. Og så det er derfor vi får 12 derinde, fordi jeg har sætte kolonnen op til auto tilvækst. Hvis jeg har tilføjet en anden det ville være 13, hvis jeg tilføjede en anden ville det være 14, og så videre. Så lad os bare gøre endnu et indsættelse. Vi vil indsætte i moms tabellen, i Især det brugernavn og mor kolonne, værdierne kramer og Babs Kramer. Og så havde vi dette før. Efter at vi udfører, at SQL-forespørgsel, vi har denne. Vi har tilføjet Kramer og Babs Kramer til mødre tabellen. Så der er indsættelse. SELECT er det, vi bruger til at udtrække information fra tabellen. Så dette er, hvordan vi får oplysninger ud af databasen. Og så vælge kommandoer vil være meget ofte i programmering. Den generelle framework-- den generel skelet ser sådan ud. Vælger et sæt kolonner fra en tabel, og derefter eventuelt du kan angive en Stand- eller hvad vi kalder typisk et prædikat, er normalt udtrykket vi bruger i SQL. Men det er, hvad der dybest set særlige rækker du ønsker at få. Hvis du vil, i stedet for at få alt, indsnævre den ned, det er her, du ville gøre det. Og så eventuelt, kan du også orden af ​​en bestemt kolonne. Så måske du ønsker at have ting sorteres alfabetisk baseret på en kolonne eller alfabetisk baseret på en anden. Igen, HVOR og ORDER BY er valgfrie. Men de vil sandsynligvis være useful-- især Hvor vil være nyttigt at indsnævre, så du ikke gør få hele din database tilbage og nødt til at behandle det, du bare få stykker af det, at du holder af. Så for eksempel, kan jeg ønsker at vælge ID-nummer og fullname fra brugerne. Så hvad kan dette se ud? Så her er min brugere bord. Jeg vil vælge idnum og fullname fra brugerne. Hvad skal jeg købe? Jeg har tænkt mig at få dette. Jeg har ikke indsnævre den ned, så jeg er få ID-nummer for hver række og jeg får den fulde navn fra hver række. OK. Hvad hvis jeg ønsker at vælge adgangskode fra brugerne WHERE-- så nu Jeg tilføjer en tilstand, en predicate-- hvor idnum er mindre end 12. Så her er min database igen, mine brugere bord toppen. Hvad skal jeg få, hvis jeg ønsker at vælge disse oplysninger, password, hvor bruger-id eller idnum er mindre end 12? Jeg har tænkt mig at få denne oplysninger tilbage, ikke? Det sker, at idnum er 10, mindre end 12, id-nummer 11 mindre end 12. Jeg får adgangskoden til disse rækker. Det er, hvad jeg bad om. Hvad med det her? Hvad hvis jeg ønsker at vælge stjerne fra moms bordet, hvor brugernavn er lig med Jerry? OK, vælg stjerne er den særlige slags wild card såkaldte som vi bruger til at få alt. Så de siger at vælge brugernavn komma mor, som tilfældigvis den eneste to kolonner af denne tabel, Jeg kan bare vælge stjerne og få alt hvor brugernavn er lig Jerry. Og så det er hvad jeg ville få hvis jeg gjorde den pågældende forespørgsel. Nu, databaser er stor, fordi de tillader os til at organisere information måske en smule mere effektivt end vi måske ellers. Vi behøver ikke nødvendigvis at gemme hver relevant oplysning om en bruger i den samme tabel. Vi havde to tabeller der. Vi er nødt til at gemme alles mors navn, og måske har vi ikke den sociale sikring nummer, har vi deres fødselsdato. Det betyder ikke altid brug for at være i den samme tabel. Så længe vi kan definere relationer mellem tables-- og det er her, at relationelle database sigt slags kommer ind play-- så længe vi kan definere relationer mellem tabellerne, Vi kan slags inddeler eller abstrakte ting, en måde, hvor vi kun har virkelig vigtige oplysninger vi interesserer os i brugerens bord. Og så har vi supplerende oplysninger eller ekstra information i andre tabeller at vi kan forbinde tilbage til de vigtigste brugere tabellen på en bestemt måde. Så her vi har disse to tabeller, men der er en sammenhæng mellem dem, højre? Det ser ud som brugernavn kunne være noget der findes i fælles mellem disse to forskellige tabeller. Så hvad nu hvis vi nu har en situation, hvor vi ønsker at få en brugers fulde navn fra brugerens bordet, og deres mors navn fra moderen bordet? Vi har ikke en måde at få at som det er nu, ikke? Der er ingen enkelt tabel, der indeholder både fulde navn og mors navn. Vi har ikke denne mulighed fra hvad vi har set hidtil. Og så vi nødt til at indføre ideen om en JOIN. Og slutter sig er nok den mest complex-- det er virkelig mest komplekse operation vi kommer til at tale om i videoen. De er lidt kompliceret, men når du får hænge af det, de er faktisk ikke så slemt. Det er bare et specialtilfælde af en SELECT. Vi kommer til at vælge et sæt kolonner fra en tabel, sammenføjning i en anden tabel på nogle prædikat. I dette tilfælde, tænker over det gerne denne-- tabel ene er en cirkel herovre, tabel to er en anden cirkel herovre. Og det prædikat del i midten, er det lidt ligesom, hvis du tror om en Venn-diagram, hvilket har de til fælles? Vi ønsker at forbinde disse to tabeller baseret på, hvad de har til fælles og skabe denne hypotetiske tabel der er en fusion af de to sammen. Så vi vil se dette i en eksempel og måske det vil hjælpe rydde det op en lille smule. Så måske du ønsker at vælge USER.FULLNAME og moms.mother fra brugere, slutter i mødre bord i enhver situation hvor brugernavn kolonnen er den samme mellem dem. Og dette er en ny syntaks her, denne bruger. og mødre .. Hvis jeg gør flere tabeller sammen, kan jeg angive et bord. Jeg kan skelne især om at der på i bunden der. Jeg kan skelne brugernavnet kolonne i brugernes tabellen fra brugernavnet kolonne i moms bord, som er otherwise-- hvis vi lige sagt brugernavn lig brugernavn, der ikke rigtig betyder noget. Vi ønsker at gøre det, hvor de passer. Så jeg kan specificere bordet og kolonnenavn i tilfælde af en situation hvor det ville være uklart hvad jeg taler om. Så det er alt jeg gør er der jeg er siger denne kolonne fra denne tabel, og bliver meget eksplicit. Så igen, jeg vælge fulde navn og moderens navn fra brugere tabellen kædet sammen med mødre tabellen i enhver situation hvor de deler, at column-- de deler det brugernavn begreb. Så her er de tabeller, vi havde før. Dette er den tilstand af vores database, som den eksisterer lige nu. De oplysninger, vi udvinder er det til at begynde med. Dette er den nye tabel vi vil at skabe kombinere disse sammen. Og mærke vi ikke fremhæve Newmans række i brugerens tabel, og vi ikke fremhæve Kramers række i moms tabellen fordi hverken den ene findes i både sets-- i begge tabeller. Den eneste information, der er til fælles mellem dem er Jerry er i begge tabeller og gcostanza er i begge tabeller. Og så når vi gør SQL JOIN, hvad vi get-- og vi gør faktisk får dette. Det er en slags midlertidig variabel. Det er ligesom en hypotetisk fusion af de to tabeller. Vi har faktisk få noget som dette, hvor vi har fusioneret sammen tabellerne på oplysninger, som de har til fælles. Så bemærke, at users.username og moms.username søjle, Det er præcis den samme. Det var de oplysninger, som var konsistent fra brugerne tabel og mødre tabellen. Og så vi fusionerede dem sammen. Vi kasseret Kramer, fordi han fandtes ikke i brugertabellen, og vi kasseret Newman, fordi han ikke eksisterer i den moms tabellen. Så dette er den hypotetiske fusion ved hjælp af JOIN driften af ​​SELECT. Og så var vi på udkig efter den brugerens fulde navn og brugerens mor, og så dette er den information, vi ville få fra den samlede forespørgsel at vi lavet med SELECT. Så vi sluttede tabellerne sammen og vi ekstraheret disse to kolonner, og så det er, hvad vi ville få. Men SQL Sammenføjninger en slags kompliceret. Du vil sandsynligvis ikke gøre dem for meget, men bare have en idé om skelettet at man kunne bruge til at flette to tabeller sammen, hvis du havde brug for. De sidste to er en lidt enklere lover jeg. Så opdatere, kan vi bruge UPDATE at ændre information i en tabel. Den generelle format er UPDATE nogle tabel, der er nogle kolonnen til en vis værdi Hvor nogle prædikat er tilfreds. Så for eksempel, kan vi ønsker for at opdatere brugere tabellen og angive adgangskoden til yada yada, hvor ID-nummeret er 10. Så i dette tilfælde, er vi opdatering af brugere tabellen. ID-nummeret er 10 for at første række er, og vi ønsker at opdatere adgangskode til yada yada. Og så det er hvad der ville ske. Det er ret ligetil, ikke? Det er bare en meget simpel ændring af tabellen. DELETE er operationen vi plejede at fjerne oplysninger fra en tabel. DELETE FROM tabel, hvor nogle prædikat er tilfreds. Vi ønsker at slette fra brugere tabellen for eksempel hvor brugernavn er Newman. Du kan sikkert gætte hvad der kommer til ske her efter vi udfører, at SQL forespørgsel, er Newman gået fra bordet. Så alle disse operationer, som jeg har sagt, er meget let at gøre i phpMyAdmin. Det er en meget brugervenlig grænseflade. Men det kræver manuel indsats. Vi ønsker ikke at ansætte manuel indsats. Vi ønsker, at vores programmer til gøre dette for os, ikke? Så vi måske ønsker at gøre dette programmeringsmæssigt. Vi ønsker at indarbejde SQL og har noget andet at gøre dette for os. Men hvad har vi set, der giver mulighed os programmeringsmæssigt gøre noget? Vi har set PHP, ikke? Det indfører nogle dynamik i vores programmer. Og så heldigvis SQL og PHP spiller meget pænt sammen. Der er en funktion i PHP kaldes forespørgsel, som kan anvendes. Og du kan passere som parameter eller argumentet til at forespørge en SQL-forespørgsel, du gerne vil udføre. Og PHP vil gøre det på dine vegne. Så efter du har tilsluttet til din database med PHP, Der er to primærvalg du gør dette. Der er noget kaldet MySQLi og noget, der hedder BOB. Vi vil ikke gå ind i en kæmpe mængde detaljer der. I CS50 bruger vi BOB. Når du har tilsluttet til din database, du kan derefter foretage forespørgsler din database ved at lede forespørgsler som argumenter til PHP funktioner. Og når du gør det, du opbevarer resultatsæt i et associativt array. Og vi ved, hvordan man arbejder med associative arrays i PHP. Så jeg kan sige noget ligesom denne-- $ results-- dette er i PHP-- lig forespørgsel. Og derefter inde i søgefunktion dette argument at jeg passerer at forespørge der ligner SQL. Og i virkeligheden som er SQL. Det er søgestrengen, at jeg ville gerne udføre på min database. Og så i rød, er dette PHP. Det er SQL, at jeg er integreret i PHP ved at gøre det argument forespørgslen funktionen. Jeg vil vælge fullname fra brugere, hvor ID-nummer svarer til 10. Og så måske efter jeg har gjort det, Jeg kan sige noget som dette. Jeg ønsker at udskrive besked Tak for at logge ind. Og jeg vil have det interpolate-- jeg vil at interpolere $ resultater fullname. Og så det er sådan jeg arbejder med at associative array, jeg fik tilbage. $ resultater fullname ville dybest set ender udskrive, tak for at logge ind, Jerry Seinfeld. Det var det fulde navn hvor idnum lig 10. Og så alt jeg gør er jeg nu-- jeg gemt min forespørgsel, resultaterne af min forespørgsel og resulterer i en associativ array, og fullname er navnet på kolonnen jeg fik efter. Så det er min nøgle til resultaterne associative array, som jeg ønsker. Så tak for at logge ind, $ resultater, fullname vil udskrive, vil holde ret i mellem dem, krøllede seler, Jerry Seinfeld. Og jeg vil gerne udskrive meddelelsen Tak for at logge på Jerry Seinfeld. Nu, vi sandsynligvis ikke ønsker at hårdt kode sådan noget i, ikke? Vi vil måske gøre noget som print f, hvor vi kan erstatte og måske indsamle forskellige oplysninger, eller måske har forespørgslen processen forskellige oplysninger. Og så forespørgsel, forespørgslen funktion har dette begreb slags udskiftninger meget lig udskrive f procent s og procent c, er spørgsmålstegn. Og vi kan bruge spørgsmål mærker meget analogt at udskrive f for at erstatte variabler. Så måske din bruger logget ind tidligere, og du har gemt deres bruger-id nummer i $ _SESSION af PHP super globalt i nøgle-ID. Så måske efter at de er logget ind, du indstille $ _SESSION ID er lig 10, ekstrapolere fra eksemplet Vi har lige set en anden siden. Og så når vi faktisk udføre Denne forespørgsel resultaterne nu, det ville tilslutte 10, eller hvad de $ _SESSION ID værdi. Og så tillader os at være lidt mere dynamisk. Vi er ikke hårdt kodning tingene i længere. Vi gemmer oplysninger et eller andet sted og derefter vi kan bruge disse oplysninger igen for at slags generalisere, hvad vi ønsker at gøre, og bare plug-in og forandring adfærd vores side baseret på, hvad brugerens ID-nummer faktisk er efter at de har logget ind. Det er også muligt, selv om, at dine resultater indstillet kan bestå af flere rækker. I hvilket tilfælde, du har en vifte af arrays-- et array af associative arrays. Og du skal bare gentage gennem det. Og vi ved, hvordan man gentage gennem et array i PHP, ikke? Så her er nok den mest komplekse ting, vi har set hidtil. Det faktisk integrerer tre sprog sammen. Her i rød, dette er en HTML. Jeg åbenbart starting-- dette er et uddrag af nogle HTML, som jeg har. Jeg begynder et nyt afsnit, der siger mødre af tv Seinfeld. Og derefter straks bagefter Jeg begynder et bord. Og så efter det, jeg har nogle PHP, ikke? Jeg har alt dette PHP-kode derinde. Jeg tilsyneladende vil gøre en forespørgsel. Og for at gøre forespørgslen, vil jeg være at bruge SELECT mødre FRA moms. Så dette er getting-- dette er SQL. Så den blå er SQL. Den røde oplevede vi en anden siden var HTML. Og den grønne her er PHP. Så jeg gør en forespørgsel til min database, er jeg vælge alle de mødre i moms tabel. Ikke bare indsnævre den ned til bestemte række, jeg beder for dem alle. Så tjek I, hvis resultatet er ikke ligeværdige lig falsk. Dette er blot min måde at kontrollere slags af hvis resultater er ikke lig med nul, at vi ville se c for eksempel. Dybest set er dette bare kontrol for at sikker på, at det faktisk fik data tilbage. Fordi jeg ikke ønsker at starte udskrivningen ud data, hvis jeg ikke fik nogen data. Så for hver resultater som følge af foreach syntaks fra PHP, alt jeg gør udskriver ud $ resultat mødre. Og så jeg har tænkt mig at få et sæt af alle mødre each-- Det er en bred vifte af associativ arrays-- og jeg udskrivning ud hver enkelt som sin egen række i en tabel. Og det er virkelig smuk meget alt der er til det. Jeg ved, der er en lille bit foregår her i dette sidste eksempel med arrays af arrays-- arrays af associative arrays. Men det virkelig bare koge ned i SQL til at gøre en forespørgsel, normalt vælge efter vi har allerede lægge oplysninger i tabellen, og så bare trække det ud. Og det er vi ville trække det i dette særlige tilfælde. Vi vil udtrække alle de enkelte mødre fra mødre tabellen. Vi fik et helt sæt af dem, og vi ønsker at gentage gennem og udskrive hver og en. Så igen, det er nok den mest komplicerede eksempel vi har set, fordi vi blander tre forskellige sprog sammen, ikke? Igen har vi HTML her i rødt, blandet med nogle SQL med blåt, blandet med nogle PHP i grønt. Men alle disse spiller pænt sammen, er det bare et spørgsmål om at udvikle gode vaner, så du kan få dem til at arbejde sammen som du ønsker. Og den eneste måde at virkelig gøre det er at øve, øve, øve. Jeg er Doug Lloyd, det er CS50.