[Música tocando] DAVID Malan: Todo ben, iso é CS50. Este é o fin de semana oito. E hoxe, imos comezar para cubrir algunhas pezas cando se trata de construción cousas na web. Entón, lembre que o luns gastamos moito máis tempo en PHP, que é esta dinámica linguaxe de programación que permítenos de saída, entre outros cousas, HTML e outro tal contido que vai querer ver. Pero non temos realmente mirou como nós estamos indo a almacenar calquera información. De feito, case calquera de que a super- sitios interesantes que visita hoxe ter algún tipo de base de datos no back-end, non? Facebook seguramente almacena grandes cantidades de datos sobre todos e tendas Gmail todo dos seus correos electrónicos. E así, moitos outros sitios non son só contido estático que é informativo. Realmente dinámico de algunha maneira. Fornecer información, el actualiza as páxinas a outras persoas. Recibe mensaxes, envía mensaxes, e así por diante. Entón, hoxe, miramos máis de preto as bases dun proxecto que vai mergullo na próxima semana, CS50 Finanzas, que é, en realidade, vai ter que construír algo non en C, pero en PHP. Un sitio que parece un pouco algo así que permite mercar e vender accións que son, en realidade, vai basearse en tempo real datos de accións de Yahoo Finance. E así, en definitiva, terá a ilusión para si mesmo e para os usuarios que en realidade está comprando e vendendo accións e recibir case tempo real, actualizacións, xestión dun carteira, todos os cales vai esixir ter, en definitiva, unha base de datos de usuarios. Así, nas súas propias palabras, especialmente se non está Super familiarizado con ordenador ciencia ou bases de datos, o que Coñeces unha base de datos para ser agora, en termos non-técnicos? Que é iso? Como o describiría coa persoa ou un amigo? Audiencia: [inaudível] información [inaudível] DAVID Malan: Entón, unha lista de información, ou un store-- unha lista de información que pode querer almacenar sobre algo, como un usuario. E o que os usuarios teñan asociado con eles? Se vostede é un usuario de Facebook ou Gmail, cales son as características que todos os usuarios teñen? Como, o que podería ser algúns dos columnas na folla de cálculo para que aludido última vez? Porque unha vez, pode pensar en unha base de datos realmente como un arquivo Excel fantasía ou Google Folla de cálculo ou ficheiro Números Apple. Entón, o que pensas de cando pensa dun usuario? O que teñen? Que é iso? Audiencia: Un nome. DAVID Malan: Un nome. Entón, se o nome, tipo, David Malan sería o nome dalgún usuario. O que máis fai un usuario ten? Audiencia: Unha ID. DAVID Malan: Unha ID. Así, como un número de identificación, como o seu Harvard ID ou o seu Yale ID Net ou similares. O que máis pode un usuario ten? Audiencia: Contrasinal. DAVID Malan: Unha contrasinal, quizais un dirección, quizais un número de teléfono, talvez un enderezo de correo electrónico. Así, non hai acios de campos e esta podería especie de espiral fóra de control rapidamente, así que comezar entendendo, oh, imos gardar este e imos gardar isto e aquilo. Pero como é que imos realmente facer iso? Entón, de novo, o modelo mental ter para hoxe coma nós mergullo SQL real, Structured Query Language, é unha base de datos que se parece con isto. É só liñas e columnas. E pode imaxinar Google Spreadsheets ou calquera número de outros programas. Pero o que é importante sobre MySQL, que é o software de base de datos que imos usar, o libremente abertamente available-- usos Facebook isto e calquera outro número de websites-- base de datos almacena as cousas relacionalmente. E unha base de datos relacional Significa só que, literalmente, almacena os seus datos en filas e columnas. É tan sinxelo coma iso. Así, mesmo algo así como Oracle que pode ter oído falar de modo xeral é unha base de datos relacional. E baixo o capuz, isto almacena os datos en filas e columnas. E Oracle cobra unha moito diñeiro para facelo, tendo en conta que taxas MySQL nada para o mesmo. Polo tanto, SQL vai dar polo menos, catro operacións. A capacidade de seleccionar datos, como lectura datos, inserir, eliminar e actualizar datos. Noutras palabras, son os realmente as catro operacións fundamentais que van permitir-nos a cambiar material naquelas liñas e columnas. A ferramenta que usaremos hoxe, especialmente para aprender SQL e xogar con el é de novo chamado PHP MyAdmin. É ferramenta baseada na web é. Coincidencia total que está escrito en PHP. Pero só pode dar unha gráfica interface de usuario para que poidamos realmente crear esas liñas e columnas e, a continuación, falar con eles vía código. Entón, imos agora comezar a o que eu creo que é a verdade tipo do proceso de diversión a construción de back-end de sitios web, as partes que os usuarios non ver, pero seguro se preocupan, porque iso é un pouco de datos indo. Así, semellante a C e unha pouco menos como PHP, SQL ou unha base de datos que soporta SQL, ten polo menos este tipo de datos e acios de outros. CHAR, varchar, INT, BIGINT, Decimal e DATETIME. E non hai un todo banda de outros recursos, pero imos facelo Por exemplo real. Eu estou indo a ir a CS50 IDE onde, con antelación, eu sesión e eu tamén visitou un URL para esta ferramenta chamada PHP MyAdmin. E no conxunto de problemas de sete, nós imos dizer- exactamente como chegar a esta interface ben. Na esquina superior esquerda, Teña en conta que di charla. E iso só quere dicir que con antelación, eu creei unha base de datos chamado de lectura baleiro que non ten follas nel aínda. Non hai liñas e columnas. Porque o primeiro cousa que faremos é comezar a crear unha táboa que está indo a almacenar os nosos usuarios. Entón, literalmente sobre aquí para a dereita, son vai dicir a base de datos Quero unha táboa denominada Usuarios. Entón, iso é como o arquivo que eu quere almacenar todos os meus datos en. E cantas columnas? Ben, imos mantelo simple de momento. Eu só quero gardar como un nome de usuario e un nome para un usuario. Imos comezar pequeno. Entón, quero total de dúas columnas. E eu estou indo a ir adiante e prema en Ir. E entón, para estes columnas, o que eu vou para fazer-- este Internet cooperates-- todo ben, así que imos intentar iso de novo. Eu estou indo a crear unha táboa chamada Usuarios con dúas columnas, prema en Ir, Aceptar. Agora temos que ter isto moi rápido. Grazas, moi ben feito. Todo ben, entón o que queremos estas columnas chamarse? Entón, un vai ser chamado usuario. Entón, todo o que vexo aqui-- ea interface francamente está un pouco feo, finalmente, unha vez que comezar a escribir en todos estes datos. Pero o que é bo é que tipo de paradoxalmente, estou creando columnas, pero a ferramenta ten tolamente colocounos en filas para que eu poida configurar estas columnas. Entón, hai dous espazos en branco alí Nome. E un deses campos I quere chamado usuario, eo outro campo quero chamar Name. E agora eu teño que escoller tipos de datos para esas cousas. Así, mentres en Excel e Google Spreadsheets, se queres unha columna, vostede literalmente escriba Nome ou nome de usuario, prema Intro. Quizais fai negra só para maior claridade, pero é só iso. Non especificar o tipo de columnas. Agora en Follas de Google ou Excel, pode seleccionar a forma como os datos son procesados. Podería ir ao menú Formato, e Pode especificar amosar esta cifrão como, amosar tanto como un valor de punto flotante. Entón, é semellante en espírito á que o que estamos a piques de facer, pero esta é realmente obrigará os datos a ser un certo tipo. Agora, a pesar de un momento atrás dixo que hai só algúns tipos de datos, hai realmente unha lote enteiro, e son en diferentes graos de especificidade. E como un aparte, ten pode ata facer cousas extravagantes como xeometrías de almacenamento dentro dun banco de datos. Pode almacenar cousas como coordenadas GPS e realmente atopar, matematicamente, puntos que están preto de outros. Pero imos manter esta super sinxelo e ir ata aquí, todo os chamados tipos cadea. Entón, aquí está a lista dun todo morea de opcións. CHAR, varchar, TINYTEXT, MEDIUMTEXT, LONGTEXT. E é tipo de esmagadora. E, por desgraza, un pouco paradoxalmente a C, un CHAR non é realmente un CHAR. Se só se especifica en unha base de datos que o seu tipo de datos é CHAR, isto significa que si, é unha CHAR, pero é un ou máis chars. E ten que especificar cantos chars quere. Así, que é un típico lonxitude dun nome de usuario? Existe un límite tipicamente? Audiencia: [inaudível] DAVID Malan: 16 quizais? Algo así. Vostede sabe, de volta ao día, que adoitaba ser oito. Ás veces é 16, ás veces é aínda máis que iso. E así, esta non fai significa darme un CHAR. Isto significa que eu teño que especificar a lonxitude do campo, e agora eu podería dicir algo así como 16. E hai un trade off aquí. Entón, imos ver nun momento isto quere dicir que un, nome de usuario ten que ser 16 caracteres. Pero agarde un minuto, M-A-L-A-N. Se iso meu nome de usuario e eu estou usando só cinco, o que propón que a base de datos o que facer para os outros 11 personaxes que Eu reservado espazo para? Que farías? Audiencia: [inaudível] DAVID Malan: Si, só facelos todos nulo. Fai-os espazos. Pero, probablemente nulo, xa que logo, un chea de ceros barra invertida. Así, por unha banda, temos agora a certeza de que o meu nome de usuario pode ser non máis que 16 caracteres. E a outra cara da moeda é que que se eu tivese un nome moi longo ou quería un tempo moi longo nome de usuario como algúns de vós caras poden nesa facultade ou en Yale.edu, non pode ter un. E así, de feito, se ten xa rexistrado a un sitio web e obter gritou dicindo a chave é moi longa ou o seu nome de usuario é moi longo, é simplemente porque un programador, cando configurar a súa base de datos, decidiu que este campo será non superior a este lonxitude ser. Todo ben, entón o que se pasamos a citar? Canto tempo debe ser un nome típico do ser humano ser? Como moitos personaxes, 16? Estou supoñendo que puidésemos atopar alguén nesta sala onde á súa primeira engade última nome ten máis de 16 caracteres. Entón, o que é mellor do que iso, 17? 18? 25? Maior? 30? Audiencia: [inaudível] DAVID Malan: 5.000, oh meu Deus. Entón, iso é probablemente un repositorio considerable límite superior, digamos así. E aquí nós medio que temos para facer unha chamada de xuízo. Como, non hai ningunha resposta correcta aquí. Infinito non é moi posible, porque estamos finalmente vai have-- estamos pode ir sen memoria. Entón, nós temos que facer unha xuízo nalgún momento. Moi común sería, por exemplo, para use-- e déixeme especificar CHAR aquí como antes-- 255 era literalmente o límite superior sobre este software de base de datos fai anos. E por iso, un gran número de seres humanos Quere só de dicir, todo ben. 255 é o límite. Nós só usar o máximo. E iso é moi ridículo. Como, se está escribindo é alguén nomear a 200 caracteres máis, que un pouco ridículo. Pero lembre que non é ASCII o único sistema de carácteres. E así, especialmente nun chea de linguas asiáticas onde hai personaxes que non pode expresar en teclados como o meu US teclado, algúns personaxes realmente levar ata 16 bits en lugar de oito bits. E así, iso realmente non é tan irrazoável que necesitamos máis espazo se queremos caber caracteres maiores do que a propia US aqueles centrados nos tendían a discutir. Entón, necesitamos algún límite superior. Non sei o que é mellor, pero 255 é xeralmente un común. 25 sente abaixo. 16, 32 sentirse débil. Quere errar no lado de algo máis grande. Pero hai un trade off, como sempre. Cal é a quizais obvio trade off de reservar 255 caracteres para o nome de todos no meu base de datos? Audiencia: [inaudível] DAVID Malan: ¿Que é iso? Audiencia: [inaudível] DAVID Malan: É un gran cantidade de memoria, non? H-A-L-A-N. Acabo desperdiçado 250 caracteres só para almacenar o meu nome defensiva, só no caso de alguén na clase ten un nome moi longo. Isto parece unha compensación indebida. Así, verifícase que SQL, esta linguaxe de base de datos, realmente soporta algo chamado varchar ou CHAR variable. E este é o tipo de Niza, en que este permite que especifique un non fixo ancho, pero si, unha anchura variable. E máis concretamente, unha anchura máxima do campo. Así, isto significa que un nome pode ser non máis que 250 caracteres, pero certamente pode ser menor. E a base de datos vai ser intelixente. Se pór en M-A-L-A-N, iso só vai usar cinco, quizais seis bytes para como un carácter nulo de fuga, e non gastar un adicional 249 ou 250 bytes innecesariamente. Entón, iso parece que eu debería comezar con esta historia. Pero sempre hai un troco. Así, por unha banda, o nome de usuario teño especificada sendo codificado en 16, e quizais iso non era a chamada dereita, é posible que é, pero por que non usar VARCHARs para todo? Existe por unha razón. Por que non usar VARCHARs para cada campo cuxa lonxitude non sabe con antelación se parece ser unha gran cousa, non? Use só tanto espazo como precisa ata este límite? Audiencia: Slower. DAVID Malan: Speller? Audiencia: Faise lo máis lento? DAVID Malan: Ah, é máis lento. Bo, iso é case sempre a resposta, francamente. Como, cal é o intercambio? Quere custa máis espazo ou custa máis tempo. Entón, neste caso, pode ser máis lento. Por que? Audiencia: [inaudível] determinar [inaudível]. DAVID Malan: Good. Así, pode lembrar de mesmo PSED5, xogar coa súa visión ao dicionario, se ten que reservar memoria dinámica ou mantê- crecemento dun tapón, que realmente pode ser lento. Se ten que chamar malloc debaixo do capó e quizais iso é o que MySQL está facendo, entón seguramente que podería ser o caso. E se pensas xeito ao PSet-- ou mesmo Semanas dous, cando fixemos cousas como busca binaria ou mesmo busca lineal, unha das cousas agradables sobre cada palabra nunha base de datos ou cada palabra nunha columna sendo exactamente a mesma lonxitude, aínda un grupo enteiro dos personaxes estean en branco, é que pode usar acceso aleatorio nos seus datos, non? Se sabe que cada palabra é 16 caracteres de distancia, pode usar a aritmética de punteiro, por así falar, e ir en 16, 32, 48, 64, e pode simplemente saltar de inmediato, usando aritmética a calquera das palabras na súa base de datos. Tendo en conta que se é un varchar, o que non ten que facer? [Teléfono tocando] Se é un varchar, vostede Non pode empregar o acceso aleatorio. O que ten que buscar ou facer? Si? Audiencia: [inaudível] DAVID Malan: Olle través da liña whole-- por toda a lista ollando para o que, máis probable? Que tipo de valor especial? Audiencia: [inaudível] DAVID Malan: Mirando para os terminadores nulos que demarcar a separación de palabras. Entón, de novo, un intercambio, e non hai ningunha resposta correcta. Pero é aí, especialmente cando os usuarios chegan a ser moitos ea súa carga nos seus servidores, o número de persoas usando recibe alta, estas son realmente as decisións non triviais. Así, podemos deixar estes como este, pero imos rolar para abaixo a dereita aquí. Agora, hai un par de columnas onde temos que facer un xuízo. Será que ten sentido para permitir que un usuario de nome, nome de usuario dun usuario ou un usuario de nome, para ser nulo? É dicir, só en branco. Sente un pouco sen sentido, así que eu son non indo para comprobar as caixas. Pero resulta que nun base de datos, pode dicir, alguén pode incluso ter ese valor. Esta columna non teñen para realmente estar alí. Agora, hai este menú suspendido. E repare que eu son en primeira fila hai, así que eu estou falando sobre nome de usuario agora. E parece que unha base de datos, ao contrario dunha mera folla simple, ten as características poderosas chamados índices. E un índice é unha forma de dicir a base de datos con antelación que eu, o humano son máis intelixente do que. Sei que tipo de consultas, seleccione ou introducir ou eliminar ou actualización, que o meu código vai acabar facendo neste banco de datos. Quero ler unha morea de datos. Quero introducir unha gran cantidade de datos. Quero constantemente eliminar unha gran cantidade de datos. Se eu sei que vou ser accedendo un campo como usuario moito, Eu podo dicir a cautelarmente base de datos, sei máis que vostede, e quero decreto que ten que índice neste campo. Cando a indexar un campo ou unha columna significa que a base de datos de antemán debe pedir algunhas ideas de como, semana catro e cinco e seis do CS50 e realmente construír-se algo así como unha busca binaria árbore ou algo xeralmente chamado dunha árbore B que ía aprender nunha clase como CS124 en Harvard, unha clase de algoritmos, ou calquera número de outros lugares. A base de datos eo intelixente persoas que aplicaron Vai descubrir como almacenar que a táboa de información na memoria para que as investigacións e outras operacións son super rápido. Non ten que facelo. Non ten que aplicar busca lineal ou busca binaria ou mesturar tipo ou selección tipo, nada diso. A base de datos fai isto para vostede se dixo Lo cautelarmente ao índice neste campo. E podes ver tamén, hai algunhas outras características podemos dicir a base de datos de aplicar. O que isto pode significar que eu escoller Único dende este menú, só intuitivamente? Si? Audiencia: [inaudível] DAVID Malan: Si, o nome de usuario ten que ser único. Iso é unha cousa boa ou algo malo para unha base de datos, para un sitio cos usuarios? Nome de usuario debe ser único? Si, probablemente. Se é iso que o campo que usan para entrar, realmente non quere ter persoas a mesma sensación ou o mesmo nome de usuario. Así, podemos ter a base de datos de impoñer que así que agora no meu código PHP ou calquera idioma, Non teño para, por exemplo, comprobar necesariamente fai nome de usuario existe antes de deixar a alguén rexistrar-se? A base de datos non permitirá que dúas persoas nomeadas David ou Malans cadastre-se neste caso. E como un aparte, aínda que esta menú só permite escoller un, un índice único é aquel que é indexado polo desempeño super rápido, pero tamén reforza a singularidade. E nós imos volver ao que o outros dous dicir en só un momento. Mentres tanto, si é para miña segunda liña, que é o nome do usuario, eu debería especificar que o nome debe ser único? Non, porque podería certamente have-- non hai dúas David Malans nesta sala, máis probable. Pero escoller un nome diferente, poderiamos certamente ter colisións. Pense de novo hash táboas e similares. Entón, nós certamente non queremos para facer o campo nome exclusivo. Entón, nós só estamos indo a saír que, como trazo, trazo, trazo, nada. E eu vou deixar o resto só. Efectivamente, a maior parte destes campos non terá que preocuparse. E cando eu estou listo para salvar este, A Internet coopera, Eu prema Gardar, e moito, moito, moito lentamente que a base de datos son gardadas. E agora eu estou de volta a esta interfaz, que é certo que, é esmagadora, a primeira vista. Pero todo o que eu vou facer é premer na palabra Usuarios na parte superior esquerda. Eu estou indo a ir ata aquí, prema en Usuarios, e por defecto, ten executado algúns SQL, pero máis sobre iso nun momento. Aquí é só un resumo do que eu fixen. E non se preocupe que ve mencione do latín e do sueco aquí. Estas son só o patrón definicións, porque MySQL orixinalmente, ou PHP MyAdmin, un dos dous pasou a ser escrito por algunhas persoas suecas. Pero iso é irrelevante no noso caso aquí. Todo ben, entón por que é todo isto interesante? Acontece que, podo inserir datos nunha base de datos, escribindo código. E eu estou dalle no meu arquivo aquí, eu son indo a ir adiante e finxir que este está conectado a esa base de datos, que non é, no momento, pero vai ser cando chegamos ao problema definido sete. E eu estou indo a ir adiante e realizar unha función chamada de consulta, que dámoslle o problema definir código de distribución de sete, que leva polo menos un argumento, que é só unha cadea. A secuencia de código SQL. Entón, está a piques de aprender a escribir Structured Query Language. Se quero introducir unha nova liña na miña base de datos porque alguén teña presentado un formulario para o meu código, eu literalmente INSERT INTO usuarios escribir o seguinte campos: nome de usuario, coma, nome, os valores, e agora eu teño inserir algo así como Malan, e citas, unquote 'David Malan. E agora mesmo para os non familiarizados co SQL, por que está a usar comiñas simples dentro desa secuencia verde? O que pode ser a razón aquí? Repare que eu son co-mestura dúas linguas. Consulta é unha función PHP pero é preciso un argumento. E que o argumento ten que ser el mesmo escrito noutra linguaxe chamada SQL, Structured Query Language. Entón, todo o que eu acabo de destaque aquí é esta linguaxe chamada SQL. Entón, o que hai coas comiñas simples, así como unha comprobación de sanidade rápida? Vai adiante. Son cadeas. Así, multimedia, unquote Malan e multimedia, unquote David Malan son cadeas. E só de pensar intuitivamente agora, saber o que vostede sabe sobre C e PHP, por que eu non facelo, o que eu costume comiñas usado para cadeas? Por que eu non quero facer iso? Si? Audiencia: [inaudível] DAVID Malan: Exactamente. Porque eu xa estou usando comiñas no camiño fóra do argumento para a función de PHP, Quere só confundir o intérprete. Non vai saber que estes van xuntos? Será que estes andan xuntos? Será que estes andan xuntos? Entón, eu cambiar vez. Ou eu podería facer algo así, Cita barra invertida ou cita barra invertida. Francamente, que só comeza a ser moi lexible e feo. Pero iso iría conseguir o mesmo resultado que ben. Entón, se eu fose para executar este consulta agora, imos ver o que acontece. Eu estou indo a ir adiante agora e, en vez que executar o código PHP, que é o lugar onde vai xogar no conxunto de problemas de sete, Vou en vez de ir a PHP MyAdmin. E eu vou manualmente ir á pestana SQL, e déixeme facer zoom na interface. E eu vou pegar o a cousa que eu escriba. E o código de cores ten cambiou un pouco agora, só porque os formatos de programas cousas un pouco diferente. Pero teña en conta que todo o que eu fixen é que eu dixen, inserir en Usuarios. Eu xa indicado, entón, nunha coma lista separada entre parénteses os dous campos que desexa inserir e entón eu dixo literalmente valores seguido por outro paréntese, e, a continuación, os dous valores Quero plug-in, e agora a unha boa medida, Vou poñer un punto e coma ao final. Así, este non é C. Este non é o PHP. Este é agora o SQL, e eu estou colando- en esta interface baseada na web que é indo só para me deixar, así que eu prema en Ir, executar esta consulta na base de datos executar dentro do CS50 IDE. Entón, iso é bo. Teña en conta que dixo unha liña inserido, foi super rápido, 0,0054 segundos para introducir os datos. Entón, iso soa moi saudable. El reflexa miña consulta para min aquí só para velo nunha especie de código de cores versión. Pero agora se eu premer Buscar, ter en conta que, aínda aínda que hai unha morea de lixo en a pantalla, miña mesa ten agora dúas liñas. Entón, deixe-me ir adiante e facer outra. Pola contra, déixeme vaia á guía SQL novo. E esta vez eu vou introducir algo Rob eo seu nome será Rob Bowden. Bowden. Imos prema Gardar. Oops, prefiro ir. Faga clic en Buscar de novo, e Agora repare en que eu teño dúas liñas. Entón, esa é só unha forma máis complexa forma de abrir Google Spreadsheets e só escribindo unha liña nunha columna. Pero o que é fundamental é que agora temos a sintaxe co cal a escribir código para que en definitiva, de feito, poderiamos facer algunha e iso. Lembre que soporte PHP Super variables globais. O que está dentro de dólar asinar subliñado GET en PHP? Nós demos un ollo a un ou dous exemplos simples. E en PSet6, lembro que ten Ola dot PHP que utiliza esa variable. O que pasa alí dentro? Ou o que é? Un pouco máis alto. Audiencia: [inaudível] DAVID Malan: É unha neve semente de matriz, a cal é só un xeito elegante de dicir unha matriz que ten pares de valores clave. E as teclas non son numéricos. Son palabras ou secuencias. E especialmente, o son os pares de chaves de valor? Onde é que veñen? Sentímolo? Audiencia: [inaudível] DAVID Malan: Non? Onde os clave valor pares vén? Diga de novo? Unha vez? Eu son o único que escoita algo? [Risas] É iso mesmo, non é? Audiencia: [inaudível] DAVID Malan: Si, veñen da secuencia de consulta. Entón, se volver o tempo para cando xoguei con Google e nós fomos para Google.com barra busca de interrogación q é igual a gatos, se eu fose para presionar Enter e Google foron aplicados en PHP, Código PHP que Google escribiu terían acceso ao sinal de dólar subliñado GET dentro do cal é unha clave chamada Q e un valor chamados gatos que poden ser despois usadas usado para facer unha procura real con. Entón, en realidade, o que eu vou facer agora é volver para o meu código PHP que de novo vai ver máis en PSet7. E no canto de chamar en valores codificados duros que non parece ser un moi website dinámico, Vou darlle un teaser do o código real faría. Vostede poñería en dous puntos de interrogación como este. Non sei o que é o nome de usuario. Non sei o que o nome vai ser, pero sei que podo obtelos de forma dinámica. Así, se o código que estamos escribindo agora o código en execución nos servidores de Google, ou se esta é Ola dot PHP, que vén con PSet6, Vou pasar a función de consulta así como printf, dous outros argumentos. GET, multimedia, nome de usuario pecha comiñas, e GET, multimedia, nome unquote. E agora, teña en conta o que o estrutura xeral é aquí. Teño á esquerda lado da chamada, esta función chamada consulta no PHP. Eu aínda teño como primeiro argumento, só unha secuencia de texto. Pero esa secuencia de texto escrito nunha linguaxe chamada SQL. E, francamente, non é unha gran lingua. Nós só imos falar formalmente hoxe, realmente. E entón, en conxunto de problemas sete, hai relativamente algunhas características que somos vai alavancar. Os puntos de interrogación, porén, significa conectar un valor aquí e plug o outro valor aquí. E observen, teño omitido o que de todo o maldito CITA-OS-- ele-- en torno á cotización sinala este tempo. Eu omitir a cotización marcas de todo o punto de interrogación, Sentímolo, esta vez. Entón, o que é agradable sobre este pregunta característica que marca PHP tende a apoiar, Ruby e Python e outras linguaxes, isto significa só plug nalgúns Valorados aquí e vostede sabe o que? Descubrir se usar comiñas simples ou dobres. Non me preocupar con aqueles intelectualmente detalles desinteressante. Pero asegúrese de que está correcto de xeito que o meu código é en definitiva, operativo e seguro, o que terá un significado moito tempo antes. Agora, cantos argumentos en total, só para ser claro, é a función de toma de consulta? Quen queira votar en máis de dous? Tres? Claro, por que? Por que tres? Audiencia: [inaudível] DAVID Malan: Exactamente. A primeira parte é a cadea. O segundo argumento é sinal de dólar subliñado GET soporte de nome de usuario. E o terceiro argumento é o mesmo, pero só o nome. Así, noutras palabras, agora se eu tivese un formulario web que de campos de texto, unha para o nome do usuario, un para o seu nome, só como vería nunha web cando se rexistrar algún sitio web, que pode ser o código no back-end que realmente fai a inserción agora na base de datos. Agora pola contra, imos avanzar. Supoña que un usuario é agora o login e quere para escribir o código PHP que comprobar se a persoa que está só logueado é en realidade un usuario, podes usar unha sintaxe moi sinxela. Pode dicir SELECT, digamos Estrela, onde estrela significa todo. Non sei o que eu quere, entón me dea todas as columnas da táboa chamado de usuarios, onde, e iso é bo. Select soporta o que é chamado un predicado, que é como unha forma de cualificar o que quere. Onde nome de usuario é igual a Cita, unquote Malan. Entón, aquí tamén, eu teño incorporado dentro do argumento para unha función PHP, unha liña de código SQL. E que este código SQL tempo é, literalmente, indo para buscar citas, unquote Malan. Agora iso non é todo o que útil, entón eu vou saltar esa e eu vou aparcar esta información de Brady, e ir e plugin no canto un signo de interrogación aquí. Entón, só para quedar claro, o que debo dicir ao meu segundo argumento ser se alguén acaba sesión e eu querer comprobar se el ou ela é, en realidade, un usuario? Audiencia: [inaudível] DAVID Malan: Yeah. Escoito dólar signo subliñado Obter cotización, nome de usuario pecha comiñas. E que debe volver para min calquera das liñas no meu base de datos que ten un nome de Malan. Agora, esperamos, eu vou volver cero se non Malan estivo aquí, ou un, se ten. Non debería volver dous, tres ou catro. Por que? Audiencia: [inaudível] DAVID Malan: eu dixen orixinal, verdade? Razón simple. Porque eu dixen que ela ten que ser orixinal, só loxicamente, só se pode ter cero ou un Malans nesta táboa de base de datos particular. Agora, como un aparte, só para que xa viu que, a pesar de eu continuar usando GET e aínda PSet6 usado só GET, pode certamente ter POST. E lembrar que Publicar é outra técnica para a presentación de información dunha forma, pero non aparece na URL. É un pouco máis seguro, certamente, para cousas como nomes de usuarios e contrasinais, PSet7 que, en realidade, envolven. Entón, imos facelo en PHP MyAdmin e ver que pasa. Eu estou indo a ir á pestana de MySQL. E teña en conta que o valor por defecto para PHP MyAdmin, só para tratar de ser útil, é seleccionar estrela de usuarios onde un. Ben, un é sempre certo, así este ten o parvo eficaz de só seleccionar todo. Pero eu vou ser un pouco máis pedante e manualmente escribir selecciona Estrella usuarios. Agora, tecnicamente, pode citar o nome das táboas. É raro que ten que, pero observar esas non son súas citas normais do teclado estadounidense. Este é o chamado crase, que é xeralmente no lado superior esquerdo canto do teclado. Pero é raro que vai realmente se preocupe con iso, entón eu vou omitir-los de calquera maneira. Entón, agora, deixe-me ir adiante e bateu ir. E cantas liñas eu debería de volta cando selecciono estrela de usuarios? Audiencia: [inaudível] DAVID Malan: O número de liñas, con certeza. Pero como moitos nesta historia concreta agora? Dous, porque non había me e alí estaba Rob. Entón, se eu premer en Go, vexo que visualmente Recibín de volta, en realidade, dúas liñas. Hai unha morea de lixo no pantalla, pero eu só vexo dúas liñas. Por outra banda, se eu fai iso de novo e facer Seleccione Estrella usuarios, onde nome de usuario é igual a cita, pecha comiñas Malan, agora eu premer en Go, Eu só vou volver dunha liña. E, para rematar, se eu fai algo así, supoña que eu non me importa recibindo todo, que é tipo de sen sentido agora, porque hai só dúas columnas. Non é como eu estou seleccionando unha enorme cantidade de datos. Supoña que vai adiante e non SELECT nome DE usuarios, onde nome de usuario é igual Malan, o que é agradable sobre SQL honestamente, é que realmente só ten o que diga a el para facer. É moi sucinta, pero literalmente só diga a el o que quere facer. Seleccione o nome dos usuarios ONDE o nome de usuario é igual Malan. E iso realmente é que explícito. Entón, agora eu acertar Go, cantas liñas son eu que vou volver? Un, porque é só Malan, eu espero. Ou cero se non é Hai, pero un máximo. E cantas columnas eu vou volver? Cantas columnas? Esta vez, eu só vou para obter un, porque eu non fixen selecciona estrela, que é todo. Agora eu estou seleccionando só o nome, así que é só incorporarse de volta unha columna e unha liña. E parece tipo de forma adecuada ridículo, basta ollar super pequena como esta. Entón, o que está realmente a suceder? Cando realizar un SQL consulta usando select, o que está a recibir arredor da base de datos é como unha táboa temporal con liñas e columnas, quizais, pero que omitir calquera cousa que Non se realmente seleccionado por ti. Entón, é como se alguén tiña unha gran folla de todos os alumnos rexistrada para algúns grupo de estudantes, e di, darme todo o calouro que teño rexistrada para o noso grupo de alumnos, o que seu compañeiro no grupo de estudantes poden facer é que eles poderían só entregar lle toda a folla de cálculo. Isto é como dicir selecciona estrela. E é un pouco aburrido se só quería o calouro. E así, se, en vez dixo: selecciona estrela da táboa de base de datos onde ano é igual a Cita, calouro unquote, é coma se o seu amigo no grupo de estudante literalmente destacados e copiadas só as liñas Caloiro, colou-los nun novo Google Folla de cálculo ou un arquivo de Excel, e entregou ao o só como resultante de arquivo. Isto é todo o que está pasando en conceptualmente aquí. Entón, ao final, non podemos facer algunhas cousas moi extravagantes por almacenar cousas como nomes de usuarios e contrasinais e semellantes. Pero, ao parecer, hai fazê- un pouco diferente do que iso. Non é que intelixente só almacenar un nome de usuario e un contrasinal. Alguén antes, creo aquí abaixo, suxeriu un ID. Agora, un ID podería ser como un Harvard ID ou ID líquido de Yale, pero pode ser aínda máis simple no noso caso base de datos. E, de feito, o caso común é ter outra columna. E eu estou indo a ir adiante e editar a miña mesa. E se xogar con esta interface para PSet7, podes ver que podes consultar este botón aquí e engadir un campo no inicio da táboa. E agora, se eu premer en Go, que vai para me dar unha desas formas de antes. Eu estou indo a engadir un campo denominado ID. E eu estou indo a facelo un tipo numérico. Eu teño unha morea enteiro de valores para valores numéricos. Eu só vou escoller un INT e Non te preocupes cos tamaños diferentes. Non teño para especificar ou unha lonxitude dun valor, porque vai ser 32 bits, non importa o que. Atributos, non vimos antes. Calquera participación en calquera destes opcións de menú esta vez? Para unha INT? Que propón? Non? Algún destes ten sentido? Si. Si, sen sinatura, non? Xeralmente, se nós estamos indo dar- todos Número único, que é onde esta historia é indo, realmente só quere unha persoa a ter o número, tipo, cero e un e dous e tres e catro. Eu non teño que tratar con números negativos. Parece só unha complexidade innecesaria. Quero que catro millóns de valores posibles, non catro millóns valores posibles, entón eu só duplicou o capacidade da miña INT. Como un aparte, se quere relacionarse isto para algo así como Facebook, para atrás no tipo do meu día cando Facebook saíu primeiro, Eu creo que foron usando na súa base de datos MySQL para almacenar un usuario do identificador, era só un INT. Pero, claro, hai moito de persoas reais no mundo. Hai unha morea de teito Facebook contas no mundo. E por iso, finalmente, Facebook rebordou o tamaño dun INT, un catro millóns valor. É por iso que, se ollar arredor e hai sitios que poden dicir o que un ID único é. E se vostede non escolleu un nome de usuario Facebook, vai ver a súa identificación única. Creo que é PHP dot perfil punto de interrogação ID é igual a algo. Que agora é algo así como un gran INT, ou moito se quixeren, que é un valor de 64 bits ou algo comparable. Así, mentres que no mundo real facer estes cuestións ao final, ás veces importa. E pasa aquí, se eu son dando todos os meus usuarios unha identificación única, Quero ser super explícita e minimamente facer ese campo único. Pero resulta aí é unha peza de nomenclatura tamén hoxe que é unha chave primaria. Se está designado unha base de datos mesa e vostede sabe con antelación que unha das columnas desa táboa debe e pode identificar exclusivamente liñas na táboa, quere especificalo lo e dicir a base de datos, esta é a miña chave primaria. Pode haber dobre noutros campos, pero eu estou dicindo a base de datos que este é a miña principal, o meu campo máis importante, que é garantía para ser exclusivo. Agora, iso parece redundante. Agora estou propondo que engadir premendo Gardar aquí, un called-- campo e eu vou para ir adiante e prema AI, imos voltar a que nun momento, gardar. Estou propoñendo agora que miña mesa semellante a esta. Eu teño un campo INT chamado ID, un campo CHAR chamado usuario, un campo varchar denominado Nome pero ID, se é primario e, polo tanto, único, por que eu só residuos tempo introducindo o que efectivamente é unha segunda exclusiva campo chamado ID que é unha INT? Nome de usuario, recall, foi Xa único, dixo. Entón, só tes que loxicamente, non calquera experiencia de base de datos á razón por iso, por que Eu podería ter introducido un INT como meu identificador único ben? O que está isto-- dicir de novo? Audiencia: [inaudível] DAVID Malan: Random o acceso é máis fácil, por que? Audiencia: [inaudível] DAVID Malan: Si, é só acceder números. Entón, se pensas deste verdadeiramente é unha táboa, como unha matriz, agora eu teño identificadores únicos que podo ir ao redor. E aínda mellor que iso é que quão grande é unha INT será de novo? 32 bits ou catro bytes. Que grande é o meu nome será? Maxima? 16 bytes. Entón, se está realmente se preocupar con o desempeño do seu código, creo que volta a PSet5, preferiría para buscar un valor de catro bytes ou un 16 valor byte, non? É realmente tan sinxelo que iso. Ten que facer catro veces máis traballo para buscar nomes de usuarios porque estes son 16 bytes. Entón, ten que, literalmente, comparar os 16 bytes sendo Comproba se si, iso é nome de usuario que quero. Mentres que para unha INT, pode facelo con só catro bytes. E como un aparte para os interesado en hardware de ordenador, verifícase que pode caber algo un INT ou un valor de 32 bits en algo chamado un rexistro dun ordenador CPU, o que significa que é super, super rápido, mesmo co menor nivel de hardware do ordenador. Así, non hai só vantaxes de todo. Entón, o que significa isto? En realidade, cando está designado un base de datos de táboa, a case totalidade do tempo está indo a non ter só os datos que lle interesa, pero tamén algo un identificador único porque iso vai déixenos facer outras cousas. E imos tropezar un problema aquí. Supoña que os usuarios non teñen só nomes de usuarios e nomes, pero eles tamén teñen cousas como cidades e os estados e códigos postais, polo menos, aquí en Estados Unidos. Entón, eu estou indo a ir adiante e só dicir rapidamente, Dáme tres columnas ao final da táboa. E iso vai ser City, este será Estado, e iso vai ser Zip. Agora tipo City, que datos esta debe ser, quizais? Varchar? Non sei o que o cidade nome é. Nalgún lugar en América, hai probablemente, algúns ridiculamente palabra longa, entón imos só ir con 255, algo historicamente ou arbitraria. Estado, o que quere facer? Chamada de xuízo, non? O que é quizais o máis eficiente? Cantas personaxes? Quizais só dúas, se pudermos se safar facendo só, como, MA para Massachusetts e así por diante. Entón, eu estou indo a ir un valor CHAR de dous. CEP é moi interesante. Estamos aquí en 02138, de xeito que suxire que deberiamos usar o que? É un INT, non? INT, INT, curto? Curto ía funcionar. Non? CHAR ou cinco, pero eu quero un INT. Por que empurrar cara atrás nun INT? Persuadirme deste. O que é parvo sobre un INT, a miña idea? Si. Audiencia: Tomé-se máis memoria. DAVID Malan: Tomé-se máis memoria. Catro bytes, pero é propoñendo un código postal como cinco bytes ou alguén era como un CHAR, que se sente como eh, iso non é realmente o caso. Ben, historia divertida. Anos, cando eu adoitaba usar Microsoft Outlook para o meu correo electrónico, Finalmente quería cambiar a Gmail. E así, eu exportados toda a miña contactos de Outlook como un ficheiro CSV. Valores separados por comas, que significaba que eu tiña todos os meus amigos e último nomes nomes e números de teléfono e códigos postais e todo iso. E entón eu fixen a erro de abrilo en Excel, que é un programa de folla de cálculo que entende arquivos CSV, como vimos. Pero entón, eu debo ter batido, como, Mando ou control S nun punto. E Excel, aparentemente no momento tiña unha característica en que en calquera momento se viu un número, tentou ser útil. E se ese número comezou con ceros, sería só se librar deles. Por que precisa de liderado ceros na enteiros? Son sen sentido, matematicamente. Eles non son sen sentido no sistema US Postal. Entón, eu tiven hai anos, a este día, eu ter amigos que, cando o caso raro que eu teño de alguén é abordar estes días, Eu vou ver que eu teño un amigo en Cambridge, Massachusetts, 2138. E é irritante se está tentar resolver de forma programática xerar sobres ou simplemente anota-a. E iso é por mor desta razón, Eu escollín o tipo de datos mal. Entón, eu amo a súa idea. Imos usar un campo CHAR. Cinco personaxes, con excepción hai un caso de canto. Se aínda enviar correo electrónico, ás veces, códigos postais nos días de hoxe, son, como, máis catro. Entón, necesitamos un guión e, a continuación, necesitamos máis catro números. Entón, para ser honesto, podería ir moitas formas diferentes. De momento, eu vou seguir o simple e eu son só vai dicir que é un cinco valor CHAR e estamos vai saltar todo o trazo máis catro. Pero estes son os tipos de compensacións. E pode pensar no mesmos problemas derivados con números de teléfono ou outros campos. E agora, que é, en realidade, unha estrada tola de ir para abaixo. Supoña que tanto Rob e eu e Hannah e María e [? Davon?] E Andy e outros sobre o equipo todo en directo en Cambridge, Massachusetts, 02138. Isto realmente me sinto idiota que eu son engadindo a miña táboa de usuarios, cidade, provincia, e zip. Por que? Audiencia: [inaudível] DAVID Malan: Diga novo? Audiencia: [inaudível] DAVID Malan: Son sempre indo a ir xuntos, non? Cando se ve, estamos afeitos a pensar este era o caso ata que exhaustivamente buscou todo os Estados Unidos, e botan que hai son algunhas inconsistencias onde varias cidades teñen o mesmo zip, o que é raro. Pero, se por agora estipulan que 02138 sempre de Cambridge, Massachusetts, por que no mundo que almacenar base de datos e Cambridge MA e 02138 para min e para Hannah e para Rob e para [? Davon?] E para os outros que viven aquí en Cambridge, é perfectamente redundante. Debemos fuxir con só almacenar o que? Só o código postal. Pero entón, se nós gardados só o código postal, quero probablemente para o meu sitio para saber onde é 02138. Entón, eu teño outra táboa. E iso é OK. E, de feito, este é un dos procesos de proxecto de deseño de táboas que vai facer en PSet7 ben polo cal Quere fatorar datos comúns. Así como vimos fatoração código común e factoring out común estilos CSS, aquí tamén na base de datos, se eu só precisa 02.138 para singularmente identificar alguén da cidade natal, non garde Cambridge, Mass para cada usuario danado na súa táboa. Pola contra, ter unha táboa separada chamada Zips que debe ter o que columnas? Probablemente, un campo ID, só porque, para os principios que estamos a falar agora. Probablemente un campo zip para 02138. E entón, probablemente, o que os outros columnas? Cidade e estado, pero só ten unha liña para 02.138, unha liña para 02.139, unha liña para 90210. E iso é, literalmente, todos os códigos postais que eu coñezo. Entón, agora, o que pode facer? Isto é problemático, xa que agora eu teño dúas táboas. Entón, os meus usuarios son na súa maioría por aquí, pero a súa información de estado da cidade é por aquí. Así, verifícase co SQL, non hai de feito, unha forma de xuntar información, e vai ver que no PSet. Pero resulta que pode facer algo así. Seleccione Estrella usuarios, zips Rexistrarse ON usuarios dot zip é igual a zips dot zip. Que é un pouco prolixo, reconhecidamente, pero iso só significa seleccionar todo, dende o proceso de toma de miña táboa de usuarios e miña mesa zips. Xunto a eles por un campo que teñen en columna. Entón, literalmente facendo algo así, e darme de volta unha nova táboa temporal iso é máis amplo, que é maior, que ten todo o columnas de ambos. E que, moi simplemente, sería o sintaxe para facer algo coma isto. Entón, hai esa fronte, pero aí vai ser outras decisións de proxecto vai ten que facer, non só cos índices pero tamén executar en desafíos. De feito, hai un reto en calquera proxecto de base de datos polo que, ás veces, dúas persoas poden querer para acceder as mesmas liñas da base de datos táboa. Entón, iso é algo que imos atopar en PSet7 ben. Pero eu penso que eu ía ver un ataque que é posible en SQL. Cales son algunhas das problemas que poden xurdir? Entón, vai atopar iso en PSet7. E dicimos-lle abertamente o que o solución de codificación para este problema é. Pero se tomar unha clase de nivel superior, especialmente en sistemas operativos, vai atopar unha cuestión de atomicidade, o problema de tentar facer varias cousas á vez sen interrupción. E eu penso que eu ía introducir esta idea para PSet7 cunha metáfora que eu mesmo aprendín en Margo Sistemas operativos CS164 do Seltzer anos de clase atrás. Supoña que vostede ten un destes dormitorio frigoríficos no seu cuarto do dormitorio ou casa, e ten unha propensión real para leite. E así, chega na casa a partir de clases un día, abrir a neveira. Oh, droga. Non hai leite no frigorífico. Así, pechar o frigorífico, pechar a porta, bloquear o seu dormitorio, camiñar á volta da esquina a CVS, entrar na cola, e comezar a comprobar un pouco de leite. E iso vai levar un tempo, porque os maldita auto check-out contadores levar unha eternidade para usar de calquera maneira. Entón, mentres tanto, o seu compañeiro de cuarto chega na casa. El ou ela realmente lle gusta de leite tamén. Veñen á sala de dormitorio, abrir a neveira, oh, danado. Non hai máis leite. Entón, el ou ela tamén vai á volta da esquina. Pero agora, xa que non hai como dous ou tres ou catro CVSes preto, acontecen para ir a un dos diferentes persoas na praza. E agora, a poucos minutos máis tarde, tanto de ti chegar a casa e Ugh, peor problema que nunca. Agora tes moito leite que vai aceda. E lle gusta de leite, pero realmente non gusta de leite. Entón, agora, este foi un caros erro, porque tanto de ti tomou unha decisión sobre a base do estado de variable que algúns estaba no proceso de sendo cambiado por ti, o iniciador de ir para obter leite. Entón, o que é, quizais, un ser humano solución para este problema? Audiencia: [inaudível] DAVID Malan: Deixe unha nota, non? Sempre deixe unha nota, se está familiarizado con este show. Si, hai dous de nós. Entón, sempre deixar unha nota, ou literalmente bloquear o neveira con algún tipo de cadeado ou algo sobre a parte superior así. Pero iso realmente vai ser problema clave de deseño de base de datos, especialmente cando se pode ter varios navegadores, varios portátiles, varios usuarios todos intentando actualizar a información dunha soa vez. A información particularmente sensibles como información financeira, que cunha negociación de accións web como estará construíndo, E se queres comprobar canto diñeiro tes e, a continuación, se ten o suficiente, mercar algunhas accións? Pero e se alguén que ten unha conta conxunta con vostede é tentando ao mesmo tempo para mercar algunhas accións? Entón, el ou ela é a comprobación da Saldo da conta, tanto de ti recibir de volta o mesmo resposta, non hai leite. Ou tanto de volver a resposta, tes R $ 100 na súa conta. Tanto de tentar tomar a decisión para mercar un cota de preto de accións da empresa. E agora, o que pasa? Ten dúas partes? Non ten accións? Problemas como a que pode xurdir. Entón, a xente vai atopar iso. Ataques de inxección SQL, por sorte, son algo que vai axudar con, pero estes son atrozmente comúns a día de hoxe aínda. Entón, este é só un exemplo. Eu non fago ningunha reivindicación que Sistema de Harvard PIN está vulnerables a este ataque en particular. Xa tentou acceder. Pero vostede sabe que nós ter un campo como este. E Net ID de Yale ten un similar pantalla buscando estes días. E verifícase, que quizais o PIN do sistema é aplicado en PHP. E se were-- é não-- eles pode ter código que se parece con isto. Teñen dúas variables. Déame o nome de usuario e contrasinal desde a variable global post super- que falamos anteriormente. Quizais Harvard ten unha consulta como selecciona Estrella usuarios onde nome de usuario é o mesmo que o eo contrasinal é igual a iso. E teña en conta que eu son só liga-lo a usar a notación chaveta do outro día, o que significa só conectar un valor aquí. Non está a usar o cuestión técnica marca. Non teño ningunha segundo ou argumentos terceiros. Eu son só literalmente construír a cadea de min mesmo. O problema, porén, é que se alguén lle gusta un scroob, que é unha referencia a unha película, rexistra-se con algo coma isto, e eu elimina os puntos que xeralmente encubrir claves, e se é particularmente malicioso e contrasinal quizais é 12345, por película chamada "Spaceballs," pero criticamente tipos de apóstrofo despois do cinco, a continuación, literalmente, a palabra ou no espazo, e logo, multimedia, un unquote iguala unha cita, Pero teña en conta que omitiu o que? El omitiu a cita á dereita e é omitido a cita á esquerda. Porque, se esta invasor presunción de scroob é que a xente que escribiu este código PHP non eran tan brillantes, quizais eles só teñen algún único cita en torno á interpolación dunha variable con claves? E quizais por iso, que podía tipo de completar o seu pensamento para eles, pero dunha forma que está pasando para deixalo invadiu o sistema de PIN. Noutras palabras, supoña que este é o código e, agora, conectar o que scroob ingresaran. E é vermello, porque é malo. E o texto subxacente é o que escribiu, scroob podería enganar servidor de Harvard para a construción dunha consulta SQL cadea que se parece con isto. Contrasinal é igual a 12345 ou un é igual a un. O resultado que, loxicamente, é que este ha rexistrar scroob en se o seu contrasinal é 12345 ou se un é igual a un, o que é, por suposto, sempre certo, o que significa scroob sempre entra. E así, o xeito de corrixir Neste, como en moitos casos, sería escribir máis á defensiva. Para usar algo como o noso función de consulta real, que podes ver en PSet7, onde se conecte algo así como puntos de interrogación aquí. E a beleza da función de consulta que dar é que defende contra estas os chamados ataques de inxección SQL, onde alguén está enganando seu código en inxectar seu propio código SQL. Porque o que a función de consulta nós dámoslle realmente vai facer, se usa a sintaxe de punto de interrogación e un segundo e un terceiro argumento aquí, é o que engadir ao entrada que o usuario deu? Aqueles barra invertida cita. Entón, el escapa a calquera potencialmente caracteres perigosos. Isto parece raro agora, pero non é vulnerable porque non fai cambiar a lóxica máis porque esa contrasinal é todo Agora, unha única cita que non é, de feito, o contrasinal do scroob. Así, houbo algunhas bromas sobre iso ao longo dos anos. Entón, esa foi unha foto tomada dalgún geek en un lote de aparcamento a través do cal pode saber que algunhas cidades e estados tentar dixitalizar a licenza tarxeta para cobre-lo ou billete que se pasar por sen, como, a cousa Correo-Z Pass. Entón, esa persoa presume que quizais as persoas que escriben o sistema E-Z Pase non eran tan brillantes, e quizais eles só concatenados unha corda, para que el ou ela non podía maliciosamente non só completar o seu pensamento, pero, en realidade, executar un comando malo, que non teña mencionado aínda, pero probablemente pode adiviñar. Que, ademais de eliminar e introducir e actualizar e seleccionar, hai tamén a palabra chave chamada gota, que literalmente exclúe todo na base de datos, que é especialmente malo. Podemos zoom e iso é un pouco difícil de ver. Iso, agora, é un famoso deseño animado que é marabillosas intelixente agora e comprensible. [Risas] Si, legal. Tipo de geeking fóra. Entón, estas son, entón, Ataques de inxección SQL. E son tan fáciles de evitar, utilizando o código de dereito ou as bibliotecas correctas. E vai ver en PSet7, iso é por que nós dámoslle a función de consulta. Así, un par de teasers que pensamos darlle aquí na nosa remanente minutos xuntos. Entón, como se lembra de semana cero, nós introduciu estas dúas lámpadas que son bos, non só porque son moito e son de cores, senón porque soportan algo chamada de API, unha aplicación Interface de Programación de Correo en CS50, ata agora, temos principalmente enfocada en Get e POST, pero verifícase se hai outros verbos HTTP, como PUT. E, de feito, este foi unha foto de semana de cero polo que se escribir código que envía a la PSet6 unha solicitude HTTP que mira como este con este anaco de texto no fondo, o que se chama JSON, ou JavaScript Object Notation que falaremos a próxima semana, podes activar ou desactivar ou cambiar a cor das luces como aqueles. Polo tanto, se CS50 tamén en adición a algúns destas lámpadas aquí en New Haven se desexa prestar para proxectos finais, tamén algúns Microsoft Bandas, que son como reloxos que utiliza ao redor do seu pulso Do mesmo xeito que ten unha API de xeito a estar pode escribir o seu propio software para eles. Temos unha conta Código IOS de Apple así que se ten un reloxo Apple ou un iPhone ou un iPad ou un iPod, pode escribir código que realmente funciona sobre aqueles. Temos un grupo enteiro de Arduinos, que son ordenadores minúsculos pequenos sen casos, esencialmente, que pode conectarse vía USB, normalmente para o seu propio Mac ou PC, escribir código que corre sobre estes físico dispositivos sensores que moitas veces teñen sobre eles para que poida interactuar co mundo real. Temos un grupo enteiro de dispositivos Leap Motion, que son dispositivos USB para Mac e PCs, aquí e unha vez máis, en New Haven. E se conecta-lo ao seu Mac, realmente pode controlar o seu ordenador escribindo software que por medio de raios infravermellos, descobre onde as mans humanas son, mesmo sen tocar no seu teclado. Pensamos en compartir un rápido albiscar que, por exemplo. [Música tocando] Entón, nós temos un todo morea desas cousas, tamén chamada abrazadeiras Myo que puxo sobre o seu antebrazo e, a continuación, pode controlar o real mundo ou o mundo virtual como este. [Música tocando] Ou, tamén temos algúns Google Papel, que queda literalmente, como, unha caixa de cartón que pode pór no seu rostro, pero de diapositivas no seu teléfono para el de xeito que puxo o vaso da súa teléfono realmente preto dos seus ollos. E Google é Cartón moi barato en US $ 10 ou US $ 20. E ten pequenas lentes que un pouco fóra da quenda a imaxe na pantalla do seu humano ollos para darlle unha sensación de profundidade de xeito que realmente ten un 3D ambiente na fronte de ti. Temos tamén algúns Samsung engrenaxe, que é a versión máis cara do presente, pero que pode de modo semellante desprazar nunha Teléfono Android e darlle a ilusión de-- ou dar a experiencia da realidade virtual. E nos nosos dous minutos finais, pensamos en tentar facelo. Se podo proxectar o que Colton aquí só para aguçar o apetito, deixe-me ir adiante e xogue up na pantalla grande aquí. Deixe-me matar as luces. Colton, quere ir adiante e poñer no seu teléfono móbil por un momento e veña ata o medio do escenario? E quere project-- isto é o que Colton ve. Agora, o WiFi aquí é non tan forte para este dispositivo que este é super atractivo, pero é, literalmente, Colton neste lugar máxico futurista. El só ve unha imaxe. Estás a ver a súa esquerda e dereita ollo que o seu cerebro está costurando nun tridimensional ambiente no seu rostro. El só está seleccionada unha opción de menú aquí. E entón, de novo, está a levar posto este auricular cun teléfono Samsung nel que é sen fíos designado a nosa sobrecarga. Agora está en Marte, creo? Colton: Eu creo que si. Eu non estou seguro [inaudível]. [Risas] DAVID Malan: Acontece Marte ten estes menús. Colton: [inaudível] algúns cool lugares, se queremos ir a-- DAVID Malan: Onde queremos ir? Colton: [inaudível] DAVID Malan: E imos ver Colton, onde está nos levando agora. Colton: [inaudível] DAVID Malan: Entón, hai tantos diferentes lugares que pode tomar-se. Hai FAPIs través do cal pode escribir xogos ou interaccións que executar, en definitiva, no teléfono. Entón, o que realmente só escribindo unha aplicación de telefonía móbil. Pero grazas ao software e os recursos gráficos, Colton agora neste pequena casa de campo pouco. E correndo o risco de esmagadora nós mesmos, Colton e eu vou ir por mentres, ao final da clase aquí hoxe se desexa vir e xogar. E nós imos trae-los de volta a próxima semana tamén. Sen máis, o ADO iso por hoxe. Imos velo a próxima semana. [MUSIC - Ragga Twins, "home malo"]