>> [MUSIK SPELA]
DOUG LLOYD: I våra filmer på webbutveckling ämnen
vi har nämnt begreppet en databas ett par gånger, eller hur?
Så en databas du är förmodligen bekant med från
säger att använda Microsoft Excel eller Google Spreadsheets.
Det är egentligen bara en organiserad uppsättning tabeller, rader och kolumner.
>> Och en databas är där vår hemsida butiker
information som är viktig för vår hemsida för att fungera korrekt.
Återigen, ett riktigt vanligt exempel här lagrar användarnamn och lösenord
i en databas, så att när en användare loggar in på vår hemsida,
databasen kan frågas att se om användaren finns i databasen.
Och om de är, kontrollera att deras lösenord är korrekt.
Och om deras lösenord är korrekt, då kan vi ge dem vad sida
de efterfrågar.
>> Så du är förmodligen igen, bekanta med denna idé från Excel eller Google
Kalkylblad.
Vi har databaser, tabeller, rader och kolumner.
Och det är verkligen sorterar den grundläggande uppsättningen
hierarkisk uppdelning här.
Så här är ett Excel-ark.
Och om du någonsin öppnat här eller ett annat liknande program
du vet att dessa är här rows-- 1, 2, 3, 4, 5, 6, 7.
Dessa är kolumner.
>> Kanske här nere, men du kan inte använda den här funktionen fruktansvärt much--
Jag ska in in-- vi har denna idé av ett ark.
Så kanske dessa ark, om Jag växlar fram och tillbaka,
är olika tabeller som existerar i min databas.
Och om vi fortsätter exemplet alla vägen, namnet på denna databas
är Book 1.
Kanske har jag Bok 2 och Bok 3.
Så varje Excelfil är en databas, är varje ark ett bord,
och insidan av varje bord har jag denna idé rader och kolumner.
>> Så hur gör jag arbeta med denna databas?
Hur får jag information från det?
Jo det finns ett språk som kallas SQL-- som jag brukar bara ringa Sequel--
och det står för Structured Query Language.
Och det är ett programmeringsspråk, men det är en ganska begränsad programmerings
språk.
Det är inte riktigt som andra att vi har arbetat med.
Men syftet med detta programmeringsspråk
är att fråga en databas, till be uppgifter av en databas,
information i en databas, och så vidare.
>> Vi har också, i CS50-- och det är en mycket gemensam plattform, det kallas MySQL.
Det är vad vi använder i kursen.
Det är en öppen källkod plattform som upprättar
en så kallad relations database-- en databas, på ett effektivt sätt.
Vi behöver inte få in alltför mycket i detalj
på vad en relationsdatabas är.
Men SQL-språket är mycket skicklig på att arbeta
med MySQL och andra liknande färger relationsdatabaser.
>> Och många installationer av MySQL har något
kallas phpMyAdmin, som är ett grafiskt användargränssnitt
interface-- en GUI-- som gör det lite mer
användarvänlig att exekvera databasfrågor,
eftersom databaser inte bara används av avancerade programmerare, eller hur?
Ibland finns dessa små företag,
och de har inte råd att hyra ett team av programmerare,
men de fortfarande behöver lagra information i en databas.
>> Något som phpMyAdmin gör det mycket lätt för någon
som aldrig programmeras före till plocka upp och bli bekant med hur
att arbeta med en databas.
Problemet är, phpMyAdmin, medan Det är ett fantastiskt verktyg för lärande
om databaser, är det manuell.
Du kommer att behöva logga in den och utföra kommandon och typ
saker manuellt.
>> Och som vi vet från vår exempel på PHP webbprogrammering,
att manuellt behöva göra saker på vår hemsida,
Om vi ​​vill ha en dynamisk, aktiv lyhörd webbplats, kanske inte det bästa tillvägagångssättet.
Vi vill hitta ett sätt att kanske automatisera detta på något sätt.
Och SQL gör det möjligt för oss att göra detta.
Så när vi ska börja arbeta med SQL,
måste vi först ha en databas för att arbeta med.
Skapa en databas något du förmodligen
kommer att göra i phpMyAdmin, eftersom du behöver bara göra det en gång,
och syntaxen för detta är en mycket enklare.
Det är mycket lättare att göra det i ett grafiskt användargränssnitt
än att skriva ut det som ett kommando.
Kommandot kan få lite besvärligt.
På liknande sätt skapar en tabell kan få ganska lite besvärligt också.
Och så saker som att skapa en databas och skapa en tabell, som du är
förmodligen bara kommer att göra once-- en gång per tabell, en gång per database--
det är OK att göra det i ett grafiskt gränssnitt.
Vid förfarandet enligt att skapa en tabell, du
måste också ange alla kolumner som kommer att vara i tabellen.
Vilken typ av information gör du vill spara i tabellen?
Kanske en användares namn och födelsedatum, lösenord, användar-ID, och kanske
stad och stat, eller hur?
>> Och för varje gång vi vill lägga till en användare till databasen, vi vill få alla sex
av dessa bitar av information.
Och vi gör det genom att lägga till tabellen.
Så vi först skapa en databas, då skapar vi en tabell.
Som ett led i att skapa ett bord, vi frågade
ange varje kolumn som Vi vill i denna tabell.
Och sedan när vi börja lägga informationen till databasen
och söka i databasen mer generally-- inte bara lägga till,
men allt annat vi do-- vi kommer att hantera
med raderna i tabellen, som är ett användarens information från hela uppsättningen.
>> Så varje SQL kolumn är i stånd att som endast innehåller data av en viss datatyp.
Så vi slags eliminerat denna idén om datatyper i PHP,
men de är tillbaka här i SQL.
Och det finns en hel del datatyper.
Här är bara 20 av dem, men det är inte ens alla av dem.
Så vi har idéer som INTs-- Integers-- vi vet förmodligen
att den här kolumnen kan hålla heltal.
Och det finns variationer thereon-- SMALLINT, tinyint, MEDIUMINT, bigint.
Kanske har vi inte alltid behöver fyra bites.
Kanske behöver vi åtta byte, och så vi kan använda dessa varianter på heltal
att vara lite mer utrymmeseffektiv.
Vi kan göra decimaltal, vi kan göra flyttal.
Dessa är ganska likartade.
Det finns vissa skillnader, och om du skulle
vilja slå upp SQL sorts guide, du
kan se vad den lilla skillnaderna är mellan dem.
>> Kanske vi vill lagra information om datum och tid.
Vi kanske ska hålla reda på när användaren anslutit sig till vår hemsida,
och så kanske vi vill att ha en kolumn som är
ett datum tid eller en tidsstämpel som indikerar när användaren faktiskt
anmält sig.
Vi kan göra geometrier och linestrings.
Detta är faktiskt ganska coolt.
Vi kunde staka ut en geografiska området med hjälp av
GIS-koordinater för att rita ut ett område.
Så kan faktiskt lagra denna typ av information i en SQL-kolonn.
>> TEXT är bara jätte blobbar text, kanske.
ENUMs är typ av intressant.
De finns faktiskt i C. Vi gör inte prata om dem eftersom de inte är
oerhört vanligt förekommande, åtminstone CS50.
Men det är en uppräknad datatyp som kan hålla begränsade värden.
>> Ett riktigt bra exempel här skulle vara att skapa en enum där sju
Möjliga värden är söndag, måndag, Tisdag, onsdag, torsdag, fredag,
Lördag, eller hur?
Denna datatyp Dag Vecka existerar inte,
men vi skulle kunna skapa en uppräknade datatyp sådan
att denna kolumn alltid bara kan hålla en av dessa sju möjliga värden.
Vi har uppräknade alla av de möjliga värdena.
>> Sedan har vi CHAR och VARCHAR, och jag har färg dessa gröna
eftersom vi faktiskt kommer att ta en andra
att tala om skillnaden mellan dessa två saker.
Så CHAR, till skillnad från C, där CHAR var ett enda tecken,
i SQL en CHAR hänvisar till en längd sträng fast.
Och när vi skapar här kolonn, vi faktiskt
kan ange längden av strängen.
>> Så i detta exempel, vi kan säga CHAR (10).
Det betyder att varje del av den kolumnen
kommer att bestå av 10 bitgrupper av information.
Varken mer eller mindre.
Så om vi försöker och sätta i en 15 bitars eller en 15 teckenelement
eller värdet i den här kolumnen, vi bara få första 10.
Om vi ​​sätter i de två tecken lång värde,
vi kommer att ha två tecken, och sedan åtta null bites.
Vi kommer aldrig att vara effektivare än så.
>> En VARCHAR är ungefär som vår uppfattning av en sträng
att vi är bekant med från C eller från PHP.
Det är en variabel längd sträng.
Och när du skapar den här kolumnen, du bara
ange de högsta möjliga längder.
Så kanske 99, eller allmänt 255.
Det skulle vara den maximala längden.
Och så om vi lagrar 15 teckensträng,
vi skulle använda 15 bytes, kanske 16 byte för null terminator.
Om vi ​​lagra en tre teckensträng,
vi skulle använda tre eller fyra byte.
Men vi skulle inte använda hela 99.
>> Så varför skulle vi ha både och?
Tja, om vi behöver ta reda på hur långa något är med en VARCHAR
vi måste slags iterate över det precis som vi gjorde i C
och räkna ut var det slutar.
Medan om vi vet att allt i denna kolumn är 10 bytes, kanske
vi vet att information kan vi hoppa 10 byte, 10 byte, 10 byte, 10 byte,
och alltid hitta början av strängen.
>> Så vi kan ha en viss oanvänt utrymme med en CHAR,
men kanske det finns en handel off av att ha bättre hastighet
navigera databasen.
Men kanske vi vill att flexibiliteten hos en VARCHAR
istället för having-- Om vår CHAR var 255, men de flesta av våra användare
var bara mata in tre eller fyra byte värde av information eller tre eller fyra
tecken värde av informationen.
>> Men en del användare använde hela 255, kanske
VARCHAR vore lämpligare där.
Det är en slags kompromiss, och i allmänhet i syfte att CS50,
du behöver inte oroa sig alltför mycket om oavsett om du använder en CHAR eller VARCHAR.
Men i den verkliga världen, dessa saker någon roll eftersom alla dessa kolumner
ta upp faktiska fysiskt utrymme.
Och fysiskt utrymme, i verkliga världen, kommer vid en premie.
>> Så en annan ersättning när du bygger ett bord
är att välja en kolumn ska vara vad som kallas en primärnyckel.
Och en primärnyckel är en kolumn där varje enskilt värde är unikt.
Och det betyder att du kan enkelt plocka ut en enda rad bara genom att titta
på primärnyckeln för den raden.
Så till exempel, du i allmänhet, med användare,
vill inte två användare som har samma användar-ID-nummer.
Och så kanske du har massor av information,
och kanske två användare kan har samma name--
du har John Smith och John Smith.
Det är inte nödvändigtvis ett problem, eftersom det finns flera personer
i världen som heter John Smith.
Men vi har bara ett användar-ID nummer 10, en användar-ID nummer 11, 12, 13.
Vi har inte två användare med samma nummer,
och så kanske användar-ID nummer skulle vara en bra primärnyckel.
>> Vi har inte någon dubblering, och vi kan nu unikt
identifiera varenda rad bara genom att titta på den kolumnen.
Välja primärnycklar kan faktiskt göra efterföljande tabelloperationer
en mycket enklare eftersom du kan utnyttja det faktum att vissa rader kommer
vara unik, eller en viss kolumn av databasen eller tabellen
kommer att vara unik för att plocka ut särskilda rader.
>> Du kan också ha en gemensam primär nyckel, där du kan hitta tillfälle
att använda, vilket är bara en kombination av två kolumner som
garanteras vara unikt.
Så kanske du har en kolumn som är lika och B,
en kolumn som är en, två, och tre, men du kommer bara någonsin
har en enda A1, en enda A2, och så vidare och så vidare.
Men du kanske har en B2, en C2, eller en A1, A2, A3, A4.
Så du kan ha flera As, multipel B, flera sådana, flera tvåor,
men du kan alltid bara ha en enda A1, B2, C3, och så vidare.
Så som sagt, är SQL en programmeringsspråk,
men den har en ganska begränsad vokabulär.
Det är inte riktigt lika expansiv som C och PHP och andra språk
att vi talar i kursen.
Det är mer utförlig en språk än vad vi är
kommer att tala om i den här video, eftersom det i den här videon
vi kommer att prata om fyra verksamheter som vi
kan utföra på ett bord.
>> Det finns mer än så.
Vi kan göra mer än så, men för våra ändamål,
vi generellt kommer att använda bara fyra operations-- insatsen,
välj, uppdatera och ta bort.
Och du kan förmodligen intuitivt gissa vad alla dessa fyra saker att göra.
Men vi kommer att gå in i en bit detalj på var och en.
>> Så för tillämpningen av denna video, låt oss anta
vi har följande två tabeller i en enda databas.
Vi har ett bord som heter Användare som har fyra columns-- ID-nummer, användarnamn,
lösenord och fullständiga namn.
Och vi har en andra tabell i samma databas
kallas Moms som bara lagrar information om ett användarnamn och en mor.
Så för alla exempel i den här videon, vi ska
att använda denna databas och efterföljande uppdateringar till det.
Så låt oss säga att vi vill lägga till information i en tabell.
Det är vad insatsoperationen gör.
För att förklara alla dessa kommandon, jag kommer
för att ge dig en allmän skelett att använda.
Eftersom grunden, frågorna går ser ganska lika,
vi bara kommer att förändras lite olika bitar av information
att göra olika saker med tabellen.
>> Så för INSERT, skelettet ser ungefär som detta.
Vi vill infoga i en viss tabell.
Sedan har vi en öppen parentes och en lista över kolumner
att vi vill sätta värden i.
Stäng parentes följande värden, och sedan
igen, vi lista ut värdena Vi vill sätta i tabellen.
>> Så ett exempel på detta skulle vara följande.
Jag vill infoga i tabellen användare följande columns--
användarnamn, lösenord, och fullname.
Så en ny rad där jag lägger i dessa tre kolumner och vi är
ska sätta i värdena Newman, USMAIL, och Newman.
Så i detta fall, är jag sätta gemener newman
in användarnamnet kolumnen lösenordet USMAIL och det fullständiga namnet huvudstaden N
Newman i fullname kolonnen.
>> Så här är vad databasen såg ut innan.
Här är vad tabellen användare på top såg ut innan vi gjorde detta.
När vi utföra detta fråga, vi får detta.
Vi har lagt till en ny rad i tabellen.
Men märker detta en sak att jag inte specificera
men på något sätt jag har ett värde för, vilket är 12 här.
Jag sa inte att jag ville sätta ID-nummer där.
Jag ville sätta användarnamn, lösenord, fullname.
Och jag gjorde det, det är bra.
>> Men jag fick också detta 12.
Varför fick jag denna 12?
Tja, visar det sig att när du definierar
en kolumn som kommer att bli din primärnyckel, som vanligtvis är,
som sagt, ett ID-nummer.
Det är inte alltid nödvändigtvis kommer att bli ett ID-nummer,
men det är oftast en bra idé att vara någon form av heltal.
Du har ett alternativ i phpMyAdmin när du skapar din databas
eller ditt bord för att ställa in det kolumn som auto inkrementering.
>> Som är en riktigt bra idé när du arbetar med en primärnyckel,
eftersom du vill att varje värde i den kolumnen att vara unik.
Och om du glömmer att ange den för mer än en person,
du nu har en situation där kolumnen är inte längre unik.
Du har två ämnen, så att du kan ingen längre identifiera en column--
eller så kan du inte längre unikt identifiera en rad baserat på den kolumnen.
Det har förlorat alla sina värde som en primärnyckel.
>> Och så tydligen vad jag har gjort Här är konfigurerad användar-ID
kolumn till automatisk ökning så att varje tid jag lägger till information i tabellen,
Det kommer automatiskt att ge mig ett värde för den primära nyckeln.
Så jag kan aldrig glömma att göra det eftersom databasen kommer att göra det åt mig.
Så det är ganska trevligt.
Och så det är därför vi får 12 där, eftersom jag har
ställa kolumnen upp till automatisk ökning.
Om jag lagt någon annan det skulle vara 13, om jag lagt
någon annan det skulle vara 14, och så vidare.
>> Så låt oss bara göra en ytterligare insättning.
Vi kommer att sätta i tabellen moms, i särskilt användarnamn och mor
kolonn, värdena Kramer och Babs Kramer.
Och så hade vi förut.
När vi kör det SQL-fråga, har vi redan.
Vi har lagt Kramer och Babs Kramer till bordet moms.
>> Så det är att sätta in.
SELECT är vad vi använder för att extrahera information från tabellen.
Så det här är hur vi får information ur databasen.
Och så välja kommandon kommer att vara mycket ofta används i programmering.
Den allmänna framework-- den allmän skelett ser ut så här.
Välj en uppsättning kolumner från en tabell, och sedan eventuellt
du kan ange en Skick- eller vad vi kallar typiskt ett predikat,
är oftast term vi använder i SQL.
>> Men det är i princip vad särskilda rader som du vill få.
Om du vill, i stället för att få allt begränsa den,
det är där du skulle göra det.
Och sedan eventuellt, kan du också beställning av en särskild kolumn.
Så kanske du vill ha saker sorteras alfabetiskt baserat på en kolonn
eller alfabetisk ordning baserad på en annan.
>> Igen, VAR och ORDER BY är valfria.
Men de kommer förmodligen att useful-- särskilt
VAR kommer att vara till nytta för begränsa så att du inte
få hela din databas tillbaka och måste bearbeta det, du bara få
bitar av det som du bryr dig om.
Så till exempel kan jag vill välja ID-nummer och fullname från användarna.
Så vad kan detta se ut?
Så här är min användare bord.
Jag vill välja idnum och fullname från användarna.
Vad ska jag få?
Jag kommer att få detta.
Jag ville inte begränsa det, så jag är få ID-nummer för varje rad
och jag får hela namn från varje rad.
>> OK.
Vad gör jag om jag vill välja lösenord från användare WHERE-- så nu
Jag lägger ett tillstånd, en predicate-- där idnum är mindre än 12.
Så här är min databas igen, min användare tabellen toppen.
Vad ska jag få om jag vill markera denna information, lösenord,
där användar-ID eller idnum är mindre än 12?
Jag kommer att få detta information tillbaka, eller hur?
Det händer att idnum är 10, mindre än 12, ID-nummer 11 mindre än 12.
Jag får lösenordet för dessa rader.
Det är vad jag bad om.
Hur är detta?
Vad gör jag om jag vill välja stjärna från moms bord där användarnamn är lika Jerry?
OK, är den speciella väljer stjärnan typ av wild card så kallade
som vi använder för att få allt.
Så de säger välj användarnamn kommatecken mor, som
råkade vara den enda två kolumner i denna tabell,
Jag kan bara välja stjärna och få allt
där användarnamnet är lika Jerry.
Och så det är vad jag skulle få om jag gjorde just den frågan.
>> Nu, databaser stor eftersom de tillåter
oss att organisera information kanske lite mer effektivt än vi
annars skulle kunna.
Vi behöver inte nödvändigtvis för att lagra alla relevanta bit information
om en användare i samma tabell.
Vi hade två tabeller där.
>> Vi behöver lagra allas mors namn,
och kanske vi inte har den sociala tryggheten nummer, har vi deras födelsedatum.
Det behöver inte alltid att vara i samma tabell.
Så länge vi kan definiera förhållanden mellan tables--
och det är där som relations databas sikt slags kommer
i play-- så länge vi kan definiera relationer mellan tabellerna,
vi kan sorts compartmentalize eller abstrakta saker sätt,
där vi bara har verkligen viktig information
vi bryr oss om i användarens tabellen.
Och sedan har vi extra information eller extra information i andra tabeller
att vi kan koppla tillbaka till huvud användare bord på ett visst sätt.
>> Så här har vi dessa två tabeller, men det finns ett samband mellan dem,
höger?
Det verkar som användarnamn kan vara något
som existerar gemensamt mellan dessa två olika tabeller.
Så vad händer om vi nu har en situation där vi
vill få en användares fullständiga namn från användarens tabellen, och deras mor
namn från moderbordet?
Vi har inte ett sätt att få att som det ser ut, eller hur?
Det finns ingen enda tabell som innehåller både fullständiga namn och moderns namn.
Vi har inte det alternativet från vad vi har sett hittills.
>> Och så vi måste införa idén om en JOIN.
Och sammanfogar är förmodligen mest complex--
det är verkligen mest komplexa operation vi kommer att prata om i videon.
De är lite komplicerat, men när du väl fått kläm på det,
de är faktiskt inte så illa.
Det är bara ett specialfall av en SELECT.
Vi kommer att välja en uppsättning kolumner från en tabell som förenar
i en andra tabell på vissa predikat.
>> I det här fallet, tänk på det gillar this-- tabell en är en cirkel hit,
tabell två är en annan cirkel hit.
Och det predikat del i mitten, är det
ungefär som om du tror om en Venndiagram, vad
har de gemensamt?
Vi vill länka dessa två tabeller baserat på vad de har gemensamt
och skapa denna hypotetiska tabell som är en sammanslagning av de två tillsammans.
Så vi får se detta i ett exempel och kanske det hjälper
rensa upp lite.
Så kanske du vill välja user.fullname och moms.mother
från användare som ansluter i moms tabell i varje situation
där användarnamn kolumnen är densamma mellan dem.
Och detta är en ny syntax här, den här användaren.
och mammor ..
Om jag gör flera tabeller tillsammans, kan jag ange en tabell.
Jag kan urskilja i synnerhet som på längst ned där.
Jag kan urskilja användarnamnet kolumnen i tabellen användare
från användarnamnet kolumnen i moms tabell, som är otherwise--
om vi just sagt användarnamn lika användarnamn, som egentligen inte
betyder någonting.
Vi vill göra det där de matchar.
>> Så jag kan ange tabellen och kolumnnamn i händelse av en situation
där det skulle vara oklart vad jag talar om.
Så det är allt jag gör det är att jag är säger denna kolumn från denna tabell,
och är mycket tydlig.
Så återigen, jag välja fullständiga namn och moderns namn
från tabellen användare sammanlänkade med moms tabellen i varje situation
där de delar som column-- de delar som användarnamn begrepp.
>> Så här är de tabeller som vi hade tidigare.
Detta är tillståndet i vår databas som den existerar just nu.
Informationen vi utvinna är detta till att börja med.
Detta är den nya tabellen vi ska att skapa att kombinera dessa tillsammans.
Och märker att vi inte lyfta Newmans rad i användarens tabellen,
och vi är inte att lyfta fram Kramers rad i tabellen moms
eftersom varken en förekommer i både sets-- i båda tabellerna.
>> Den enda information som är gemensamt mellan dem är Jerry är båda tabellerna
och gcostanza är i båda tabellerna.
Och så när vi gör SQL JOIN, vad vi get-- och vi gör faktiskt få detta.
Det blir liksom en temporär variabel.
Det är som en hypotetisk sammanslagning av de två tabellerna.
Vi får faktiskt något så här, där
Vi har slås ihop borden på information som de har gemensamt.
>> Så märker att users.username och moms.username kolonn,
Det är exakt samma.
Det var den information som överensstämde från användarna
bord och bordet moms.
Och så vi slås ihop dem.
Vi kastas Kramer eftersom han existerade inte i tabellen användare,
och vi kastas Newman, eftersom Han fanns inte i tabellen moms.
Så det här är den hypotetiska fusionen använder JOIN driften av SELECT.
>> Och sedan vi letar efter användarens fullständiga namn och användarens mor,
och så detta är den information som vi skulle få från den övergripande frågan
att vi gjort med SELECT.
Så vi gick med tabeller tillsammans och vi extraherade dessa två kolumner,
och så det är vad vi skulle få.
Men SQL ansluter sig till en slags komplicerat.
Du har förmodligen inte kommer att göra dem alltför mycket, men bara har en uppfattning om skelettet
som du kan använda för att slå samman två tabeller tillsammans om du behöver till.
De två sista är en bit enklare Jag lovar.
Så uppdatera, kan vi använda UPPDATERING att ändra information i en tabell.
Det allmänna formatet är UPPDATERING vissa tabell, ange några kolumn till ett visst värde
Om vissa predikat är nöjd.
Så till exempel kan vi vill att uppdatera tabellen användare
och ange lösenordet till yada bla, där ID-numret är 10.
>> Så i det här fallet, vi är uppdatering av tabellen användare.
ID-numret är 10 för den första raden där,
och vi vill uppdatera lösenord till yadaen yada.
Och så det är vad som skulle hända.
Det är ganska enkelt, eller hur?
Det är bara en mycket enkel modifiering av tabellen.
>> TA BORT operationen vi brukade ta bort information från en tabell.
DELETE FROM tabell VAR vissa predikat är nöjd.
Vi vill ta bort från användare bord till exempel
där användarnamnet är Newman.
Du kan antagligen gissa vad som kommer att hända här när vi utför det SQL
fråga, är Newman borta från bordet.
>> Så alla dessa operationer, som jag har sagt, är mycket lätt att göra i phpMyAdmin.
Det är ett mycket användarvänligt gränssnitt.
Men det kräver manuellt arbete.
Vi vill inte anställa manuellt arbete.
Vi vill att våra program till gör detta för oss, eller hur?
Så vi kanske vill göra detta programmässigt.
Vi vill införliva SQL och har något annat att göra detta för oss.
>> Men vad har vi sett som gör oss att program göra något?
Vi har sett PHP, eller hur?
Det införs vissa dynamik i våra program.
Och så lyckligtvis, SQL och PHP spela mycket snyggt tillsammans.
Det finns en funktion i PHP kallas fråga, som kan användas.
Och du kan passera som parameter eller argument
att fråga en SQL-fråga som du vill köra.
Och PHP kommer att göra det för din räkning.
>> Så efter att du har anslutit till din databas med PHP,
det finns två primär du gör detta.
Det finns något som kallas mysqli och något som kallas PDO.
Vi kommer inte att gå in i en enorm belopp detalj där.
I CS50 använder vi PDO.
När du har anslutit till din databas, du
kan sedan göra sökningar databasen genom att leda frågor som argument
till PHP funktioner.
Och när du gör det, lagrar du resultatuppsättning i en associativ array.
>> Och vi vet hur man arbetar med associativa arrayer i PHP.
Så jag kan säga något liknande this-- $ results--
Detta är i PHP-- lika frågan.
Och sedan insidan av sökfunktion som argument
att jag passerar för att fråga som ser ut som SQL.
Och i själva verket som är SQL.
Det är frågesträngen att jag skulle vilja köra på min databas.
>> Och så i rött, är detta PHP.
Detta är SQL att jag är integreras i PHP genom att göra
Det argumentet till frågefunktionen.
Jag vill välja fullname från användare där ID-nummer är lika 10.
Och då kanske efter att jag har gjort det, Jag kan säga ungefär så här.
Jag vill skriva ut meddelande Tack för att logga in.
>> Och jag vill ha det interpolate-- jag vill att interpolera $ resultat fullname.
Och så det är hur jag arbetar med att associativ array som jag kom tillbaka.
$ resultat fullname skulle princip sluta skriva ut,
tack för att logga in, Jerry Seinfeld.
Det var det fullständiga namnet där idnum motsvarar 10.
>> Och så allt jag gör är jag now-- jag lagras
min fråga, resultatet av min fråga och resulterar i en associativ array,
och fullname är namnet på kolonnen jag fick för.
Så det är min nyckel till resultaten associativ array som jag vill.
Så tack för att logga in, $ resultat, fullname kommer att skriva ut, kommer att hålla
mitt emellan de lockigt hängslen, Jerry Seinfeld.
Och jag gillar att skriva ut meddelandet Tack för att logga in Jerry Seinfeld.
>> Nu, vi förmodligen inte vill hårt kod sånt i, eller hur?
Vi kanske vill göra något liknande print f, där vi kan ersätta och kanske
samla olika information, eller kanske har frågeprocessen
olika information.
Och så frågan har sökfunktion denna föreställning om slags utbyten
mycket lik ut f procent s och procent c, är frågetecken.
>> Och vi kan använda fråga märken mycket analogt
att skriva ut f ersättnings variabler.
Så kanske ditt användarnamn inloggad tidigare, och du har sparat deras användar-ID nummer
i $ _SESSION av PHP super global nyckel ID.
Så kanske efter att de loggat in, du ställer $ _SESSION ID är lika med 10,
extrapolering från exemplet vi bara såg en andra sedan.
>> Och så när vi faktiskt utför detta ifrågasätta resultatet nu,
det skulle koppla in 10, eller vad som helst de $ _SESSION ID-värde är.
Och så som tillåter oss att vara lite mer dynamisk.
Vi är inte svårt kodning saker längre.
Vi sparar informationen någonstans och sedan
Vi kan använda den informationen en gång till sorts generalisera vad vi vill göra,
och bara plug-in och förändring beteende vår sida
baserat på vad användarens ID-nummer egentligen är när de har loggat in.
Det är också möjligt, men att dina resultat set
kan bestå av flera rader.
I vilket fall, har du en matris med arrays--
en array av associativa arrayer.
Och du behöver bara iterera igenom det.
Och vi vet hur man iterera genom en rad i PHP, eller hur?
Så här är förmodligen den mest komplex sak som vi har sett hittills.
Det faktiskt integrerar tre språk tillsammans.
>> Här i rött, är detta något HTML.
Jag tydligen starting-- detta är ett utdrag av någon HTML som jag har.
Jag börjar ett nytt stycke som säger mammor av TV Seinfeld.
Och sedan omedelbart efteråt Jag börjar en tabell.
Och sedan efter att jag har någon PHP, eller hur?
Jag har all denna PHP-kod där.
Jag uppenbarligen kommer att göra en förfrågan.
Och för att göra frågan, kommer jag att att använda SELECT mödrar FRÅN moms.
>> Så det här är getting-- detta är SQL.
Så det blå är SQL.
Den röda vi såg för en sekund sedan var HTML.
Och den gröna här är PHP.
Så jag gör en fråga till min databas, jag
markera alla mödrar i tabellen moms.
Inte bara minska ner till särskilda rad, jag ber för dem alla.
>> Sedan kollar jag om resultatet inte jämlikar lika falskt.
Detta är bara mitt sätt att kontrollera sort av om resultaten inte är lika med noll,
att vi skulle få se c till exempel.
I grund och botten detta är bara kontrollera för att säker på att det faktiskt fick data tillbaka.
Eftersom jag inte vill börja skriva ut ut uppgifter om jag inte fick några uppgifter.
Sedan för varje resultat till följd av foreach syntax från PHP, allt jag gör
skriver ut $ resultat mödrar.
Och så jag kommer att få en uppsättning av alla de mödrar till each--
det är en samling av associativ arrays-- och jag skriva ut
varje en som sin egen rad i en tabell.
Och det är verkligen söt mycket allt som finns till den.
Jag vet att det finns en liten bit pågår här
i detta sista exemplet med matriser av arrays-- arrayer av associativa arrayer.
Men det är verkligen inte bara koka i SQL för att göra en förfrågan,
vanligtvis välja när vi har redan lägga in information i tabellen,
och sedan bara dra ut den.
>> Och det är vi skulle dra det i detta särskilda fall.
Vi skulle extrahera alla de enskilda mödrar från bordet moms.
Vi fick en hel uppsättning av dem, och vi vill iterera igenom och skriva ut
varenda en.
Så återigen, detta är förmodligen det mest komplicerat exempel
vi har sett eftersom vi blandar tre olika språk tillsammans, eller hur?
>> Återigen har vi HTML här i rött, blandat med lite SQL här i blått,
blandat med lite PHP i grönt.
Men alla dessa spelar fint tillsammans, är det
bara en fråga om att utveckla goda vanor så att du kan få
dem att arbeta tillsammans på det sätt du vill.
Och det enda sättet att verkligen göra det är att öva, öva, öva.
Jag är Doug Lloyd, är detta CS50.