[REPRODUCCIÓ DE MÚSICA] DAVID Malan: Molt bé, això és CS50. Aquest és el cap de setmana 8. I avui, comencem per omplir algunes peces quan es tracta de la construcció coses a la web. Per tant, recordar que dilluns passem molt més temps en PHP, que és aquesta dinàmica llenguatge de programació que ens anem de sortida, entre d'altres coses, HTML i altres tal contingut que anem a voler veure. Però en realitat no hem vist com anem a emmagatzemar qualsevol informació. De fet, gairebé qualsevol que el súper pàgines web interessants que visita avui tenir algun tipus de base de dades a la part final, no? Facebook dubte emmagatzema gran quantitat de dades sobre tots nosaltres i botigues de Gmail de tot dels seus correus electrònics. I així, molts altres llocs no són només contingut estàtic que és informatiu. En realitat és dinàmica d'alguna manera. Vostè proporciona l'entrada, s'actualitza les pàgines d'altres persones. Vostè rep missatges, envia missatges, i així successivament. Així que avui, mirem més de prop les bases d'un projecte que vostè va a submergir-se en la propera setmana, CS50 Finances, que és en realitat va a haver de construir cosa que no és en C, però en PHP. Un lloc web que es veu un mica alguna cosa com això que permet comprar i vendre accions que són en realitat va a recórrer a temps real les dades de saldos de Yahoo Finances. I així, en última instància, vostè tindrà la il·lusió per a tu i per als usuaris que en realitat estàs comprant i venent accions i aconseguir el temps gairebé real, actualitzacions, la gestió d'una cartera, tots els quals requerirà tenir, en última instància, una base de dades dels usuaris. Així, en les seves pròpies paraules, especialment si no estàs molt familiaritzats amb l'ordinador ciència o bases de dades, el que saps una base de dades per a ser en aquest moment, en termes no tècnics? Que és? Com ho descriuries a un company de quart o un amic? AUDIÈNCIA: [inaudible] informació [inaudible] DAVID Malan: Així, una llista de la informació, o un almacén-- una llista d'informació que és possible que vulgueu emmagatzemar per alguna cosa, com un usuari. ¿I quins usuaris tenen associat amb ells? Si vostè és un usuari al Facebook o Gmail, ¿quines són les característiques que tots els usuaris tenen? Igual que, el que podria ser part de la columnes al full de càlcul a què ens al·ludit última vegada? Perquè de nou, vostè pot pensar en una base de dades realment com un arxiu d'Excel de luxe o Google Full de càlcul o arxiu dels números d'Apple. Llavors, què pensa vostè de quan es pensa en un usuari? Què tenen? Què és això? AUDIÈNCIA: Un nom. DAVID Malan: Un nom. Així que si el nom, com, David Malan seria el nom d'algun usuari. ¿Què més ha un usuari? AUDIÈNCIA: Un ID. DAVID Malan: Un ID. Així que, com un número d'identificació, com el Harvard DNI o el teu Yale Net ID o similars. Quina altra cosa podria tenir un usuari? AUDIÈNCIA: Clau. DAVID Malan: Una contrasenya, potser una direcció, potser un número de telèfon, potser una adreça de correu electrònic. Així, hi ha munts de camps i aquest podria espècie d'espiral fora de control ràpidament tan aviat com comenci adonar-se, oh, anem a emmagatzemar aquest i anem a guardar això i allò. Però, com podem realment fer això? Així que de nou, el model mental tenir per ara, ja que submergir-se en SQL real, Structured Query Language, és una base de dades que té aquest aspecte. Són només les files i columnes. I vostè pot imaginar Google Spreadsheets o qualsevol nombre d'altres programes. Però el que és clau sobre MySQL, que és el programari de base de dades que utilitzarem, la llibertat obertament disponible- usos de Facebook i qualsevol nombre d'altres websites-- base de dades emmagatzema coses relacional. I una base de dades relacional només significa que, literalment, desa les vostres dades en files i columnes. És tan simple com això. Així que, fins i tot alguna cosa com Oracle que vostè pot haver sentit general de és una base de dades relacional. I sota de la campana, que emmagatzema les dades en files i columnes. I Oracle que una cobra molts diners per fer això, mentre que els càrrecs de MySQL que res per al mateix. Per tant, SQL se'ns va a donar almenys quatre operacions. La capacitat de seleccionar les dades, com a lectura dades, inserir, eliminar i actualitzar dades. En altres paraules, aquestes són realment les quatre operacions fonamentals que permetran que canviem coses en aquestes files i columnes. L'eina que utilitzarem avui especialment aprendre SQL i jugar amb ella de nou es diu PHP MyAdmin. És eina basada en web. Coincidència total que està escrit en PHP. Però va a donar-nos un gràfic interfície d'usuari perquè puguem realment crear aquestes files i columnes i després parlar amb ells a través de codi. Així que, ara començarem a el que crec que és francament tipus de procés de la diversió de la construcció de la part de darrere dels llocs web, les parts que els usuaris no ho fan veure, però sens dubte es preocupen, perquè això és més aviat de dades va. Per tant, similar a C i una poc menys com PHP, SQL o una base de dades que suporta SQL, té almenys aquests tipus de dades i raïms d'altres. CHAR, VARCHAR, INT, BIGINT, DECIMAL i DATETIME. I hi ha un tot munt d'altres característiques, però farem això per A tall d'exemple real. Vaig a anar a CS50 IDE en el qual, per endavant, m'he inscrit i jo també he visitat un URL per aquesta eina anomenada PHP MyAdmin. I en el problema establert set, et direm exactament com arribar a aquesta interfície tant be. A la cantonada superior esquerra, notar-ho diu conferència. I això només vol dir que per endavant, he creat una base de dades trucada de conferència buit que no té fulls de càlcul en ella encara. No hi ha files i columnes. A causa de que la primera El farem es començarà a crear una taula això va a emmagatzemar els nostres usuaris. Així que, literalment sobre aquí a la dreta, jo sóc dirà a la base de dades Vull una taula anomenada Usuaris. Per tant, això és com l'arxiu que jo voleu emmagatzemar totes les meves dades. I quantes columnes? Bé, anem a mantenir simple per ara. Només vull guardar com un nom d'usuari i un nom per a un usuari. Començarem petita. Per tant, vull dues columnes totals. I jo seguiré endavant i feu clic a Vés. I després, per aquests columnes, el que vaig a fer-- si això internet cooperates-- bé, així que anem a intentar-ho de nou. Vaig a crear una taula anomenada Els usuaris amb dues columnes, feu clic a Vés, OK. Ara ho tenim molt ràpid. Gràcies, molt ben fet. Molt bé, i què és el que volem aquestes columnes que es diuen? Així, un va a ser cridat nom d'usuari. Per tant, tot el que veig aquí-- i la interfície francament posa una mica lleig, finalment, una vegada que es comença a escriure en totes aquestes dades. Però el que és interessant és que tipus de paradoxalment, estic creant columnes, però l'eina té tontament el posaven en files de manera que pugui configurar aquestes columnes. Així, hi ha dos espais en blanc que hi ha a Nom. I un d'aquests camps I voler anomenat nom d'usuari, i l'altre camp Vull cridar Nom. I ara he de triar tipus de dades per a aquestes coses. Així, mentre que en Excel i Google Spreadsheets, si vols una columna, que, literalment, només has d'escriure el nom o nom d'usuari, premeu Enter. Potser ho fas negreta només per la claredat, però això és tot. No s'especifica la tipus de les columnes. Ara a Google Spreadsheets o Excel, podria especificar com es processa les dades. Vostè podria anar al menú Format, i vostè pot especificar mostrar aquest signe dòlar com, mostrar això com un valor de punt flotant. Així, és similar en esperit a que el que estem a punt de fer, però això és en realitat va a la força que les dades siguin un cert tipus. Ara, tot i que fa un moment em va dir que hi ha només uns pocs tipus de dades, hi ha realment una molt, i són en diversos graus d'especificitat. I com un part, que fins i tot pot fer coses de luxe com geometries d'emmagatzematge dins d'una base de dades. Pot emmagatzemar coses com coordenades GPS i, de fet trobar, matemàticament, punts que estan a prop d'altres. Però anem a mantenir aquesta super simple i arriben fins aquí, tots els anomenats tipus de cadenes. Així que, aquí tens una llista d'un tota munt d'opcions. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. I és una mica aclaparador. I, per desgràcia, una mica paradoxalment a C, CHAR no és realment un CHAR. Si especifica en una base de dades que el seu tipus de dades és CHAR, això vol dir que sí, que és un CHAR, però és un o més caràcters. I vostè ha d'especificar quants CHAR desitja. Així que, què és una típica longitud d'un nom d'usuari? Hi ha un límit en general? AUDIÈNCIA: [inaudible] DAVID Malan: 16 potser? Alguna cosa així. Ja saps, de tornada al dia, el que solia ser 8. A vegades és 16 vegades és encara més que això. I així, això no ho fa significa dóna'm 1 CHAR. Això vol dir que he de especificar la longitud del camp, i ara jo podria dir alguna cosa així com 16. I no hi ha una solució de compromís aquí. Per tant, anem a veure en un moment això vol dir que un, cada nom d'usuari ha de ser de 16 caràcters. Però esperi un minut, M-A-L-A-N. Si això és el meu nom d'usuari i jo només estic fent servir 5, ¿Què li proposarà que la base de dades de fer pels altres 11 personatges que M'he reservat espai per? Què faríes? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, només fer que tots nul. Fer-espais. Però probablement nul, de manera que un gran quantitat de zeros com nom. Així, d'una banda, tenim ara assegurat que el meu nom d'usuari pot ser no més de 16 caràcters. I l'altra cara d'això és que si tenia un nom molt llarg o volia un temps molt llarg username com alguns de vostès nois puguin tenir en aquest col·legi o en Yale.edu, no es pot tenir un. I així, de fet, si vostè té mai registrada per un lloc web i et cridar dient la contrasenya és massa llarga o el seu nom d'usuari és massa llarg, és simplement perquè un programador, quan la configuració de la base de dades, decidit que aquest camp no més d'aquesta longitud ser. Molt bé, i què si es procedeix a nomenar? Per quant de temps deu un nom de l'ésser humà típic? Quants personatges, 16? Suposo que vam poder trobar algú en aquesta sala on per la seva primera més última nom té més de 16 caràcters. Així que, el que és millor que això, 17? 18? 25? Més gran? 30? AUDIÈNCIA: [inaudible] DAVID Malan: 5000, Déu meu. Llavors, això és probablement una decent límit superior, per així dir-ho. I aquí tenim la classe de per fer un judici. Igual, no hi ha una resposta aquí. Infinit no és molt possible, perquè som el temps va a tener-- estem es quedarà sense memòria. Per tant, hem de fer una crida de judici en algun moment. Molt comú seria, per exemple, de servei- i Permetre especificar CHAR aquí com abans-- 255 era, literalment, la límit superior d'aquest programari de base de dades fa anys. I així, una gran quantitat d'éssers humans acaba de dir, està bé. 255 és el límit. Utilitzarem el màxim. I això és bastant ridícul. Igual que, si vostè està escrivint a algú és nom de 200 caràcters, a més, que una mica ridícul. Però, recordeu que no és ASCII l'únic sistema per als personatges. I així, especialment en una gran quantitat d'idiomes asiàtics on hi ha personatges que no poden expressar en els teclats com el meu Units teclat, alguns personatges en realitat prendre fins a 16 bits en lloc de vuit bits. I així, en realitat això no és tan irraonable que necessitem més espai si volem encaixar personatges més grans que el dels EUA les cèntriques hem tendit a discutir. Per tant, necessitem una mica de límit superior. No sé el que el millor és, però 255 és generalment molt comú. 25 se sent baix. 16, 32 se senten baix. M'agradaria errar pel costat d'alguna cosa superior. Però hi ha una solució de compromís, com sempre. Quin és el, potser, obvi comerç fora de la reserva de 255 caràcters per al nom de tots els membres de la meva base de dades? AUDIÈNCIA: [inaudible] DAVID Malan: Què és això? AUDIÈNCIA: [inaudible] DAVID Malan: És un gran quantitat de memòria, no? M-A-L-A-N. Acabo perdut 250 personatges només per emmagatzemar el meu nom defensiva en cas que algú a la classe té un nom molt llarg. Això sembla com una compensació excessiva. Així, resulta que SQL, aquest llenguatge de base de dades, en realitat dóna suport alguna cosa anomenats VARCHAR o CHAR variable. I això és una espècie de bonítol en què aquesta permet especificar no és una fixa amplada, sinó més aviat, una amplada variable. I més específicament, una amplada màxima del camp. Per tant, això vol dir que un nom pot ser no més de 250 caràcters, però sí que pot ser inferior. I la base de dades va ser intel·ligent. Si poses en M-A-L-A-N, només va a utilitzar cinc, potser sis bytes per com un caràcter nul de sortida, i no gastar un addicional 249 o 250 bytes innecessàriament. Per tant, això sembla com hauria han començat amb aquesta història. Però sempre hi ha una solució de compromís. Així, d'una banda, un nom d'usuari He especificada per ser codificat en 16, i potser això no era la decisió correcta, potser és, però ¿per què no fer servir Varchars per a tot? Existeix per una raó. Per què no utilitzar VARCHAR per a cada camp la longitud no saps per endavant si es tracta d'una gran cosa, no? Utilitzeu només tant espai com que necessita fins a aquest límit? AUDIÈNCIA: Més lent. DAVID Malan: corrector ortogràfic? AUDIÈNCIA: Fa que sigui més lent? DAVID Malan: Oh, és més lent. Bé, això és gairebé sempre la resposta, francament. Igual que, quin és l'equilibri? És ben costa més espai o costa més temps. Així, en aquest cas, podria ser més lent. Per què? AUDIÈNCIA: [inaudible] la determinació de [inaudible]. DAVID Malan: Good. Així, es pot recordar fins i tot de PSED5, jugant amb el seu enfocament el diccionari, si vostè ha de assignar memòria dinàmicament o mantenir el creixement d'un tampó, que en realitat pot ser lent. Si vostè ha de trucar a malloc sota de la campana i potser això és el que MySQL està fent, pel que sens dubte que podria ser el cas. I si vostè pensa manera tornar a PSet-- o fins i tot setmanes, dues coses quan ens va agradar recerca binària o fins i tot cerca lineal, una de les coses bones de cada paraula en una base de dades o cada paraula en una columna sent exactament la mateixa longitud, fins i tot si un munt d'aquests personatges estan en blanc, és que es pot utilitzar accés aleatori en les seves dades, no? Si vostè sap que cada paraula és 16 caràcters de distància, pot utilitzar l'aritmètica de punters, de manera que parlar, i vagi que ens 16, 32, 48, 64, i vostè pot saltar l'instant utilitzant l'aritmètica qualsevol de les paraules a la base de dades. Mentre que si es tracta d'un VARCHAR, ¿Quin lloc ha de fer? [Timbre del telèfon] Si és un VARCHAR, que no poden utilitzar l'accés aleatori. El que has de buscar o fer? Sí? AUDIÈNCIA: [inaudible] DAVID Malan: Miri a través de la traça whole-- a través de tota la llista buscant el que, el més probable? Quin tipus de valor especial? AUDIÈNCIA: [inaudible] DAVID Malan: Buscant per als terminadors nuls que demarquen la separació de paraules. Així que de nou, una solució de compromís, i no hi ha una resposta correcta. Però aquí és on, especialment quan els usuaris arriben a ser molts i la seva càrrega en els seus servidors, la nombre de persones que l'utilitzen s'eleva, aquests són en realitat les decisions no trivials. Així, podem deixar això com això, però anem a desplaceu-vos cap a baix a la dreta aquí. Ara, hi ha un parell de columnes on hem de fer un judici. Té sentit per permetre que un usuari de nom, nom d'usuari d'un usuari o un usuari de nom, en ser nul? És a dir, només en blanc. Se sent una mica sense sentit, així que estic no va a revisar aquestes caixes. Però resulta que en un base de dades, es pot dir, algú pot tenir opcionalment aquest valor. Aquesta columna no té estar realment allà. Ara, hi ha un menú desplegable. I noto que encara estic a la primera fila allà, pel que estic parlant nom d'usuari ara. I resulta que una base de dades, A diferència d'una simple senzilla full de càlcul, té característiques de gran abast anomenats índexs. I un índex és una manera de dir la base de dades per endavant que la I humana sóc més intel·ligent que tu. Sé quin tipus de consultes, seleccioneu o inserir o eliminar o actualitzar, que el meu codi es va a acabar fent d'aquesta base de dades. Vull llegir una gran quantitat de dades. Vull inserir una gran quantitat de dades. Vull constantment eliminar una gran quantitat de dades. Si sé que seré accedir a un camp com el nom d'usuari molt, Preventivament puc dir la base de dades, jo sé més que tu, i vull decret que vostè ha índex d'aquest camp. Quan la indexació d'un camp o una columna significa que la base de dades amb antelació ha de demanar prestat algunes idees de com, setmana quatre-cinc i sis del CS50 i de fet construir una mena de recerca binària arbre o alguna cosa generalment es diu un arbre B que vostè aprendrà en una classe com cs124 a Harvard, una classe d'algoritmes, o qualsevol nombre d'altres llocs. La base de dades i de la intel·ligent persones que van implementar serà trobar la manera d'emmagatzemar aquesta taula de la informació en la memòria perquè les recerques i altres operacions són super ràpid. No ha de fer-ho. Vostè no ha de posar en pràctica cerca lineal o recerca binària o fusionar espècie o la selecció classe, res d'això. La base de dades ho fa per vostè si li dius que de forma preventiva per indexar aquest camp. I es pot veure també, que hi ha algunes altres característiques podem dir-li a la base de dades per fer complir. Què podria significar Si trio Steam d'aquest menú, només intuïtivament? Sí? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, la nom d'usuari ha de ser únic. És això una cosa bona o una cosa dolenta per una base de dades, per a un lloc web amb els usuaris? En cas de noms d'usuari sigui únic? Sí, probablement. Si això és el que el camp que utilitza per connectar-se, vostè realment no vol la gent que té la mateixa sensació o el mateix nom d'usuari. Així, podem tenir la base de dades de fer complir el que que ara en el meu codi PHP o qualsevol altre idioma, Jo no he de, per exemple, comprovar necessàriament té aquest nom d'usuari existeixo abans de deixar que algú es registra? La base de dades no permetrà que dues persones nomenades David o Malans registren en aquest cas. I com un a part, tot i que aquest menú només li permet seleccionar un, un índex únic és un que és indexats per a un rendiment súper ràpid, però també fa complir singularitat. I anem a tornar al que el altres dos significar en un moment. Mentrestant, si vaig a la meva segona fila, que és el nom de l'usuari, d'especificar que el nom ha de ser únic? No, perquè certament es podria tener-- no ha de dos David Malans en aquesta sala, el més probable. Però si triem un nom diferent, podríem segurament tindrà col·lisions. Penseu de nou per discutir taules i similars. Així que, certament no volem per fer el camp de nom únic. Per tant, només ens en sortirem que, com el tauler, tauler, tauler, res. I jo vaig a deixar tota la resta sol. De fet, la majoria d'aquests camps no anem a haver de preocupar-se. I quan estigui llest per guardar aquesta, si l'internet coopera, Faig clic a Desa, i molt, molt, molt poc a poc la base de dades no ser fora de perill. I ara estic de tornada a aquest interfície, que és cert, és aclaparadora a primera vista. Però tot el que vaig a fer és clic en la paraula d'Usuaris en la part superior esquerra. Vaig a anar per aquí, feu clic a Els usuaris i, per defecte, ha executat alguna SQL, però més sobre això en un moment. Això és només un resum del que vaig fer. I que no es preocupés que veus parlar d'Amèrica i suec aquí. Aquestes són només el predeterminat ajustos, ja que MySQL originalment, o PHP MyAdmin, un dels dos va passar a ser escrit per algunes persones sueques. Però és irrellevant en el nostre cas aquí. Molt bé, així que per què és tot això interessant? Resulta, puc inserir dades en una base de dades mitjançant l'escriptura de codi. I estic a seguir endavant i en el meu arxiu d'aquí, estic seguirà endavant i fer veure aquest està connectat a la base de dades, la qual no és en aquest moment, però ho farà serà quan arribem al problema vam posar 07:00. I jo vaig a seguir endavant i executar una funció anomenada de consulta, que li donarem en el problema establir codi de distribució de set, que té almenys un argument, que és només una cadena. Una cadena de codi SQL. Per tant, estàs a punt d'aprendre a escriure Structured Query Language. Si vull inserir una nova fila en el meu base de dades perquè algú ha presentat una forma de la meva codi, ho faria, literalment, escriure INSERT INTO usuaris la següent camps: nom d'usuari, coma, el nom, els valors, i ara he de inserir alguna cosa així com Malan, i cita, fi de la cita 'David Malan. I ara fins i tot per als que no estan familiaritzats amb SQL, Per què estic fent servir cometes simples dins d'aquesta cadena verd? Quina podria ser la raó aquí? Noti que sóc co-barreja dos idiomes. Consulta és una funció PHP, però es necessita un argument. I aquest argument ha de ser en si mateix escrit en un altre llenguatge anomenat SQL, Structured Query Language. Per tant, tot el que jo simplement han posat en relleu aquí és aquest llenguatge anomenat SQL. Llavors, què passa amb les cometes simples, igual que una comprovació de validesa ràpida? Endavant. Són cadenes. Així, cita, cap de la cita Malan i pressupost, Ho van dir ells David Malan són cadenes. I només pensar intuïtivament ara, sabent el que saps sobre C i PHP, ¿Per què no faig això, que en general cometes dobles usades per a cordes? Per què jo no vull fer això? Sí? AUDIÈNCIA: [inaudible] DAVID Malan: Exactament. Perquè jo ja estic fent servir cometes dobles en el camí fora de la discussió a la funció de PHP, Només vull confondre l'intèrpret. No se sap, no aquestes van de la mà? ¿Aquests van de la mà? ¿Aquests van de la mà? Així que en lloc altern. O podria fer alguna cosa com això, cita barra invertida o una cita barra invertida. Francament, això comença a arribar molt il·legible i lleig. Però això seria aconseguir el mateix resultat també. Així que, si hagués de executar aquest consulta ara, anem a veure què passa. Vaig a seguir endavant ara i bastant d'executar el codi PHP, que és on es jugarà al problema d'establir 7, Vaig a anar al seu lloc de PHP MyAdmin. I vaig manualment per anar a la pestanya SQL, i que em faci zoom a la interfície. I em vaig a pegar en el que acaba d'escriure. I el codi de colors té canviat una mica ara, només perquè els formats de programes coses una mica diferent. Però noto que tot el que he fet és el que he dit, inserir en Usuaris. He especificat, llavors, en una coma separats llista entre parèntesis els dos camps que vull inserir, i llavors jo he dit, literalment, els valors seguit d'un altre parin, i després els dos valors Vull plug-in, i ara per a la bona mesura, Vaig a posar un punt i coma al final. Per tant, això no és C. Això no és PHP. Es tracta ara de SQL, i estic enganxant en aquesta interfície basada en la web que és només va a deixar-me, tan aviat com faci clic a Vés, executar aquesta consulta a la base de dades s'executa dins de l'IDE CS50. Així que això és bo. Recordeu que va dir una fila inserit, va ser súper ràpid, 0,0054 segons per inserir aquestes dades. Així que, això sona bastant saludable. Es torna a formatar la meva consulta per a mi aquí només per veure-ho en una mena de codi de color de versions. Però ara si faig clic Navegar, notar que, fins i tot encara que hi ha una gran quantitat de desordre en la pantalla, la meva taula ara té dues files. Així que, deixa seguir endavant i fer una altra. En lloc d'això, em va deixar aneu a la pestanya SQL nou. I aquesta vegada vaig a inserir una cosa així Rob i portaran el nom Rob Bowden. Bowden. Anem clic a Desa. Vaja, en lloc Go. Feu clic a Navega de nou, i Ara notar Tinc dues files. Per tant, això és només una forma més complexa manera d'obrir Google Spreadsheets i només teclejar una fila en una columna. Però el que és fonamental és que ara tenim la sintaxi amb el qual escriure codi perquè en última instància, podríem realitat fer alguna cosa i això. Recordem que suporti PHP Variables súper globals. Què hi ha dins de dòlar signar subratllat GET en PHP? Prenem una ullada a un o dos exemples senzills. I en PSet6, Recall té hola dot PHP que utilitza aquesta variable. Què passa aquí? O el que és? Una mica més fort. AUDIÈNCIA: [inaudible] DAVID Malan: És una neu llavor de la matriu, que és només una forma elegant de dir una matriu que té parells de valors clau. I les claus no són numèrics. Són paraules o cadenes. I en concret, el que són aquells parells de valors clau? D'on vénen? Ho sentim? AUDIÈNCIA: [inaudible] DAVID Malan: No? D'on vénen les claus parells de valors vénen? Dir una altra vegada? Una altra vegada? Sóc l'únic audiència alguna cosa? [El] Això és correcte, no? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, provenen de la cadena de consulta. Així doncs, si es rebobina en el temps per quan hem jugat amb Google i ens hem anat a Google.com slash Cerca signe d'interrogació q és igual als gats, si hagués de prem Intro i si Google es van implementar en PHP, Codi PHP que Google va escriure tindrien accés a la mostra de dòlar ressaltar GET dins dels quals és una clau anomenada Q i un valor anomenats gats que a continuació, pot utilitzar s'utilitza per fer una recerca real amb. Així que, de fet, el que vaig a fer ara és tornar al meu codi PHP que vostè va a tornar a veure més d'en PSet7. I en comptes d'endollar en valors codificats dures que no sembla com un molt lloc web dinàmic, Vaig a donar-li un teaser de el que faria el seu codi real. Es podria posar en dos, signes d'interrogació com aquest. No sé el que el nom d'usuari és. No sé el que el nom serà, però sí que sé que puc aconseguir-los de forma dinàmica. Així que, si el codi que estem escrivint ara és el codi que s'executa en els servidors de Google, o si es tracta hola dot PHP, que ve amb PSet6, Vaig a passar a la funció de consulta igual que printf, dos arguments. GET, cita, nom d'usuari unquote, i GET, cita, el nom de la fi de la cita. I ara, observi el que el estructura general és aquí. Tinc a l'esquerra part de la trucada, aquesta funció crida consulta en PHP. Encara tinc com a primera argument, només una cadena de text. Però aquesta cadena de text és escrit en un llenguatge anomenat SQL. I, francament, no és una llengua gran. Només parlarem de formalment avui, de veritat. I després en el conjunt de problemes 07:00, hi ha relativament algunes característiques que estem va a aprofitar. Els signes d'interrogació, però, signifiquen que connectar un valor aquí i tap en un altre valor aquí. I fixeu-vos, he omès el de tot el maleït quote-- it-- al voltant de la cita marca aquest moment. He omès la cita marques de tot el signe d'interrogació, Malauradament, en aquesta ocasió. Així que, quin és bo d'això funció del signe d'interrogació que PHP tendeix a donar suport, Ruby i Python i altres llenguatges, això només significa l'endoll d'alguna valora aquí i saps què? A determinar si s'ha d'utilitzar cometes simples o dobles. No em molestis amb els detalls intel·lectualment poc interessants. Però, assegureu-vos que és correcta perquè el meu codi és en última instància, operativa i segura, la qual cosa tindrà un significat en poc temps. Ara, quants arguments en total, només per ser clar, és la funció de presa de consulta? Algú vol votar per més de dos? Tres? És clar, per què? Per què tres? AUDIÈNCIA: [inaudible] DAVID Malan: Exactament. La primera part és la cadena. El segon argument és el signe de dòlar ressaltar GET suport de nom d'usuari. I el tercer argument és el el mateix, però només el nom. Així, en altres paraules, ara si jo tingués un formulari web que tenien als camps de text, un per al nom d'usuari, un pel seu nom, igual com pots veure en una pàgina web quan es registra per algun lloc web, això podria ser el codi en la part final que realment fa la inserció ara a la base de dades. Ara per contra, anem a avançar ràpidament. Suposem que un usuari és ara ingressar i desitja escriure codi PHP que comprova si la persona que acaba d'iniciar sessió és en realitat un usuari, pot utilitzar la sintaxi molt simple. Es pot dir SELECT, diguem estrella, on significa estrella tot. No sé el que vull volen, així que simplement me totes les columnes de la taula crida als usuaris en els quals, i això és bo. Seleccioneu recolza el que és anomenat un predicat, que és com una manera de qualificar el que vols. On nom d'usuari és igual Ho van dir ells Malan. Així que aquí també, que he incrustat dins de l'argument a una funció de PHP, una línia de codi SQL. I aquest codi SQL està vegada que se'n va, literalment, per buscar Ho van dir ells Malan. Ara això no és del tot útil, així que em vaig a saltar aquesta i jo vaig a posar distància aquest consell de Brady, i vagi i plug-in en el seu lloc un signe d'interrogació aquí. Per tant, només perquè quedi clar, el que he d'informar al meu segon argument se si algú acaba d'iniciar sessió i jo que vulgueu comprovar si ell o ella és en realitat un usuari? AUDIÈNCIA: [inaudible] DAVID Malan: Sí. Sento dòlar signe de subratllat Obtenir cotització, nom d'usuari unquote. I això hauria de tornar a mi qualsevol de les files en la meva base de dades que tenen un nom d'usuari de Malan. Ara amb sort, vaig a tornar zero si no Malan ha estat aquí, o un si ell té. No hauria de tornar dues o tres o quatre. Per què? AUDIÈNCIA: [inaudible] DAVID Malan: Vaig dir únic, oi? Raó simple. Perquè li vaig dir que ha de ser únic, simplement lògicament, només es pot tenir zero o un Malans en aquesta taula de base de dades en particular. Ara com un a part, perquè l'has vist que, tot i que segueixo fent servir GET i encara PSet6 només s'utilitzen GET, que sens dubte pot tenir POST. I recordem que Post és una altra tècnica per a la presentació de la informació d'una forma, però no apareix en la URL. És una mica més segur sens dubte per coses com noms d'usuari i contrasenyes, PSet7 que, de fet, impliquen. Per tant, farem això en PHP MyAdmin i veure què passa. Vaig a anar a la pestanya de MySQL. I compte que el valor predeterminat per PHP MyAdmin, només per tractar de ser útil, és seleccionar l'estrella dels usuaris on un. Bé, un sempre és cert, per la qual això té la tonta efectiva de només has de seleccionar tot. Però jo seré una mica més pedant i manual escrigui a terme estrella SELECT FROM usuaris. Ara tècnicament, pot citar el nom de les taules. És estrany que vostè ha de, però noten aquests no són seus pressupostos normals en el teclat d'Estats Units. Aquest és el backtick trucada, que generalment en la part superior esquerra cantonada del seu teclat. Però és estrany que Tu en realitat ha de molestar amb això, així que vaig a ometre totes maneres. Així que ara, deixa anar endavant i va colpejar anar. I quantes files he d'obtenir tornar quan selecciono l'estrella dels usuaris? AUDIÈNCIA: [inaudible] DAVID Malan: El nombre de files, segur. Però, quants en aquest pisos de concret en aquest moment? Dos, perquè no hi havia mi i no hi havia Rob. Per tant, si faig clic a Vés, veig visualment que He aconseguit tornar, de fet, dues files. Hi ha una gran quantitat de desordre en la pantalla, però només veig dues files. Per contra, si ho faig de nou i fer Estrelles SELECT FROM usuaris, en el seu nom d'usuari és igual a la cita, fi de la cita Malan, ara si em feu clic a Vés, Jo només vaig a tornar una fila. I finalment, si ho faig alguna cosa com això, suposem que no m'importa aconseguir tot, que és una mena de sentit ara, perquè hi ha només dues columnes. No és com que estic seleccionant una enorme quantitat de dades. Suposem que seguir endavant i no seleccioneu el nom des usuaris, on nom d'usuari és igual a Malan, el bo de SQL amb honestedat, és que en realitat només fa el que li dius que faci. És bastant succinta, però que, literalment, simplement dir-li el que vols fer. Seleccioneu el nom dels usuaris on el nom d'usuari és igual a Malan. I realment és així d'explícit. Així que, ara si em va colpejar Go, quants files vaig a tornar? Un, perquè és només Malan, és d'esperar. O zero si no està allà, però un al màxim. I quantes columnes vaig a tornar? Quantes columnes? Aquesta vegada, només vaig per aconseguir un perquè jo no vaig fer seleccioneu estrella, que és tot. Ara estic seleccionant sol nom, així que simplement tornar a una columna i una fila. I sembla una mena de forma adequada ridícul, super mirant petit com aquest. Per tant, el que realment està passant? A l'executar un SQL consulta mitjançant selecció, el que està rebent de tornada de la base de dades és com una taula temporal amb files i columnes, potser, però que omet res a No va ser realment triat per vostè. Així, és com si algú tenia una gran full de càlcul de tots els estudiants registrada per alguna grup d'estudiants, i dius: dóna'm tot el primer any que han registrada per al nostre grup d'alumnes, el que el seu col·lega en el grup d'estudiants podria fer és que només es podien lliurar que tot el full de càlcul. Això és com dir que seleccioni estrelles. I que és una mica molest si només volia que l'estudiant de primer any. I així, si en comptes de dir, seleccioneu l'estrella de la taula de base de dades on l'any és igual a cita, estudiant de primer any final de la cita, és com si el teu amic en el grup d'estudiants literalment ressaltat i copiats només les files de primer any, els pega en un nou Google Full de càlcul o un arxiu d'Excel, i va tornar el resultant només arxiu. Això és tot el que està passant en conceptualment aquí. Així que al final, el que podem fer algunes coses bastant luxe emmagatzemant coses com noms d'usuari i contrasenyes i similars. Però, resulta que hem de fer una mica diferent a això. No és tan intel·ligent com per només emmagatzemar un nom d'usuari i una contrasenya. Algú anterior, crec que aquí baix, es suggereix una identificació. Ara una identificació podria ser com un Harvard identificació o de Yale Net ID, però podria ser fins i tot més simple en el nostre cas la base de dades. I, en efecte, el cas comú és tenir una altra columna. I jo vaig a anar endavant i editar la meva taula. I si jugues una mica amb aquesta interfície per PSet7, veuràs que es pot comprovar aquest botó aquí i afegir un camp al començament de la taula. I ara si faig clic a Vés, va que em donés una d'aquestes formes d'abans. Vaig a afegir un camp anomenat ID. I jo faré que sigui un tipus numèric. Tinc un munt de valors per als valors numèrics. Jo només vaig a triar un INT i No et preocupis per les mides dispars. Jo no he de especificar una longitud o un valor, perquè serà 32 bits no importa què. Atributs, no vam veure abans. Qualsevol interès en qualsevol d'aquests opcions de menú en aquesta ocasió? Per a una INT? Què proposes? No? ¿Algun d'ells té sentit? Sí. Sí, sense signar, oi? Generalment, si anem a donar cadascun un nombre únic, que és on aquesta història és va, jo en realitat només vull que una persona tingui el nombre com zero i un-dos i tres i quatre. Jo no necessito per fer front amb nombres negatius. Simplement sembla que la complexitat excessiva. Vull 4000000000 de valors possibles, no 4000000000 de valors possibles, així que només duplicant la capacitat de la meva INT. Com acotació al marge, si vols relacionar això a alguna cosa com Facebook, tornada en classe del meu dia en què Facebook va sortir per primera vegada, Crec que el que eren utilitzant a la base de dades MySQL per emmagatzemar un usuari de identificador, era només un INT. Però, és clar, hi ha molt de gent real en el món. Hi ha una gran quantitat de falsos Facebook comptes en el món. I pel que finalment, Facebook va desbordar la mida d'un INT, un de quatre mil milions valor. Raó per la qual, si ens fixem voltant i hi ha llocs web que pot dir-li el que el seu identificador únic és. I si mai tria un nom d'usuari a Facebook, veuràs el teu ID únic. Crec que és el perfil PHP dot signe d'interrogació ID és igual a alguna cosa. Això és ara una cosa així com un gran INT, o un llarg temps si es vol, que és un valor de 64 bits o alguna cosa semblant. Així que, fins i tot en el món real fer això qüestions en última instància, de vegades importen. I resulta que aquí, si sóc donant a tots els meus usuaris un identificador únic, Vull ser super explícita i mínimament fer d'aquest camp únic. Però resulta que hi ha una tros de nomenclatura també avui això és una clau principal. Si vostè està dissenyant una base de dades taula i vostè sap per endavant que una de les columnes d'aquesta taula ha i va identificar de forma exclusiva les files a la taula, que desitja especificar i dir-li a la base de dades, aquest és el meu clau principal. Hi pot haver duplicats en altres camps, però jo estic dient la base de dades que aquesta és el meu primària, el meu camp més important, això garanteix que sigui únic. Ara, això sembla redundant. Ara estic proposant que ens afegir, fent clic a Desa aquí, 1 called-- camp i vaig seguir endavant i feu clic a la IA, tornarem a que en un moment, Save. Estic proposant ara que la meva taula aquest aspecte. Tinc un camp INT anomenada ID, un camp CHAR anomenat nom d'usuari, un camp VARCHAR anomenada Nom, però ID, si és primari i per tant, únic, Per què m'acaba de perdre el temps de la introducció del efectivament és un segon única camp anomenat ID que és un INT? Nom d'usuari, record, era Ja únic, vam dir. Així que, lògicament, no cal cap experiència de base de dades a la raó a través d'aquest, per què pot ser que he introduït 1 INT com el meu identificador únic també? Què té esto-- diuen una altra vegada? AUDIÈNCIA: [inaudible] DAVID Malan: Random l'accés és més fàcil, per què? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, és simplement accedir als números. Per tant, si vostè pensa d'aquesta veritat és una taula, com una matriu, Ara tinc identificadors únics que puc saltar. I encara millor que la que és Com de gran és un INT va ser una altra vegada? 32 bits o quatre bytes. Què tan gran és el meu nom d'usuari serà? Al màxim? 16 bytes. Per tant, si vostè està realment preocupar-se per el rendiment del seu codi, pensa de nou a PSet5, preferiria per buscar un valor de quatre bytes o un 16 valor de byte, oi? Realment és tan simple com això. Vostè ha de fer quatre vegades més quantitat de treball per buscar noms d'usuari perquè aquests són 16 bytes. Per tant, vostè ha de, literalment, comparar els 16 bytes per ser Segur que sí, això és nom d'usuari que vull. Mentre que per a un INT, pot fer-ho amb només quatre bytes. I com un a part per a aquells interessat en maquinari, Resulta que vostè pot cabre una cosa així 1 un valor de 32 bits en alguna cosa o INT denominat un registre en un ordinador CPU, el que significa que és super, super ràpid, fins i tot a les més baixes nivell de maquinari de l'equip. Per tant, només hi ha avantatges per totes bandes. Així que, què vol dir això? De fet, quan vostè està dissenyant un taula de base de dades, gairebé tot el temps vas per no haver només les dades que t'importa, sinó també una mena un identificador únic perquè això es va a farem altres coses. I anem a ensopegar amb un problema aquí. Suposem que els usuaris no tenen només els noms d'usuari i noms, però també tenen coses com ciutats i els estats i codis postals, almenys aquí als EUA .. Per tant, seguiré endavant i dir ràpidament, dóna'm tres columnes més al final de la taula. I això va a ser la ciutat, això va a ser Estat, i això serà Zip. Ara tipus City, el dades ha de ser això, potser? VARCHAR? No sé el que el més llarg nom de la ciutat és. En algun lloc dels Estats Units, no hi ha Probablement alguna paraula ridículament llarg, així que anirem amb 255, una mica històricament o arbitràriament. Estat, el que vols fer? Qüestió de criteri, no? El que és potser el més eficient? Quants personatges? Potser només dos, si podem sortir amb la seva fent precisament, com, MA de Massachusetts i així successivament. Per tant, vaig a anar a un valor CHAR de dos. Codi postal és molt interessant. Som aquí a 02.138, de manera que suggereix que hem d'utilitzar i què? És un INT, oi? INT, INT, talla? Curt funcionaria. No? CHAR o cinc, però vull una INT. Per què fer retrocedir en un INT? Convèncer d'això. Quin és estúpid sobre un INT, la meva idea? Sí. AUDIÈNCIA: Recollir més memòria. DAVID Malan: Recollir més memòria. Quatre bytes, però ets proposar un codi postal com cinc bytes o algú era com CHAR, que se sent com eh, això no és realment el cas. Bé, divertida història. Fa anys, quan jo solia utilitzar Microsoft Outlook per a mi correu electrònic, Finalment em volia canviar a Gmail. I així, he exportat tots els de la meva contactes d'Outlook com un fitxer CSV. Valors separats per comes, que simplement significava que tenia totes les meves noms d'amics i última noms i números de telèfon i codis postals i tot això. I llavors vaig fer la error d'obrir-lo en Excel, que és una programa de full de càlcul que entén arxius CSV com hem vist. Però llavors, dec haver colpejat, com, Comando o control S en un punt. I Excel semblar en el moment tingut una característica mitjançant el qual qualsevol moment va veure un nombre, que va tractar de ser útil. I si aquest nombre es va iniciar amb zeros, només es lliurarien d'ells. Per què necessita líders zeros en nombres enters? Són sentit, matemàticament. No són de sentit en el sistema postal dels EUA. Així, he tingut durant anys, a aquest dia, encara tenir amics que quan el cas estrany que jo necessito algú és abordar aquests dies, Jo encara veig que jo tenir un amic a Cambridge, Massachusetts, 2.138. I és molest si estàs tractant d'ordenar de programació generar sobres o simplement apúntelo. I és per aquesta raó, Vaig triar el tipus de dades incorrecte. Així que, m'encanta la teva idea. Utilitzarem un camp CHAR. Cinc personatges, excepte hi ha un cas cantonada. Si encara enviar correu, de vegades codis postals en aquests dies, que són, com, més quatre. Per tant, necessitem un guió i després necessitem quatre números més. Així que per ser honest, podria anar moltes maneres diferents. Per ara, em vaig a seguir simple i estic dirà que és un cinc per valor CHAR i estem va saltar tot el tauler més 4. Però aquests són els tipus de compensacions. I es pot pensar en el mateixos problemes que sorgeixen amb números de telèfon o altres camps. I ara, això és en realitat un camí absurd baixar. Suposem que tant Rob i jo i Hannah i Maria i [? Davon?] I Andy i altres en el personal de tots viuen a Cambridge, Massachusetts, 02138. En realitat, això se sent estúpid que sóc afegir a la meva taula d'usuaris, ciutat, estat, i el codi postal. Per què? AUDIÈNCIA: [inaudible] DAVID Malan: Digui una altra vegada? AUDIÈNCIA: [inaudible] DAVID Malan: Sempre són va a anar de la mà, no? Quan resulta que solíem pensar aquest va ser el cas fins que taxativament buscat tot els EUA, i resulta que hi ha són algunes inconsistències on diversos pobles tenen la mateixa postal, la qual cosa és rar. Però, si vam estipular per ara que 02.138 és sempre Cambridge, Massachusetts, ¿Per què en el món li guardi en la seva base de dades de Cambridge i MA i 02138 per a mi i per Hannah i per Rob i per [? Davon?] I pels altres que viuen aquí a Cambridge, és perfectament redundant. Hem de fugir amb només l'emmagatzematge de què? Només el codi postal. Però llavors, si emmagatzemem només la codi postal, sí vull, probablement, per al meu lloc web per saber on és 02.138. Per tant, necessito una altra taula. I això està bé. I de fet, aquesta és una de les processos de disseny de taules de disseny que va a fer en PSet7 així pel qual desitja factoritzar dades comunes. Igual que hem estat factoritzar codi comú i factoring terme comú estils de CSS, aquí també a la base de dades, si només necessito 02.138 a única identificar la ciutat natal d'algú, no emmagatzemi Cambridge, Mass per cada usuari de sargir a la seva taula. En el seu lloc, tenir una taula separada anomenada Cremalleres que ha de tenir el columnes? Probablement un camp d'ID, simplement perquè, per els principis que estan parlant ara. Probablement un camp postal per 02.138. I llavors probablement el que altres columnes? Ciutat i estat, però només tenen un fila de 02138, una fila per 02139, una fila per 90.210. I això és, literalment, tots els codis postals que conec. Així que ara, què pots fer? Això és problemàtic, perquè ara tinc dues taules. Per tant, els meus usuaris són majoritàriament per aquí, però la seva informació d'estat de la ciutat és per aquí. Així, resulta que amb SQL, hi ha en realitat una manera d'unir-se a la informació, i veurà això en el PSet. Però resulta que puguis fer alguna cosa com això. Estrelles SELECT FROM usuaris, UNEIX-TE cremalleres A usuaris esquitxen postal és igual cremalleres esquitxen postal. La qual cosa és una mica prolix, és cert, però això només significa seleccioneu tot, des de la procés de prendre la meva taula d'usuaris i la meva taula de cremalleres. Uneix-te a ells, per un camp que tenen en columna. Així que, literalment, fer alguna cosa així, i Devuélveme una nova taula temporal això és més ampli, que és més gran, que té totes les columnes de tots dos. I això, simplement, seria el sintaxi per a fer alguna cosa com això. Així, hi ha un futur, però no va ser altres decisions de disseny que vostè han de fer, no només amb índexs sinó que també s'executa en desafiaments. De fet, hi ha un desafiament en qualsevol disseny de base de dades pel qual a vegades dues persones podrien voler per accedir a les mateixes files de la base de dades taula. Per tant, això és una cosa que anem a trobar en PSet7 també. Però vaig pensar que em veuria en un atac que és possible en SQL. Quins són alguns dels problemes que poden sorgir? Per tant, et trobaràs això en PSet7. I els diem obertament el que el solució de codificació per a aquest problema és. Però si vostè pren una classe de nivell superior, especialment en els sistemes operatius, trobaràs un tema d'atomicidad, el problema de tractar de fer diverses coses alhora sense interrupció. I vaig pensar en presentar-me aquest idea per PSet7 amb una metàfora que he après jo en Margo Sistemes operatius CS164 de Seltzer Fa anys la classe. Suposem que vostè té una d'aquestes dormitori nevera a la seva habitació de la residència o casa, i vostè té una veritable afició per la llet. I així, s'arriba a casa després de les classes un dia, obrir la nevera. Oh, maleïda sigui. No hi ha llet a la nevera. Així, es tanca la nevera, tancar la porta, bloquejar seu dormitori, caminar al voltant de la cantonada a CVS, posar-se en fila, i començar a comprovar cap a fora per una mica de llet. I va a prendre un temps, perquè aquests maleïts autoservei comptadors triguen una eternitat per utilitzar de totes maneres. Així que mentre tant, el seu company de quart arriba a casa. Ell o ella realment li agrada la llet també. Ells entren a l'habitació de la residència, obrir la nevera, oh, maleïda sigui. No hi ha més llet. Per tant, ell o ella també que passa al voltant de la cantonada. Però ara, ja que no hi ha com dos o tres o quatre CVSes a prop, passen a anar a un dels diferents a la plaça. I ara, uns pocs minuts més tard, els dos tornar a casa i ugh, pitjor problema mai. Ara vostè té massa llet perquè va a anar agra. I t'agrada la llet, però no m'agrada realment la llet. Així que ara, això era un car error perquè tots dos pres una decisió sobre la base de la estat d'alguna variable que estava en el procés de ser canviat per vostè, l'iniciador d'anar a comprar llet. Per tant, el que és potser un ésser humà solució a aquest problema? AUDIÈNCIA: [inaudible] DAVID Malan: Deixa una nota, oi? Sempre deixi una nota, si estàs familiaritzats amb aquest programa. Sí, hi ha dos de nosaltres. Per tant, sempre deixar una nota, o bloquejar literalment la nevera amb algun tipus de cadenat o una mica per sobre d'això. Però això és en realitat serà problema clau amb el disseny de la base de dades, especialment quan és possible que tingui diversos navegadors, múltiples ordinadors portàtils, diversos usuaris intenten tot actualitzar la informació alhora. La informació particularment sensible com la informació financera, pel qual amb un comerç d'accions lloc web com vostè va a ser la construcció, ¿I si voleu comprovar la quantitat de diners que té i llavors, si vostè té prou, comprar algunes accions? Però el que si algú més que té un compte conjunt amb vostè és tractar de forma simultània per comprar una mica de brou? Per tant, ell o ella és el control de la saldo del compte, els dos tornar al mateix resposta, no hi ha llet. O tots dos a tornar la resposta, vostè té $ 100 en el compte. Tots dos tracten de prendre la decisió per comprar una acció d'algunes accions de la companyia. I ara, què passa? Vostè té dues accions? No té accions? Problemes com la que poden sorgir. Així que vas a trobar això. Atacs d'injecció SQL, per sort, són una cosa que nosaltres l'ajudarem amb, però aquests són atrociously comuns en aquests dies encara. Per tant, això és només un exemple. Jo no faig afirmacions que Sistema de Harvard PIN és vulnerables a aquest atac en particular. Hem intentat. Però, ja saps que nosaltres tenir un camp com aquest. I de Yale Net ID té una semblança que miri aquests dies. I resulta, que potser el Sistema de PIN està implementat en PHP. I si were-- és no-- que podria tenir codi que s'assembla a això. Tenen dues variables. Dóna'm el nom d'usuari i contrasenya de la variable global post súper que hem parlat abans. Potser Harvard té una consulta com l'estrella SELECT FROM usuaris on nom d'usuari és igual que i la contrasenya és igual que. I noto que estic sol endollar en l'ús de la notació de claudàtor de l'altra dia, el que significa que només ha de connectar un valor aquí. No estic fent servir la tècnica de signe d'interrogació. Jo no tinc cap segons o terceres arguments. Estic literalment la construcció de la cadena de mi mateix. El problema, però, és que si algú li agrada un scroob, que és una referència a una pel·lícula, Obre una sessió amb alguna cosa com això, i m'he tret els punts que sol encobrir contrasenyes, el que si és particularment maliciós i la contrasenya potser és 12345, per la pel·lícula anomenada "Spaceballs" però críticament els tipus A cometa simple després dels cinc, després, literalment, la paraula o en l'espai, i després cita, un sol cap de la cita és igual a la cita un, Però Recordeu que ha omès què? Ha omès la cita a la dreta i ha omès la cita de l'esquerra. Perquè si aquest atacant presumpció de scroob és que les persones que van escriure aquest codi PHP no fos tan brillant, potser només tenen algun sola cita a la volta de la interpolació d'una variable entre claus? I el que potser, el que va poder tipus de completar el seu pensament per a ells, però d'una manera que va per deixar-hackeó el sistema PIN. En altres paraules, suposem que aquest és el codi de i ara ens connectem el scroob escrit. I és vermell, perquè és dolent. I el text subjacent és el que ell escriu en, scroob podria enganyar servidor de Harvard en la construcció d'una consulta SQL cadena que s'assembla a això. Contrasenya és igual a 12.345 o un és igual a un. El resultat de tot això, lògicament, és que aquesta registrarà scroob en si la seva contrasenya és 12345 o si un és igual a un, que per descomptat és sempre cert, el que significa scroob sempre entra. I així, la manera d'arreglar això, com en molts casos, seria escriure més defensiu. Per servir alguna cosa com la nostra funció de consulta real, que veurà en PSet7, on ens connectem una mena de signes d'interrogació aquí. I la bellesa de la funció de consulta que et donen és que defensa contra aquests els anomenats atacs d'injecció SQL, on algú està enganyant al seu codi en injectar el seu propi codi SQL. Perquè el que la funció de consulta donem en realitat es va fer, si utilitza la sintaxi de signe d'interrogació i un segon i un tercer argument aquí, és què afegir a la d'entrada que l'usuari sempre? Aquells barra invertida cita. Per tant, escapa a qualsevol potencialment caràcters perillosos. Això sembla estrany ara, però no és vulnerable perquè no fa canviar la lògica ja perquè tota aquesta contrasenya és Ara una sola cita que no ho és, De fet, la contrasenya de l'scroob. Així, hi ha hagut alguns acudits sobre això en els últims anys. Per tant, es tractava d'una foto presa d'algun friki en un estacionament pel que vostè pot ser que sàpiga que algunes ciutats i els estats tracten d'escanejar la seva llicència placa per facturar-a vostè o al tiquet si es va per fora, com, la cosa E-Z Pass. Per tant, aquesta persona presumeix que potser la gent que escriu el sistema E-Z Pass no eren tan brillants, i potser només concatenats junts una cadena, perquè ell o ella no podia maliciosament no només completar el seu pensament, però en realitat executar una ordre incorrecte, que encara no hem esmentat, però és fàcil endevinar. Que a més d'eliminar i inserir i actualitzar i seleccionar, també hi ha una paraula clau anomenada gota, que esborra literalment tot a la base de dades, la qual és particularment dolent. Podem fer un zoom en aquest cas que és una mica difícil de veure. Això, ara, és un famós dibuix animat això és meravellosament intel·ligent ara i comprensible. [El] Sí, fresc. Tipus d'geeking terme. Així que aquests són, doncs, Atacs d'injecció SQL. I són tan fàcils d'evitar mitjançant l'ús de el codi correcte o les biblioteques adequades. I veuràs en PSet7, això és per això et donem la funció de consulta. Així que, un parell de teasers que pensem que seria millor li donarà aquí a la nostra restant minuts junts. Així que, com vostè recorda de setmana zero, introduït aquests dos bombetes que són agradables, no només perquè que són bastant i són colorits, però perquè donen suport mica anomenat un API, un Sol·licitud Interfície de programació d'I en CS50 fins al moment, no tenim sobretot centrat en GET i POST, però resulta hi ha altres verbs HTTP com PUT. I de fet, això era una diapositiva de setmana zero amb la qual cosa si s'escriu codi que envia a la PSet6 una petició HTTP que són aquestes amb aquest tros de text a la part inferior, que es diu JSON, o JavaScript Object Notation que parlarem de la propera setmana, pot activar o desactivar o canviar el color de les llums com aquestes. Així que si CS50 també té, a més d'alguns d'aquestes bombetes aquí a New Haven si voleu demanar prestat per als projectes finals, també una mica de Microsoft Bandes, que són com els rellotges que utilitzeu al voltant del canell que de la mateixa manera tenir una API perquè pot escriure el seu propi programari per a ells. Tenim un compte amb Codi de iOS d'Apple fins que si vostè té un rellotge d'Apple o un iPhone o un iPad o un iPod, vostè pot escriure codi que en realitat s'executa en ells. Tenim un munt de Arduinos, que són diminuts ordinadors sense casos, en essència, que es pot connectar a través d'USB, normalment al seu propi Mac o PC, escriure codi que s'executa en aquests física dispositius que sovint tenen sensors en ells perquè pugui interactuar amb el món real. Tenim un munt de dispositius Leap Motion, que són els dispositius USB per a Mac i PC, aquí i una altra vegada, a New Haven. I si ho connectes al teu Mac, en realitat es pot controlar l'ordinador escrivint programari que a través de raigs infrarojos, s'adona on són els seus mans humanes són, fins i tot sense tocar el teclat. Pensem que ens agradaria compartir una ràpida albirar en aquest, per exemple. [REPRODUCCIÓ DE MÚSICA] Així doncs, tenim un tot munt d'aquestes coses, també, anomenat Myo braçalets que es posa sobre l'avantbraç i llavors vostè pot controlar la realitat món o el món virtual com aquest. [REPRODUCCIÓ DE MÚSICA] O, també tenim alguns Google Cartró, que és, literalment, com, una caixa de cartró es pot posar en el seu cara, però diapositiva en el seu telèfon en ell de manera que es posa el got de la seva telèfon molt a prop dels seus ulls. I Google és de cartró bastant barat a $ 10 o $ 20. I té petits lents que una mica fora de torn la imatge a la pantalla per a la seva humana ulls per donar-li una sensació de profunditat pel que en realitat té un 3D medi ambient davant teu. També tenim alguns Samsung Gear, que és la versió més cara d'aquest, però que pot lliscar de manera similar en una Telèfon Android i li donarà la il·lusió de-- o donar l'experiència de la realitat virtual. I a les nostres dos minuts finals, pensem que ens agradaria provar a fer això. Si puc projectar el Colton té aquí només per anar fent boca, m'ho dius a mi anar per davant i tirar dalt a la pantalla gran aquí. Déjame matar els llums. Colton, vols anar a continuació i posar en el teu mòbil per un moment i vénen de més a la mig de l'escenari? I què vols project-- això és el que veu Colton. Ara, el Wi-Fi aquí és no tan fort per a aquest dispositiu que aquest és súper atractiva, però Colton és, literalment, en aquest lloc futurista màgic. Ell només veu una imatge. Vostè està veient l'ull esquerre i el dret que el seu cervell estan cosint junts en una de tres dimensions medi ambient a la cara. Ell només ha seleccionat una opció de menú aquí. I així, un cop més, ell està usant aquest auricular amb un telèfon Samsung a ell que és sense fils projectar als nostres despeses. Ara vostè està a Mart, em sembla? COLTON: Crec que si. No estic segur de [inaudible]. [El] DAVID Malan: Resulta Mart té aquests menús. COLTON: [inaudible] alguns fresc llocs si volen anar A-- DAVID Malan: Cap a on volem anar? COLTON: [inaudible] DAVID Malan: I veurem on ens Colton de prendre ara. COLTON: [inaudible] DAVID Malan: Per tant, hi ha tants diferents llocs als que poden prendre vostè mateix. Hi ha FAPIs través del qual es pot escriure jocs o interaccions que executar, en última instància, al telèfon. Per tant, el que realment escriure una aplicació de telèfon mòbil. Però gràcies al programari i les capacitats gràfiques, Colton ara és en aquest petita caseta. I en el risc de aclaparar a nosaltres mateixos, Colton i jo em quedo al voltant de mentre que al final de la classe avui si t'agradaria venir i jugar. I anem a portar-los la setmana que ve també. Sense més, ADO això és tot per avui. Ens veiem la setmana que ve. [MÚSICA - Ragga Twins, "home dolent"]