[REPRODUCCIÓN DE MÚSICA] DAVID MALAN: Muy bien, esto es CS50. Este es el fin de semana ocho. Y hoy, empezamos para rellenar algunas piezas cuando se trata de la construcción cosas en la web. Por lo tanto, recordar que el lunes pasamos mucho más tiempo en PHP, que es esta dinámica lenguaje de programación que nos vamos de salida, entre otros cosas, HTML y otros tal contenido que vamos a querer ver. Pero en realidad no hemos visto cómo vamos a almacenar cualquier información. De hecho, casi cualquiera de que el súper páginas web interesantes que visita hoy tener algún tipo de base de datos en la parte final, ¿no? Facebook duda almacena gran cantidad de datos sobre todos nosotros y tiendas de Gmail de todo de sus correos electrónicos. Y así, muchos otros sitios no son sólo contenido estático que es informativo. En realidad es dinámica de alguna manera. Usted proporciona la entrada, se actualiza las páginas de otras personas. Usted recibe mensajes, envía mensajes, y así sucesivamente. Así que hoy, miramos más de cerca las bases de un proyecto que usted va a sumergirse en la próxima semana, CS50 Finanzas, que es en realidad va a tener que construir algo que no es en C, pero en PHP. Un sitio web que se ve un poco algo como esto que permite comprar y vender acciones que son en realidad va a recurrir a tiempo real los datos de saldos de Yahoo Finanzas. Y así, en última instancia, usted tendrá la ilusión para ti y para los usuarios que en realidad estás comprando y vendiendo acciones y conseguir el tiempo casi real, actualizaciones, la gestión de una cartera, todos los cuales va a requerir tener, en última instancia, una base de datos de los usuarios. Así, en sus propias palabras, especialmente si no estás muy familiarizados con el ordenador ciencia o bases de datos, lo que sabes una base de datos para ser en este momento, en términos no técnicos? ¿Qué es? Cómo lo describirías a un compañero de cuarto o un amigo? AUDIENCIA: [inaudible] información [inaudible] DAVID MALAN: Así, una lista de la información, o una almacén-- una lista de información que es posible que desee almacenar por algo, como un usuario. ¿Y qué usuarios tienen asociado con ellos? Si usted es un usuario en Facebook o Gmail, ¿cuáles son las características que todos los usuarios tienen? Al igual que, lo que podría ser parte de la columnas en la hoja de cálculo a la que nos aludido última vez? Porque de nuevo, usted puede pensar en una base de datos realmente como un archivo de Excel de lujo o Google Hoja de cálculo o archivo de los números de Apple. Entonces, ¿qué piensa usted de cuando se piensa en un usuario? ¿Que tienen ellos? ¿Que es eso? AUDIENCIA: Un nombre. DAVID MALAN: Un nombre. Así que si el nombre, como, David Malan sería el nombre de algún usuario. ¿Qué más tiene un usuario? AUDIENCIA: Un ID. DAVID MALAN: Un ID. Así que, como un número de identificación, como el Harvard DNI o tu Yale Net ID o similares. ¿Qué otra cosa podría tener un usuario? AUDIENCIA: Contraseña. DAVID MALAN: Una contraseña, tal vez una dirección, tal vez un número de teléfono, tal vez una dirección de correo electrónico. Así, hay montones de campos y este podría especie de espiral fuera de control rápidamente tan pronto como empiece darse cuenta, oh, vamos a almacenar este y vamos a guardar esto y aquello. Pero ¿cómo podemos realmente hacer eso? Así que de nuevo, el modelo mental tener por hoy, ya que sumergirse en SQL real, Lenguaje de consulta estructurado, es una base de datos que tiene este aspecto. Son sólo las filas y columnas. Y usted puede imaginar Google Spreadsheets o cualquier número de otros programas. Pero lo que es clave sobre MySQL, que es el software de base de datos que vamos a utilizar, la libertad abiertamente disponible-- usos de Facebook y cualquier número de otros websites-- base de datos almacena cosas relacional. Y una base de datos relacional sólo significa que, literalmente, almacena sus datos en filas y columnas. Es tan simple como eso. Así que, incluso algo como Oracle que usted puede haber oído general de es una base de datos relacional. Y debajo de la campana, que almacena los datos en filas y columnas. Y Oracle que una cobra mucho dinero para hacer eso, mientras que los cargos de MySQL que nada para el mismo. Por lo tanto, SQL se nos va a dar al menos cuatro operaciones. La capacidad de seleccionar los datos, como lectura datos, insertar, eliminar y actualizar datos. En otras palabras, esas son realmente las cuatro operaciones fundamentales que van a permitir que cambiemos cosas en esas filas y columnas. La herramienta que utilizaremos hoy especialmente aprender SQL y jugar con ella de nuevo se llama PHP MyAdmin. Es herramienta basada en web. Coincidencia total que está escrito en PHP. Pero va a darnos una gráfica interfaz de usuario para que podamos realmente crear estas filas y columnas y luego hablar con ellos a través de código. Así que, ahora vamos a empezar a lo que creo que es francamente tipo de proceso de la diversión de la construcción de la parte de atrás de los sitios web, las partes que los usuarios no lo hacen ver, pero sin duda se preocupan, porque eso es más bien de datos va. Por lo tanto, similar a C y una poco menos como PHP, SQL o una base de datos que soporta SQL, tiene al menos estos tipos de datos y racimos de otros. CHAR, VARCHAR, INT, BIGINT, DECIMAL y DATETIME. Y hay un todo montón de otras características, pero vamos a hacer esto por A modo de ejemplo real. Voy a ir a CS50 IDE en el que, de antemano, me he inscrito y yo también he visitado una URL para esta herramienta llamada PHP MyAdmin. Y en el problema establecido siete, te diremos exactamente cómo llegar a esta interfaz así como. En la esquina superior izquierda, notarlo dice conferencia. Y eso sólo significa que de antemano, he creado una base de datos llamada de conferencia vacío que no tiene hojas de cálculo en ella todavía. No hay filas y columnas. Debido a que la primera Lo vamos a hacer se empezará a crear una tabla eso va a almacenar nuestros usuarios. Así que, literalmente sobre aquí a la derecha, yo soy va a decir a la base de datos Quiero una tabla llamada Usuarios. Por lo tanto, esto es como el archivo que yo desea almacenar todos mis datos. ¿Y cuántas columnas? Bueno, vamos a mantenerlo simple por ahora. Sólo quiero guardar como un nombre de usuario y un nombre para un usuario. Empezaremos pequeña. Por lo tanto, quiero dos columnas totales. Y yo voy a seguir adelante y haga clic en Ir. Y luego, para éstos columnas, lo que voy a hacer-- si esto internet cooperates-- bien, así que vamos a intentarlo de nuevo. Voy a crear una tabla llamada Los usuarios con dos columnas, haga clic en Ir, OK. Ahora lo tenemos muy rápido. Gracias, muy bien hecho. Muy bien, ¿y qué es lo que queremos estas columnas que se llaman? Así, uno va a ser llamado nombre de usuario. Por lo tanto, todo lo que veo aquí-- y la interfaz francamente pone un poco feo, finalmente, una vez que se empieza a escribir en todos estos datos. Pero lo que es interesante es que tipo de paradójicamente, estoy creando columnas, pero la herramienta tiene tontamente lo ponían en filas de modo que pueda configurar estas columnas. Así, hay dos espacios en blanco que hay en Nombre. Y uno de estos campos I querer llamado nombre de usuario, y el otro campo Quiero llamar Nombre. Y ahora tengo que elegir tipos de datos para estas cosas. Así, mientras que en Excel y Google Spreadsheets, si quieres una columna, que, literalmente, sólo tienes que escribir el nombre o nombre de usuario, pulse Enter. Tal vez lo haces negrita sólo por la claridad, pero eso es todo. No se especifica la tipos de las columnas. Ahora en Google Spreadsheets o Excel, podría especificar cómo se procesa los datos. Usted podría ir al menú Formato, y usted puede especificar mostrar este signo dólar como, mostrar esto como un valor de punto flotante. Así, es similar en espíritu a que lo que estamos a punto de hacer, pero esto es en realidad va a la fuerza que los datos sean un cierto tipo. Ahora, a pesar de que hace un momento me dijo que hay sólo unos pocos tipos de datos, hay realmente una mucho, y son en diversos grados de especificidad. Y como un aparte, que incluso puede hacer cosas de lujo como geometrías de almacenamiento dentro de una base de datos. Puede almacenar cosas como coordenadas GPS y, de hecho encontrar, matemáticamente, puntos que están cerca de otros. Pero vamos a mantener esta super simple y llegan hasta aquí, todos los llamados tipos de cadenas. Así que, aquí tienes una lista de un toda montón de opciones. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. Y es un poco abrumador. Y, por desgracia, un poco paradójicamente a C, CHAR no es realmente un CHAR. Si especifica en una base de datos que su tipo de datos es CHAR, eso quiere decir que sí, que es un CHAR, pero es uno o más caracteres. Y usted tiene que especificar cuántos CHAR desea. Así que, ¿qué es una típica longitud de un nombre de usuario? ¿Hay un límite por lo general? AUDIENCIA: [inaudible] DAVID MALAN: 16 tal vez? Algo así. Ya sabes, de vuelta en el día, lo que solía ser ocho. A veces es 16 veces es aún más que eso. Y así, esto no lo hace significa dame una CHAR. Esto significa que tengo que especificar la longitud del campo, y ahora yo podría decir algo así como 16. Y no hay una solución de compromiso aquí. Por lo tanto, vamos a ver en un momento esto significa que uno, cada nombre de usuario tiene que ser de 16 caracteres. Pero espere un minuto, M-A-L-A-N. Si eso es mi nombre de usuario y yo sólo estoy usando cinco, ¿qué le propondrá que la base de datos de hacer por los otros 11 personajes que Me he reservado espacio para? ¿Qué harías? AUDIENCIA: [inaudible] DAVID MALAN: Sí, sólo hacer que todos nulo. Hacerlos espacios. Pero probablemente nulo, por lo que un gran cantidad de ceros como nombre. Así, por un lado, tenemos ahora asegurado de que mi nombre de usuario puede ser no más de 16 caracteres. Y la otra cara de esto es que si tenía un nombre muy largo o quería un tiempo muy largo username como algunos de ustedes chicos puedan tener en ese colegio o en Yale.edu, no se puede tener uno. Y así, de hecho, si usted tiene jamás registrada para un sitio web y te gritaste diciendo la contraseña es demasiado larga o su nombre de usuario es demasiado largo, es simplemente porque un programador, cuando la configuración de su base de datos, decidido que este campo no más de esta longitud ser. Muy bien, ¿y qué si se procede a nombrar? ¿Por cuánto tiempo debe un nombre del ser humano típico? ¿Cuántos personajes, 16? Supongo que pudimos encontrar a alguien en esta sala donde por su primera plus última nombre tiene más de 16 caracteres. Así que, lo que es mejor que eso, 17? 18? 25? ¿Más grande? 30? AUDIENCIA: [inaudible] DAVID MALAN: 5000, oh mi Dios. Entonces, eso es probablemente una decente límite superior, por así decirlo. Y aquí tenemos la clase de para hacer un juicio. Al igual, no hay una respuesta aquí. Infinito no es muy posible, porque somos el tiempo va a tener-- estamos va a quedarse sin memoria. Por lo tanto, tenemos que hacer una llamada de juicio en algún momento. Muy común sería, por ejemplo, de servicio- y Permitir especificar CHAR aquí como antes-- 255 era, literalmente, la límite superior de este software de base de datos años atrás. Y así, una gran cantidad de seres humanos acaba de decir, está bien. 255 es el límite. Vamos a utilizar el máximo. Y esto es bastante ridículo. Al igual que, si usted está escribiendo a alguien es nombre de 200 caracteres, además, que un poco ridículo. Pero, recuerde que no es ASCII el único sistema para los personajes. Y así, especialmente en una gran cantidad de idiomas asiáticos donde hay personajes que no pueden expresar en los teclados como mi Unidos teclado, algunos personajes en realidad tomar hasta 16 bits en lugar de ocho bits. Y así, en realidad esto no es tan irrazonable que necesitamos más espacio si queremos encajar personajes más grandes que el de EE.UU. las céntricas hemos tendido a discutir. Por lo tanto, necesitamos un poco de límite superior. No sé lo que el mejor es, pero 255 es generalmente muy común. 25 se siente bajo. 16, 32 se sienten bajo. Me gustaría errar por el lado de algo superior. Pero hay una solución de compromiso, como siempre. ¿Cuál es el, tal vez, obvio comercio fuera de la reserva de 255 caracteres para el nombre de todos los miembros de mi base de datos? AUDIENCIA: [inaudible] DAVID MALAN: ¿Qué es eso? AUDIENCIA: [inaudible] DAVID MALAN: Es un gran cantidad de memoria, ¿no? M-A-L-A-N. Acabo perdido 250 personajes sólo para almacenar mi nombre defensiva en caso de que alguien en la clase tiene un nombre muy largo. Eso parece como una compensación excesiva. Así, resulta que SQL, este lenguaje de base de datos, en realidad apoya algo llamados VARCHAR o CHAR variable. Y esto es una especie de bonito en que esta permite especificar no es una fija anchura, sino más bien, una anchura variable. Y más específicamente, una anchura máxima del campo. Por lo tanto, esto significa que un nombre puede ser no más de 250 caracteres, pero sí puede ser inferior. Y la base de datos va a ser inteligente. Si pones en M-A-L-A-N, sólo va a utilizar cinco, tal vez seis bytes para como un carácter nulo de salida, y no gastar un adicional 249 o 250 bytes innecesariamente. Por lo tanto, esto parece como debería han comenzado con esta historia. Pero siempre hay una solución de compromiso. Así, por un lado, un nombre de usuario He especificada para ser codificado en 16, y tal vez eso no era la decisión correcta, tal vez es, pero ¿por qué no usar Varchars para todo? Existe por una razón. ¿Por qué no utilizar VARCHAR para cada campo cuya longitud no sabes de antemano si parece ser una gran cosa, ¿no? Utilice sólo tanto espacio como que necesita hasta este límite? AUDIENCIA: Más lento. DAVID MALAN: corrector ortográfico? AUDIENCIA: Hace que sea más lento? DAVID MALAN: Oh, es más lento. Bueno, eso es casi siempre la respuesta, francamente. Al igual que, ¿cuál es el equilibrio? Es bien cuesta más espacio o cuesta más tiempo. Así, en este caso, podría ser más lento. ¿Por qué? AUDIENCIA: [inaudible] la determinación de [inaudible]. DAVID MALAN: Good. Así, se puede recordar incluso de PSED5, jugando con su enfoque el diccionario, si usted tiene que asignar memoria dinámicamente o mantener el crecimiento de un tampón, que en realidad puede ser lento. Si usted tiene que llamar a malloc debajo de la campana y quizás eso es lo que MySQL está haciendo, por lo que sin duda que podría ser el caso. Y si usted piensa manera volver a PSet-- o incluso semanas, dos cosas cuando nos gustó búsqueda binaria o incluso búsqueda lineal, una de las cosas buenas de cada palabra en una base de datos o cada palabra en una columna siendo exactamente la misma longitud, incluso si un montón de esos personajes están en blanco, es que se puede utilizar acceso aleatorio en sus datos, ¿no? Si usted sabe que cada palabra es 16 caracteres de distancia, puede utilizar la aritmética de punteros, por lo que hablar, y vaya que nos 16, 32, 48, 64, y usted puede saltar al instante utilizando la aritmética cualquiera de las palabras en su base de datos. Mientras que si se trata de un VARCHAR, ¿qué lugar tiene que hacer? [TELÉFONO SONANDO] Si es un VARCHAR, que no pueden utilizar el acceso aleatorio. Lo que tienes que buscar o hacer? ¿Sí? AUDIENCIA: [inaudible] DAVID MALAN: Mire a través de la traza whole-- a través de toda la lista buscando lo que, lo más probable? ¿Qué tipo de valor especial? AUDIENCIA: [inaudible] DAVID MALAN: Buscando para los terminadores nulos que demarcan la separación de palabras. Así que de nuevo, una solución de compromiso, y no hay una respuesta correcta. Pero aquí es donde, especialmente cuando los usuarios llegan a ser muchos y su carga en sus servidores, la número de personas que lo utilizan se eleva, estos son en realidad las decisiones no triviales. Así, podemos dejar esto como esto, pero vamos a desplácese hacia abajo a la derecha Aquí. Ahora, hay un par de columnas donde tenemos que hacer un juicio. ¿Tiene sentido para permitir que un usuario de nombre, nombre de usuario de un usuario o un usuario de nombre, al ser nulo? Es decir, solo en blanco. Se siente un poco sin sentido, así que estoy no va a revisar esas cajas. Pero resulta que en un base de datos, se puede decir, alguien puede tener opcionalmente este valor. Esta columna no tiene estar realmente allí. Ahora, hay un menú desplegable. Y noto que todavía estoy en la primera fila allí, por lo que estoy hablando nombre de usuario ahora. Y resulta que una base de datos, A diferencia de una mera sencilla hoja de cálculo, tiene características de gran alcance llamados índices. Y un índice es una manera de decir la base de datos de antemano que la I humana soy más inteligente que tú. Sé qué tipo de consultas, seleccione o insertar o eliminar o actualizar, que mi código se va a acabar haciendo de esta base de datos. Quiero leer una gran cantidad de datos. Quiero insertar una gran cantidad de datos. Quiero constantemente eliminar una gran cantidad de datos. Si sé que voy a ser acceder a un campo como el nombre de usuario mucho, Preventivamente puedo decir la base de datos, yo sé más que tú, y quiero decreto que usted debe índice de este campo. Cuando la indexación de un campo o una columna significa que la base de datos con antelación debe pedir prestado algunas ideas de como, semana cuatro y cinco y seis de CS50 y de hecho construir algo así como una búsqueda binaria árbol o algo generalmente se llama un árbol B que usted aprenderá en una clase como cs124 en Harvard, una clase de algoritmos, o cualquier número de otros lugares. La base de datos y de la inteligente personas que implementaron será encontrar la manera de almacenar esa mesa de la información en la memoria para que las búsquedas y otras operaciones son super rápido. Usted no tiene que hacerlo. Usted no tiene que poner en práctica búsqueda lineal o búsqueda binaria o fusionar especie o la selección clase, nada de eso. La base de datos lo hace por usted si le dices que de forma preventiva para indexar este campo. Y se puede ver también, que hay algunas otras características podemos decirle a la base de datos para hacer cumplir. ¿Qué podría significar si elijo Steam de este menú, sólo intuitivamente? ¿Sí? AUDIENCIA: [inaudible] DAVID MALAN: Sí, la nombre de usuario tiene que ser único. ¿Es esto algo bueno o algo malo para una base de datos, para un sitio web con los usuarios? En caso de nombres de usuario sea único? Si, probablemente. Si eso es lo que el campo que utiliza para conectarse, usted realmente no quiere la gente que tiene la misma sensación o el mismo nombre de usuario. Así, podemos tener la base de datos de hacer cumplir lo que que ahora en mi código PHP o cualquier otro idioma, Yo no tengo que, por ejemplo, comprobar necesariamente tiene este nombre de usuario existo antes de dejar que alguien se registra? La base de datos no permitirá que dos personas nombradas David o Malans registran en este caso. Y como un aparte, a pesar de que este menú sólo le permite seleccionar uno, un índice único es uno que es indexados para un rendimiento súper rápido, pero también hace cumplir singularidad. Y vamos a volver a lo que el otros dos significar en un momento. Mientras tanto, si voy a mi segunda fila, que es el nombre del usuario, debería especificar que el nombre debe ser único? No, porque ciertamente se podría tener-- no hay de dos David Malans en esta sala, lo más probable. Pero si elegimos un nombre diferente, podríamos seguramente tendrá colisiones. Piense de nuevo para discutir mesas y similares. Así que, ciertamente no queremos para hacer el campo de nombre único. Por lo tanto, sólo vamos a salir que, como el tablero, tablero, tablero, nada. Y yo voy a dejar todo lo demás solo. De hecho, la mayoría de estos campos no vamos a tener que preocuparse. Y cuando esté listo para guardar esta, si el internet coopera, Hago clic en Guardar, y muy, muy, muy poco a poco la base de datos no ser salvo. Y ahora estoy de vuelta a este interfaz, que es cierto, es abrumadora a primera vista. Pero todo lo que voy a hacer es clic en la palabra de Usuarios en la parte superior izquierda. Voy a ir por aquí, haga clic en Los usuarios y, por defecto, ha ejecutado alguna SQL, pero Más sobre esto en un momento. Esto es sólo un resumen de lo que hice. Y que no se preocupara que ves hablar de América y sueco aquí. Estas son sólo el predeterminado ajustes, ya que MySQL originalmente, o PHP MyAdmin, uno de los dos pasó a ser escrito por algunas personas suecas. Pero es irrelevante en nuestro caso aquí. Muy bien, así que ¿por qué es todo esto interesante? Resulta, puedo insertar datos en una base de datos mediante la escritura de código. Y estoy a seguir adelante y en mi archivo de aquí, estoy va a seguir adelante y fingir este está conectado a dicha base de datos, la cual no es en este momento, pero lo hará será cuando lleguemos al problema pusimos siete. Y yo voy a seguir adelante y ejecutar una función llamada de consulta, que le daremos en el problema establecer código de distribución de siete, que tiene al menos un argumento, que es sólo una cadena. Una cadena de código SQL. Por lo tanto, estás a punto de aprender a escribir Structured Query Language. Si quiero insertar una nueva fila en mi base de datos porque alguien ha presentado una forma de mi código, lo haría, literalmente, escribir INSERT INTO usuarios la siguiente campos: nombre de usuario, coma, el nombre, los valores, y ahora tengo que insertar algo así como Malan, y cita, fin de la cita 'David Malan. Y ahora incluso para quienes no están familiarizados con SQL, ¿por qué estoy usando comillas simples dentro de esta cadena verde? ¿Cuál podría ser la razón aquí? Note que soy co-mezcla dos idiomas. Consulta es una función PHP, pero se necesita un argumento. Y ese argumento tiene que ser en sí mismo escrito en otro lenguaje llamado SQL, Structured Query Language. Por lo tanto, todo lo que yo simplemente han puesto de relieve aquí es este lenguaje denominado SQL. Entonces, ¿qué pasa con las comillas simples, al igual que una comprobación de validez rápida? Adelante. Son cadenas. Así, cita, fin de la cita Malan y presupuesto, Lo dijeron ellos David Malan son cadenas. Y sólo pensar intuitivamente ahora, sabiendo lo que sabes sobre C y PHP, ¿por qué no hago esto, que por lo general comillas dobles usadas para cuerdas? ¿Por qué yo no quiero hacer eso? ¿Sí? AUDIENCIA: [inaudible] DAVID MALAN: Exactamente. Porque yo ya estoy usando comillas dobles en el camino fuera de la discusión a la función de PHP, Sólo quiero confundir al intérprete. No se sabe, no éstas van de la mano? ¿Éstos van de la mano? ¿Éstos van de la mano? Así que en lugar alterno. O podría hacer algo como esto, cita barra invertida o una cita barra invertida. Francamente, eso empieza a llegar muy ilegible y feo. Pero eso sería lograr el mismo resultado también. Así que, si tuviera que ejecutar este consulta ahora, vamos a ver qué pasa. Voy a seguir adelante ahora y bastante de ejecutar el código PHP, que es donde se va a jugar en el problema de establecer siete, Voy a ir a su lugar de PHP MyAdmin. Y voy manualmente para ir a la pestaña SQL, y que me haga zoom en la interfaz. Y me voy a pegar en lo que acaba de escribir. Y el código de colores tiene cambiado un poco ahora, sólo porque los formatos de programas cosas un poco diferente. Pero noto que todo lo que he hecho es lo que he dicho, insertar en Usuarios. He especificado, entonces, en una coma separados lista entre paréntesis los dos campos que quiero insertar, y entonces yo he dicho, literalmente, los valores seguido de otro paren, y luego los dos valores Quiero plug-in, y ahora para la buena medida, Voy a poner un punto y coma al final. Por lo tanto, esto no es C. Esto no es PHP. Se trata ahora de SQL, y estoy pegándolo en esta interfaz basada en la web que es sólo va a dejarme, tan pronto como haga clic en Ir, ejecutar esta consulta en la base de datos se ejecuta dentro del IDE CS50. Así que esto es bueno. Tenga en cuenta que dijo una fila insertado, fue súper rápido, 0.0054 segundos para insertar esos datos. Así que, eso suena bastante saludable. Se vuelve a formatear mi consulta para mí aquí sólo para verlo en una especie de código de color de versiones. Pero ahora si hago clic Navegar, notar que, incluso aunque hay una gran cantidad de desorden en la pantalla, mi mesa ahora tiene dos filas. Así que, déjame seguir adelante y hacer otra. En lugar de esto, me dejó vaya a la pestaña SQL nuevo. Y esta vez voy a insertar algo así Rob y su nombre estará Rob Bowden. Bowden. Vamos clic en Guardar. Vaya, en lugar Go. Haga clic en Examinar de nuevo, y Ahora notar Tengo dos filas. Por lo tanto, esto es sólo una forma más compleja manera de abrir Google Spreadsheets y solo teclear una fila en una columna. Pero lo que es fundamental es que ahora tenemos la sintaxis con el que escribir código para que en última instancia, podríamos realidad hacer algo y esto. Recordemos que soporte PHP Variables súper globales. ¿Qué hay dentro de dólar firmar subrayado GET en PHP? Tomamos un vistazo a uno o dos ejemplos sencillos. Y en PSet6, Recall tiene hola dot PHP que utiliza esta variable. ¿Qué pasa ahí? O lo que es? Un poco más fuerte. AUDIENCIA: [inaudible] DAVID MALAN: Es una nieve semilla de la matriz, que es sólo una forma elegante de decir una matriz que tiene pares de valores clave. Y las claves no son numéricos. Son palabras o cadenas. Y en concreto, lo que son aquellos pares de valores clave? ¿De dónde vienen? ¿Apenado? AUDIENCIA: [inaudible] DAVID MALAN: No? ¿De dónde vienen las claves pares de valores vienen? ¿Decir de nuevo? ¿De nuevo? ¿Soy el único audiencia algo? [Risas] Eso es correcto, ¿no? AUDIENCIA: [inaudible] DAVID MALAN: Sí, provienen de la cadena de consulta. Así pues, si se rebobina en el tiempo para cuando hemos jugado con Google y nos hemos ido a Google.com slash Búsqueda signo de interrogación q es igual a los gatos, si tuviera que pulsa Intro y si Google se implementaron en PHP, Código PHP que Google escribió tendrían acceso a la muestra de dólar resaltar GET dentro de los cuales es una clave llamada Q y un valor llamados gatos que a continuación, puede utilizar se utiliza para hacer una búsqueda real con. Así que, de hecho, lo que voy a hacer ahora es volver a mi código PHP que usted va a volver a ver más de en PSet7. Y en vez de enchufar en valores codificados duras que no parece como un muy sitio web dinámico, Voy a darle un teaser de lo que haría su código real. Se podría poner en dos, signos de interrogación como este. No sé lo que el nombre de usuario es. No sé lo que el nombre va a ser, pero sí sé que puedo conseguirlos de forma dinámica. Así que, si el código que estamos escribiendo ahora es el código que se ejecuta en los servidores de Google, o si se trata hola dot PHP, que viene con PSet6, Voy a pasar a la función de consulta al igual que printf, otros dos argumentos. GET, cita, nombre de usuario unquote, y GET, cita, el nombre del fin de la cita. Y ahora, observe lo que el estructura general está aquí. Tengo a la izquierda parte de la llamada, esta función llama consulta en PHP. Todavía tengo como primera argumento, sólo una cadena de texto. Pero esa cadena de texto es escrito en un lenguaje denominado SQL. Y, francamente, no es una lengua grande. Sólo vamos a hablar de formalmente hoy, de verdad. Y luego en el conjunto de problemas siete, hay relativamente algunas características que estamos va a aprovechar. Los signos de interrogación, sin embargo, significan que conectar un valor aquí y tapón en otro valor Aquí. Y fíjense, he omitido lo de todo el maldito quote-- it-- alrededor de la cita marca este momento. He omitido la cita marcas de todo el signo de interrogación, Lo sentimos, pero en esta ocasión. Así que, ¿cuál es bueno de esto función del signo de interrogación que PHP tiende a apoyar, Ruby y Python y otros lenguajes, esto sólo significa el enchufe de alguna valora aquí y ¿sabes qué? A determinar si se debe utilizar comillas simples o dobles. No me molestes con los detalles intelectualmente poco interesantes. Pero, asegúrese de que es correcta para que mi código es en última instancia, operativa y segura, lo cual tendrá un significado en poco tiempo. Ahora, ¿cuántos argumentos en total, sólo para ser claro, es la función de toma de consulta? ¿Alguien quiere votar por más de dos? Tres? Claro, ¿por qué? ¿Por qué tres? AUDIENCIA: [inaudible] DAVID MALAN: Exactamente. La primera parte es la cadena. El segundo argumento es el signo de dólar resaltar GET soporte de nombre de usuario. Y el tercer argumento es el lo mismo, pero sólo el nombre. Así, en otras palabras, ahora si yo tuviera un formulario web que tenían a los campos de texto, uno para el nombre de usuario, uno por su nombre, al igual como puedes ver en una página web cuando se registra para algún sitio web, esto podría ser el código en la parte final que realmente hace la inserción ahora en la base de datos. Ahora por el contrario, vamos a avanzar rápidamente. Supongamos que un usuario es ahora ingresar y desea escribir código PHP que comprueba si la persona que acaba de iniciar sesión es en realidad un usuario, puede utilizar la sintaxis muy simple. Se puede decir SELECT, digamos estrella, donde significa estrella todo. No sé lo que quiero quieren, así que simplemente dame todas las columnas de la tabla llama a los usuarios en los que, y esto es bueno. Seleccione apoya lo que es llamado un predicado, que es como una manera de calificar lo que quieres. Donde nombre de usuario es igual Lo dijeron ellos Malan. Así que aquí también, que he incrustado dentro del argumento a una función de PHP, una línea de código SQL. Y ese código SQL esta vez que se va, literalmente, para buscar Lo dijeron ellos Malan. Ahora eso no es del todo útil, así que me voy a saltar esa y yo voy a poner distancia este consejo de Brady, y vaya y plug-in en su lugar un signo de interrogación aquí. Por lo tanto, sólo para que quede claro, lo que debo informar a mi segundo argumento se si alguien acaba de iniciar sesión y yo que desee comprobar si él o ella es en realidad ¿un usuario? AUDIENCIA: [inaudible] DAVID MALAN: Sí. Oigo dólar signo de subrayado Obtener cotización, nombre de usuario unquote. Y eso debería volver a mí cualquiera de las filas en mi base de datos que tienen un nombre de usuario de Malan. Ahora con suerte, voy a volver cero si no Malan ha estado aquí, o uno si él tiene. No debería volver dos o tres o cuatro. ¿Por qué? AUDIENCIA: [inaudible] DAVID MALAN: Dije único, ¿verdad? Razón simple. Porque le dije que tiene que ser único, simplemente lógicamente, sólo se puede tener cero o uno Malans en esta tabla de base de datos en particular. Ahora como un aparte, para que lo has visto que, a pesar de que sigo usando GET y aunque PSet6 sólo se utilizan GET, que sin duda puede tener POST. Y recordemos que Post es otra técnica para la presentación de la información de una forma, pero no aparece en la URL. Es un poco más seguro sin duda para cosas como nombres de usuario y contraseñas, PSet7 que, de hecho, implican. Por lo tanto, vamos a hacer esto en PHP MyAdmin y ver qué pasa. Voy a ir a la pestaña de MySQL. Y cuenta que el valor predeterminado para PHP MyAdmin, sólo para tratar de ser útil, es seleccionar la estrella de los usuarios donde uno. Bueno, uno siempre es cierto, por lo esto tiene la tonta efectiva de sólo tienes que seleccionar todo. Pero yo voy a ser un poco más pedante y manual escriba a cabo estrella SELECT FROM usuarios. Ahora técnicamente, puede citar el nombre de las tablas. Es raro que usted tiene que, pero notan estos no son sus presupuestos normales en el teclado de Estados Unidos. Este es el backtick llamada, que generalmente en la parte superior izquierda esquina de su teclado. Pero es raro que Tú en realidad tiene que molestarse con eso, así que voy a omitir todos modos. Así que ahora, déjame ir adelante y golpeó ir. ¿Y cuántas filas debo obtener volver cuando selecciono la estrella de los usuarios? AUDIENCIA: [inaudible] DAVID MALAN: El número de filas, seguro. Pero, ¿cuántos en este pisos de concreto en este momento? Dos, porque no había mí y no había Rob. Por lo tanto, si hago clic en Ir, veo visualmente que He conseguido volver, de hecho, dos filas. Hay una gran cantidad de desorden en la pantalla, pero sólo veo dos filas. Por el contrario, si lo hago de nuevo y hacer Estrellas SELECT FROM usuarios, en su nombre de usuario es igual a la cita, fin de la cita Malan, ahora si me haga clic en Ir, Yo sólo voy a volver una fila. Y por último, si lo hago algo como esto, supongamos que no me importa conseguir todo, que es una especie de sentido ahora, porque hay sólo dos columnas. No es como que estoy seleccionando una enorme cantidad de datos. Supongamos que seguir adelante y no seleccione el nombre desde usuarios, donde nombre de usuario es igual a Malan, lo bueno de SQL con honestidad, es que en realidad sólo hace lo que le dices que haga. Es bastante sucinta, pero que, literalmente, simplemente decirle lo que quieres hacer. Seleccione el nombre de los usuarios donde el nombre de usuario es igual a Malan. Y realmente es así de explícito. Así que, ahora si me golpeó Go, cuántos filas voy a volver? Uno, porque es sólo Malan, es de esperar. O cero si no está allí, pero uno al máximo. ¿Y cuántas columnas voy a volver? ¿Cuántas columnas? Esta vez, sólo voy para conseguir uno porque yo no hice seleccione estrella, que es todo. Ahora estoy seleccionando solo nombre, así que simplemente volver a una columna y una fila. Y parece una especie de forma adecuada ridículo, super mirando pequeño como este. Por lo tanto, lo que realmente está pasando? Al ejecutar un SQL consulta mediante selección, lo que está recibiendo de vuelta de la base de datos es como una tabla temporal con filas y columnas, tal vez, pero que omite nada que No fue realmente elegido por usted. Así, es como si alguien tenía una gran hoja de cálculo de todos los estudiantes registrada por alguna grupo de estudiantes, y dices: dame todo el primer año que han registrada para nuestro grupo de alumnos, lo que su colega en el grupo de estudiantes podría hacer es que sólo se podían entregar que toda la hoja de cálculo. Eso es como decir que seleccione estrellas. Y que es un poco molesto si sólo quería que el estudiante de primer año. Y así, si en vez de decir, seleccione la estrella de la mesa de base de datos donde el año es igual a cita, estudiante de primer año fin de la cita, es como si tu amigo en el grupo de estudiantes literalmente resaltado y copiados sólo las filas de primer año, les pega en un nuevo Google Hoja de cálculo o un archivo de Excel, y devolvió el resultante sólo archivo. Eso es todo lo que está pasando en conceptualmente aquí. Así que al final, lo que podemos hacer algunas cosas bastante lujo almacenando cosas como nombres de usuario y contraseñas y similares. Pero, resulta que debemos hacer un poco diferente a esto. No es tan inteligente como para solamente almacenar un nombre de usuario y una contraseña. Alguien anterior, creo que aquí abajo, se sugiere una identificación. Ahora una identificación podría ser como un Harvard identificación o de Yale Net ID, pero podría ser incluso más simple en nuestro caso la base de datos. Y, en efecto, el caso común es tener otra columna. Y yo voy a ir adelante y editar mi mesa. Y si juegas un poco con esta interfaz para PSet7, verás que se puede comprobar este botón aquí y añadir un campo al comienzo de la tabla. Y ahora si hago clic en Ir, va que me diera una de esas formas de antes. Voy a añadir un campo llamado ID. Y yo voy a hacer que sea un tipo numérico. Tengo un montón de valores para los valores numéricos. Yo sólo voy a elegir un INT y No te preocupes por los tamaños dispares. Yo no tengo que especificar una longitud o un valor, porque va a ser 32 bits no importa qué. Atributos, no vimos antes. Cualquier interés en cualquiera de estos opciones de menú en esta ocasión? Para una INT? ¿Qué propones? ¿No? ¿Alguno de ellos tiene sentido? Sí. Sí, sin firmar, ¿verdad? Generalmente, si vamos a dar cada uno un número único, que es donde esta historia es va, yo en realidad sólo quiero que una persona tenga el número como cero y uno y dos y tres y cuatro. Yo no necesito para hacer frente con números negativos. Simplemente parece que la complejidad excesiva. Quiero cuatro mil millones de valores posibles, no cuatro mil millones de valores posibles, así que sólo duplicando la capacidad de mi INT. Como acotación al margen, si quieres relacionar esto a algo como Facebook, vuelta en clase de mi día en que Facebook salió por primera vez, Creo que lo que eran utilizando en su base de datos MySQL para almacenar un usuario de identificador, era sólo un INT. Pero, por supuesto, hay mucho de gente real en el mundo. Hay una gran cantidad de falsos Facebook cuentas en el mundo. Y por lo que finalmente, Facebook desbordó el tamaño de un INT, una de cuatro mil millones valor. Razón por la cual, si nos fijamos alrededor y hay sitios web que puede decirle lo que su identificador único es. Y si nunca elige un nombre de usuario en Facebook, verás tu ID único. Creo que es el perfil PHP dot signo de interrogación ID es igual a algo. Eso es ahora algo así como un gran INT, o un largo tiempo si se quiere, que es un valor de 64 bits o algo similar. Así que, incluso en el mundo real hacer esto cuestiones en última instancia, a veces importan. Y resulta que aquí, si soy dando a todos mis usuarios un identificador único, Quiero ser super explícita y mínimamente hacer de este campo único. Pero resulta que hay una pedazo de nomenclatura también hoy eso es una clave principal. Si usted está diseñando una base de datos mesa y usted sabe de antemano que una de las columnas de esa tabla debe y va a identificar de forma exclusiva las filas en la tabla, que desea especificarlo y decirle a la base de datos, este es mi clave principal. Puede haber duplicados en otros campos, pero yo estoy diciendo la base de datos que esta es mi primaria, mi campo más importante, eso garantiza que sea único. Ahora, esto parece redundante. Ahora estoy proponiendo que nos agregar, haciendo clic en Guardar aquí, un called-- campo y voy seguir adelante y haga clic en la IA, volveremos a que en un momento, Save. Estoy proponiendo ahora que mi mesa este aspecto. Tengo un campo INT llamada ID, un campo CHAR llamado nombre de usuario, un campo VARCHAR llamado Nombre, pero ID, si es primario y por lo tanto, único, ¿por qué me acaba de perder el tiempo de la introducción de lo efectivamente es un segundo única campo llamado ID que es un INT? Nombre de usuario, recuerdo, era Ya único, dijimos. Así que, lógicamente, no es necesario ninguna experiencia de base de datos a la razón a través de este, ¿por qué puede ser que he introducido un INT como mi identificador único también? ¿Qué tiene esto-- dicen otra vez? AUDIENCIA: [inaudible] DAVID MALAN: Random el acceso es más fácil, ¿por qué? AUDIENCIA: [inaudible] DAVID MALAN: Sí, es simplemente acceder a los números. Por lo tanto, si usted piensa de esta verdad es una tabla, como una matriz, Ahora tengo identificadores únicos que puedo saltar. Y aún mejor que la que es ¿Cuán grande es un INT va a ser otra vez? 32 bits o cuatro bytes. ¿Qué tan grande es mi nombre de usuario va a ser? Al máximo? 16 bytes. Por lo tanto, si usted está realmente preocuparse por el rendimiento de su código, piensa de nuevo a PSet5, preferiria para buscar un valor de cuatro bytes o una 16 valor de byte, ¿verdad? Es tan simple como eso. Usted tiene que hacer cuatro veces más cantidad de trabajo para buscar nombres de usuario porque esos son 16 bytes. Por lo tanto, usted tiene que, literalmente, comparar los 16 bytes para ser Seguro que sí, esto es nombre de usuario que quiero. Mientras que para un INT, puede hacerlo con sólo cuatro bytes. Y como un aparte para aquellos interesado en hardware, Resulta que usted puede caber algo así una un valor de 32 bits en algo o INT denominado un registro en un ordenador CPU, lo que significa que es super, super rápido, incluso a las más bajas nivel de hardware del equipo. Por lo tanto, sólo hay ventajas por todos lados. ¿Entonces, qué significa esto? De hecho, cuando usted está diseñando un tabla de base de datos, casi todo el tiempo vas para no tener sólo los datos que te importa, sino también algo así como un identificador único porque esto se va a vamos a hacer otras cosas. Y vamos a tropezar con un problema aquí. Supongamos que los usuarios no tienen solo los nombres de usuario y nombres, pero también tienen cosas como ciudades y los estados y códigos postales, por lo menos aquí en los EE.UU.. Por lo tanto, voy a seguir adelante y decir rápidamente, dame tres columnas más al final de la tabla. Y esto va a ser la ciudad, esto va a ser Estado, y esto va a ser Zip. Ahora tipos City, lo datos debe ser esto, tal vez? VARCHAR? No sé lo que el más largo nombre de la ciudad es. En algún lugar de los Estados Unidos, no hay Probablemente alguna palabra ridículamente largo, así que vamos a ir con 255, un poco históricamente o arbitrariamente. Estado, lo que quieres hacer? Cuestión de criterio, ¿no? Lo que es tal vez el más eficiente? ¿Cuántos personajes? Tal vez sólo dos, si podemos salirse con la suya haciendo precisamente, como, MA de Massachusetts y así sucesivamente. Por lo tanto, voy a ir a un valor CHAR de dos. Código postal es muy interesante. Estamos aquí en 02.138, por lo que sugiere que debemos utilizar y qué? Es un INT, ¿verdad? INT, INT, corta? Corto funcionaría. ¿No? CHAR o cinco, pero quiero una INT. ¿Por qué hacer retroceder en un INT? Convencerme de esto. ¿Cuál es estúpido sobre un INT, mi idea? Sí. AUDIENCIA: Recoger más memoria. DAVID MALAN: Recoger más memoria. Cuatro bytes, pero eres proponer un código postal como cinco bytes o alguien era como CHAR, que se siente como eh, eso no es realmente el caso. Bueno, divertida historia. Hace años, cuando yo solía utilizar Microsoft Outlook para mi correo electrónico, Finalmente me quería cambiar a Gmail. Y así, he exportado todos los de mi contactos de Outlook como un archivo CSV. Valores Separados por Comas, que simplemente significaba que tenía todas mis nombres de amigos y última nombres y números de teléfono y códigos postales y todo eso. Y entonces hice la error de abrirlo en Excel, que es una programa de hoja de cálculo que entiende archivos CSV como hemos visto. Pero entonces, debo haber golpeado, como, Comando o Control S en un punto. Y Excel parecer en el momento tenido una característica mediante el cual cualquier momento vio un número, que trató de ser útil. Y si ese número se inició con ceros, sólo se librarían de ellos. ¿Por qué necesita líderes ceros en números enteros? Son sentido, matemáticamente. No son de sentido en el sistema postal de los EEUU. Así, he tenido durante años, a este día, todavía tener amigos que cuando el caso raro que yo necesito a alguien es abordar estos días, Yo todavía veo que yo tener un amigo en Cambridge, Massachusetts, 2.138. Y es molesto si estás tratando de ordenar de programación generar sobres o simplemente apúntelo. Y es por esta razón, Elegí el tipo de datos incorrecto. Así que, me encanta tu idea. Vamos a utilizar un campo CHAR. Cinco personajes, excepto hay un caso esquina. Si todavía enviar correo, a veces códigos postales en estos días, que son, como, más cuatro. Por lo tanto, necesitamos un guión y después necesitamos cuatro números más. Así que para ser honesto, podría ir muchas maneras diferentes. Por ahora, me voy a seguir simple y estoy va a decir que es un cinco por valor CHAR y estamos va a saltar todo el tablero más cuatro. Pero estos son los tipos de compensaciones. Y se puede pensar en el mismos problemas que surgen con números de teléfono u otros campos. Y ahora, esto es en realidad un camino absurdo bajar. Supongamos que tanto Rob y yo y Hannah y María y [? Davon?] Y Andy y otros en el personal de todos viven en Cambridge, Massachusetts, 02138. En realidad, esto se siente estúpido que soy añadir a mi tabla de usuarios, ciudad, estado, y el código postal. ¿Por qué? AUDIENCIA: [inaudible] DAVID MALAN: Diga otra vez? AUDIENCIA: [inaudible] DAVID MALAN: Siempre son va a ir de la mano, ¿no? Cuando resulta que solíamos pensar este fue el caso hasta que taxativamente buscado todo los EE.UU., y resulta que hay son algunas inconsistencias donde varios pueblos tienen la misma postal, lo cual es raro. Pero, si estipulamos por ahora que 02.138 es siempre Cambridge, Massachusetts, ¿por qué en el mundo le guarde en su base de datos de Cambridge y MA y 02138 para mí y para Hannah y para Rob y para [? Davon?] Y para los demás que viven aquí en Cambridge, es perfectamente redundante. Debemos huir con sólo el almacenamiento de qué? Sólo el código postal. Pero entonces, si almacenamos sólo la código postal, sí quiero, probablemente, para mi sitio web para saber dónde es 02.138. Por lo tanto, necesito otra mesa. Y eso está bien. Y de hecho, esta es una de las procesos de diseño de tablas de diseño que va a hacer en PSet7 así por el cual desea factorizar datos comunes. Al igual que hemos estado factorizar código común y factoring cabo común estilos de CSS, aquí también en la base de datos, si sólo necesito 02.138 a única identificar la ciudad natal de alguien, no almacene Cambridge, Mass para cada usuario de zurcir en su mesa. En su lugar, tener una tabla separada llamada Cremalleras que debe tener lo columnas? Probablemente un campo de ID, simplemente porque, por los principios que están hablando ahora. Probablemente un campo postal para 02.138. Y entonces probablemente lo que otros columnas? Ciudad y estado, pero sólo tienen un fila de 02138, una fila para 02139, una fila por 90.210. Y eso es, literalmente, todos los códigos postales que conozco. Así que ahora, ¿qué puedes hacer? Esto es problemático, porque ahora tengo dos tablas. Por lo tanto, mis usuarios son en su mayoría por aquí, pero su información de estado de la ciudad es aqui. Así, resulta que con SQL, hay en realidad una manera de unirse a la información, y verá esto en el PSet. Pero resulta que puedas hacer algo como esto. Estrellas SELECT FROM usuarios, ÚNETE cremalleras EN usuarios salpican postal es igual cremalleras salpican postal. Lo cual es un poco prolijo, es cierto, pero esto sólo significa seleccione todo, desde la proceso de tomar mi tabla de usuarios y mi mesa de cremalleras. Únete a ellos, por un campo que tienen en columna. Así que, literalmente, hacer algo así, y devuélveme una nueva tabla temporal eso es más amplio, que es más grande, que tiene todas las columnas de ambos. Y eso, simplemente, sería el sintaxis para hacer algo como esto. Así, hay un futuro, pero no va ser otras decisiones de diseño que usted tienen que hacer, no sólo con índices sino que también se ejecuta en desafíos. De hecho, hay un desafío en cualquier diseño de base de datos por el cual a veces dos personas podrían querer para acceder a las mismas filas de la base de datos mesa. Por lo tanto, esto es algo que vamos a encontrar en PSet7 también. Pero pensé que me vería en un ataque que es posible en SQL. ¿Cuáles son algunos de los problemas que pueden surgir? Por lo tanto, te vas a encontrar esto en PSet7. Y les decimos abiertamente lo que el solución de codificación para este problema es. Pero si usted toma una clase de nivel superior, especialmente en los sistemas operativos, vas a encontrar un tema de atomicidad, el problema de tratar de hacer varias cosas a la vez sin interrupción. Y pensé en presentarme este idea para PSet7 con una metáfora que he aprendido yo en Margo Sistemas operativos CS164 de Seltzer Hace años la clase. Supongamos que usted tiene una de estas dormitorio nevera en su habitación de la residencia o casa, y usted tiene una verdadera afición por la leche. Y así, se llega a casa después de las clases un día, abrir la nevera. Oh, maldita sea. No hay leche en la nevera. Así, se cierra la nevera, cerrar la puerta, bloquear su dormitorio, caminar alrededor de la esquina a CVS, ponerse en fila, y empezar a comprobar hacia fuera para un poco de leche. Y va a tomar un tiempo, porque esos malditos autoservicio contadores tardan una eternidad para utilizar de todos modos. Así que mientras tanto, su compañero de cuarto llega a casa. Él o ella realmente le gusta la leche también. Ellos entran en la habitación de la residencia, abrir la nevera, oh, maldita sea. No hay más leche. Por lo tanto, él o ella también que pasa alrededor de la esquina. Pero ahora, ya que no hay como dos o tres o cuatro CVSes cerca, pasan a ir a uno de los diferentes en la plaza. Y ahora, unos pocos minutos más tarde, los dos volver a casa y ugh, peor problema nunca. Ahora usted tiene demasiada leche porque va a ir agria. Y te gusta la leche, pero no me gusta realmente la leche. Así que ahora, esto era un caro error porque ambos tomado una decisión en base a la estado de alguna variable que estaba en el proceso de ser cambiado por usted, el iniciador de ir a comprar leche. Por lo tanto, lo que es tal vez un ser humano solución a ese problema? AUDIENCIA: [inaudible] DAVID MALAN: Deja una nota, ¿verdad? Siempre deje una nota, si estás familiarizados con ese programa. Sí, hay dos de nosotros. Por lo tanto, siempre dejar una nota, o bloquear literalmente el refrigerador con algún tipo de candado o algo por encima de eso. Pero eso es en realidad va a ser problema clave con el diseño de la base de datos, especialmente cuando es posible que tenga varios navegadores, múltiples ordenadores portátiles, varios usuarios intentan todo actualizar la información a la vez. La información particularmente sensible como la información financiera, por el que con un comercio de acciones sitio web como usted va a ser la construcción, ¿y si desea comprobar la cantidad de dinero que tiene y entonces, si usted tiene suficiente, comprar algunas acciones? Pero lo que si alguien más que tiene una cuenta conjunta con usted es tratar de forma simultánea para comprar un poco de caldo? Por lo tanto, él o ella es el control de la saldo de la cuenta, los dos volver al mismo respuesta, no hay leche. O ambos a volver la respuesta, usted tiene $ 100 en la cuenta. Ambos tratan de tomar la decisión para comprar una acción de algunas acciones de la compañía. Y ahora, ¿qué sucede? Usted tiene dos acciones? No tiene acciones? Problemas como la que pueden surgir. Así que vas a encontrar eso. Ataques de inyección SQL, por suerte, son algo que nosotros le ayudaremos con, pero estos son atrociously comunes en estos días todavía. Por lo tanto, esto es sólo un ejemplo. Yo no hago afirmaciones de que Sistema de Harvard PIN es vulnerables a este ataque en particular. Hemos intentado. Pero, ya sabes que nosotros tener un campo como este. Y de Yale Net ID tiene un parecido pantalla mirando estos días. Y resulta, que tal vez el Sistema de PIN está implementado en PHP. Y si were-- es no-- que podría tener código que se parece a esto. Tienen dos variables. Dame el nombre de usuario y contraseña de la variable global post súper que hemos hablado antes. Quizás Harvard tiene una consulta como la estrella SELECT FROM usuarios donde nombre de usuario es igual que y la contraseña es igual que. Y noto que estoy solo enchufarlo en el uso de la notación de corchete de la otra día, lo que significa que sólo tiene que conectar un valor Aquí. No estoy usando la técnica de signo de interrogación. Yo no tengo ninguna segundos o terceras argumentos. Estoy literalmente la construcción de la cadena de mí mismo. El problema, sin embargo, es que si alguien le gusta un scroob, que es una referencia a una película, Abre una sesión con algo como esto, y me he quitado los puntos que suele encubrir contraseñas, lo que si es particularmente malicioso y su contraseña quizá es 12345, por la película llamada "Spaceballs" pero críticamente los tipos A comilla simple después de los cinco, luego, literalmente, la palabra o en el espacio, y luego cita, un solo fin de la cita es igual a la cita uno, Pero Tenga en cuenta que ha omitido qué? Ha omitido la cita a la derecha y ha omitido la cita de la izquierda. Porque si este atacante presunción de scroob es que las personas que escribieron este código PHP no fuera tan brillante, tal vez sólo tienen algún sola cita a la vuelta de la interpolación de una variable entre llaves? Y lo que tal vez, lo que pudo tipo de completar su pensamiento para ellos, pero de una manera que va para dejarle hackeó el sistema PIN. En otras palabras, supongamos que este es el código de y ahora nos conectamos lo scroob escrito. Y es rojo, porque es malo. Y el texto subyacente es lo que él escribe en, scroob podría engañar servidor de Harvard en la construcción de una consulta SQL cadena que se parece a esto. Contraseña es igual a 12 345 o uno es igual a uno. El resultado de lo cual, lógicamente, es que esta registrará scroob en si su contraseña es 12345 o si uno es igual a uno, que por supuesto es siempre cierto, lo que significa scroob siempre entra. Y así, la manera de arreglar esto, como en muchos casos, sería escribir más defensivo. Para usar algo como nuestra función de consulta real, que verá en PSet7, donde nos conectamos algo así como signos de interrogación aquí. Y la belleza de la función de consulta que te dan es que defiende contra éstos los llamados ataques de inyección SQL, donde alguien está engañando a su código en inyectar su propio código SQL. Porque lo que la función de consulta damos en realidad se va hacer, si utiliza la sintaxis de signo de interrogación y un segundo y un tercer argumento aquí, es ¿qué añadir a la de entrada que el usuario siempre? Aquellos barra invertida cita. Por lo tanto, escapa a cualquier potencialmente caracteres peligrosos. Esto parece extraño ahora, pero no es vulnerable porque no hace cambiar la lógica ya porque toda esa contraseña es Ahora una sola cita que no lo es, De hecho, la contraseña del scroob. Así, ha habido algunos chistes sobre esto en los últimos años. Por lo tanto, se trataba de una foto tomada de algún friki en un estacionamiento por el que usted puede ser que sepa que algunas ciudades y los estados tratan de escanear su licencia placa para facturarle a usted o al ticket si se va por fuera, como, la cosa E-Z Pass. Por lo tanto, esta persona presume que tal vez la gente que escribe el sistema E-Z Pass no eran tan brillantes, y tal vez solo concatenados juntos una cadena, para que él o ella no podía maliciosamente no sólo completar su pensamiento, pero en realidad ejecutar un comando incorrecto, que todavía no hemos mencionado, pero es fácil adivinar. Que además de eliminar y insertar y actualizar y seleccionar, también hay una palabra clave llamada gota, que borra literalmente todo en la base de datos, la cual es particularmente malo. Podemos hacer un zoom en este caso que es un poco difícil de ver. Esto, ahora, es un famoso dibujo animado eso es maravillosamente inteligente ahora y comprensible. [Risas] Sí, fresco. Tipo de geeking cabo. Así que estos son, pues, Ataques de inyección SQL. Y son tan fáciles de evitar mediante el uso de el código correcto o las bibliotecas adecuadas. Y verás en PSet7, eso es por eso te damos la función de consulta. Así que, un par de teasers que pensamos que sería mejor le dará aquí en nuestra restante minutos juntos. Así que, como usted recuerda de semana cero, introducido estos dos bombillas que son agradables, no sólo porque que son bastante y son coloridos, pero porque apoyan algo llamado un API, una Solicitud Interfaz de programación de Y en CS50 hasta el momento, no tenemos sobre todo centrado en GET y POST, pero resulta hay otros verbos HTTP como PUT. Y de hecho, esto era una diapositiva de semana cero con lo cual si se escribe código que envía a la PSet6 una petición HTTP que se parece a esto con este trozo de texto en la parte inferior, que se llama JSON, o JavaScript Object Notation que vamos a hablar de la próxima semana, puede activar o desactivar o cambiar el color de las luces como esas. Así que si CS50 también tiene, además de algunos de esas bombillas aquí en New Haven si desea pedir prestado para los proyectos finales, también algo de Microsoft Bandas, que son como los relojes que usted usa alrededor de la muñeca que de igual forma tener una API para que puede escribir su propio software para ellos. Tenemos una cuenta con Código de iOS de Apple hasta que si usted tiene un reloj de Apple o un iPhone o un iPad o un iPod, usted puede escribir código que en realidad se ejecuta en ellos. Tenemos un montón de Arduinos, que son diminutos ordenadores sin casos, en esencia, que se puede conectar a través de USB, normalmente a su propio Mac o PC, escribir código que se ejecuta en estos física dispositivos que a menudo tienen sensores en ellos para que pueda interactuar con el mundo real. Tenemos un montón de dispositivos Leap Motion, que son los dispositivos USB para Mac y PC, aquí y otra vez, en New Haven. Y si lo conectas a tu Mac, en realidad se puede controlar el ordenador escribiendo software que a través de rayos infrarrojos, se da cuenta de dónde están sus manos humanas son, incluso sin tocar el teclado. Pensamos que nos gustaría compartir una rápida vislumbrar en este, por ejemplo. [REPRODUCCIÓN DE MÚSICA] Así pues, tenemos un todo montón de estas cosas, también, llamado Myo brazaletes que se pone sobre el antebrazo y entonces usted puede controlar lo real mundo o el mundo virtual como este. [REPRODUCCIÓN DE MÚSICA] O, también tenemos algunos Google Cartón, que es, literalmente, como, una caja de cartón se puede poner en su cara, pero diapositiva en su teléfono en él de manera que se pone el vaso de su teléfono muy cerca de sus ojos. Y Google es de cartón bastante barato en $ 10 o $ 20. Y tiene pequeños lentes que un poco fuera de turno la imagen en la pantalla para su humana ojos para darle una sensación de profundidad por lo que en realidad tiene un 3D medio ambiente frente a ti. También tenemos algunos Samsung Gear, que es la versión más cara de este, pero que puede deslizarse de manera similar en una Teléfono Android y le dará la ilusión de-- o dar la experiencia de la realidad virtual. Y en nuestras dos minutos finales, pensamos que nos gustaría probar a hacer esto. Si puedo proyectar lo Colton tiene aquí sólo para ir abriendo boca, déjame ir por delante y tirar arriba en la pantalla grande aquí. Déjame matar las luces. Colton, ¿quieres ir a continuación y poner en tu celular por un momento y vienen de más a la medio del escenario? Y qué quieres project-- esto es lo que ve Colton. Ahora, el Wi-Fi en aquí es no tan fuerte para este dispositivo que este es súper atractiva, pero Colton es, literalmente, en este lugar futurista mágico. Él sólo ve una imagen. Usted está viendo el ojo izquierdo y el derecho que su cerebro están cosiendo juntos en una de tres dimensiones medio ambiente en su rostro. Él sólo ha seleccionado una opción de menú aquí. Y así, una vez más, él está usando este auricular con un teléfono Samsung en él que es inalámbricamente proyectar a nuestros gastos. Ahora usted está en Marte, me parece? COLTON: Creo que sí. No estoy seguro de [inaudible]. [Risas] DAVID MALAN: Resulta Marte tiene estos menús. COLTON: [inaudible] algunos fresco lugares si quieren ir a-- DAVID MALAN: ¿Hacia dónde queremos ir? COLTON: [inaudible] DAVID MALAN: Y vamos a ver donde nos Colton de tomar ahora. COLTON: [inaudible] DAVID MALAN: Por lo tanto, hay tantos diferentes lugares a los que pueden tomar usted mismo. Hay FAPIs través del cual se puede escribir juegos o interacciones que ejecutar, en última instancia, en el teléfono. Por lo tanto, lo que realmente escribir una aplicación de teléfono móvil. Pero gracias al software y las capacidades gráficas, Colton ahora es en este pequeña casita. Y en el riesgo de abrumar a nosotros mismos, Colton y yo me quedo en torno a mientras que al final de la clase hoy si te gustaría venir y jugar. Y vamos a traerlos la semana que viene también. Sin más preámbulos eso es todo por hoy. Nos vemos la semana que viene. [MÚSICA - Ragga Twins, "hombre malo"]