[Играет музыка] Дэвид Малан: Ладно, это CS50. Это конец недели восемь. И сегодня, мы начинаем чтобы заполнить некоторые куски когда дело доходит до строительства вещи в Интернете. Так, напомним, что в понедельник мы тратим гораздо больше времени на PHP, который является эта динамика язык программирования, который позволяет нам выход, среди других вещи, HTML и другие такие материалы что мы хотим видеть. Но мы на самом деле не посмотрел на то, как мы собираемся хранить любую информацию. В самом деле, почти ничего из этого супер интересные сайты вы посещаете сегодня есть какой-то базы данных на заднем конце, верно? Facebook, безусловно, сохраняет множество данных о всех нас и Gmail магазинах все из ваших писем. И так, многие другие сайты не только статический контент это информационный. Это на самом деле динамика в некотором роде. Вы предоставляете вход, он обновляет страницы для других людей. Вы получаете сообщение, вы посылаете Сообщения, и так далее. Таким образом, сегодня мы посмотрим поближе на основами проекта что вы будете погружаться в следующем неделю, CS50 Финансы, которые на самом деле происходит, чтобы вы построить что-то не в C, но в PHP. Сайт, который выглядит кое-что как это что позволяет покупать и продавать запасы, которые фактически собирается привлечь на реальном времени данные о запасах от Yahoo Finance. И так, в конечном счете, вы будете иметь иллюзия для себя и для пользователей, что вы на самом деле покупка и продажа акции и получать почти в реальном времени Обновления, Управление Портфель, все из которых будет требовать, имеющие, в конечном счете, база данных пользователей. Так, в ваших собственных слов, особенно если вы не супер знакомы с компьютером наука или базы данных, то, что Вы знаете, базы данных, чтобы быть Прямо сейчас, в нетехнических терминах? Что это? Как бы Вы описали его в соседа или друга? АУДИТОРИЯ: [неразборчиво] Информация [неразборчиво] Дэвид Малан: Таким образом, перечень информации, или store-- перечень информации, что вы, возможно, захотите, чтобы сохранить о чем-то, как пользователь. И то, что делают пользователи имеют связанных с ними? Если вы пользователь Facebook или на Gmail, каковы характеристики что все из нас имеют пользователи? Мол, то, что могут быть некоторые из столбцы в таблице, к которой мы ссылался последний раз? Потому что опять же, вы можете думаю, базы данных действительно, как фантазии Excel файла или Google Таблица или Apple, номера файлов. Итак, что вы думаете о когда вы думаете о пользователь? Что у них есть? Что это? АУДИТОРИЯ: Имя. Дэвид Малан: Имя. Так что, если имя, как Дэвид Малан будет имя какого-либо пользователя. Что еще есть пользователь? АУДИТОРИЯ: ID. Дэвид Малан: ID. Так что, как идентификационный номер, как ваш Гарварде ID или ваш Йельского Net ID и тому подобное. Что еще может пользователь имеет? АУДИТОРИЯ: Пароль. Дэвид Малан: Пароль, может быть, адрес, может быть, номер телефона, может быть, адрес электронной почты. Так, есть букеты полей и это может рода выйти из под контроля быстро, как только вы начинаете понимая, о, давайте хранить это и давайте хранить это и это. Но как мы на самом деле это сделать? Итак, еще раз, то ментальная модель чтобы на сегодняшний день, как мы погрузиться в реальной SQL, Structured Query Language, представляет собой базу данных, которая выглядит как это. Это просто строк и столбцов. И вы можете себе представить Google Spreadsheets или любое количество других программ. Но то, что является ключевым о MySQL, которая является программное обеспечение базы данных мы будем использовать, свободно открыто available-- использования Facebook это и любое количество других websites-- база данных хранит вещи реляционные. И это реляционная база данных просто означает, что тот, который в буквальном смысле хранит данные в строках и столбцах. Его так просто. Таким образом, даже что-то вроде Oracle, что Вы, возможно, как правило, слышали это реляционная база данных. А под капотом, его хранит данные в строках и столбцах. И Oracle обвиняет Вас в много денег, чтобы сделать это, в то время как обвинения MySQL не вы ничего за то же самое. Так, в SQL собирается дать нам по меньшей мере, четырех операций. Возможность выбора данных, как для чтения Данные, вставка, удаление, и обновление данных. Другими словами, те на самом деле четыре ключевых операции которые собираются, чтобы позволить нам изменять материал в тех строках и столбцах. Инструмент, который мы используем сегодня, особенно узнать SQL и играть с ним снова призвал PHP MyAdmin. Это инструмент на основе веб-. Всего случайно это написано в PHP. Но это даст нам графическую пользовательский интерфейс, так что мы действительно можем создать эти строк и столбцов а затем поговорить с ними с помощью кода. Так, теперь давайте начинать что я думаю, откровенно говоря, вид процесса удовольствие от строительство заднюю часть веб-сайтов, части, что пользователи не см, но, безусловно, заботятся о, потому что это довольно данных собирается. Так, подобно С и немного меньше, как PHP, SQL, или базы данных, которая поддерживает SQL, имеет виды на эти данные не менее и гроздья других. СИМВОЛ, VARCHAR, INT, BIGINT, Десятичной и DateTime. И есть целый куча других функций, но давайте делать это, способ реального примера. Я собираюсь пойти в CS50 IDE где заранее, я вошли в и я также посетил URL для этот инструмент называется PHP MyAdmin. А в семь проблема установить, мы расскажем вам, как именно, чтобы добраться до этого интерфейса также. На верхнем левом углу, заметите, что он говорит, лекции. И, что просто означает, что заранее, я создал пустой базы данных называется лекция что не имеет таблицы в нее еще. Там нет строки и столбцы. Поскольку первый что мы собираемся делать это начать, чтобы создать таблицу что собирается хранить наши пользователи. Так, буквально в течение здесь направо, я собираюсь рассказать базу данных Я хочу таблица называется пользователей. Таким образом, это как файл, который я хотите сохранить все мои данные в. И сколько колонок? Ну, давайте держать его проста в настоящее время. Я просто хочу, чтобы хранить подобно имя пользователя и имя для пользователя. Мы начать с малого. Итак, я хочу всего две колонки. И я собираюсь идти вперед и нажмите Go. А потом, за эти колонны, что я собираюсь чтобы do-- если этого Интернете cooperates-- все права, так что мы собираемся, чтобы попытаться это снова. Я собираюсь создать таблицу с именем Люди с двумя колоннами, нажмите Go, ОК. Теперь у нас есть на самом деле быстро. Спасибо, очень хорошо сделано. Ладно, так, что мы хотим эти столбцы можно назвать? Так, один собирается назвать Имя пользователя. Таким образом, все я вижу here-- и интерфейс откровенно становится немного некрасиво в конце концов, как только вы начинаете набирать все эти данные. Но то, что приятно, что-то как это ни парадоксально, я создаю столбцов, но инструмент имеет глупости положил их в ряды так что я могу настроить эти столбцы. Так, есть два заготовки там под имя. И одно из этих полей я хочу назвать имя пользователя, и другое поле я хочу назвать имя. И теперь у меня есть, чтобы выбрать типы данных для этих вещей. Так, в то время как в Excel и Таблицы Google, если вы хотите столбец, вы в буквальном смысле просто введите имя или имя пользователя, нажмите Enter. Может быть, вы делаете это жирный шрифт просто для ясности, но это так. Вы не укажите типы колонок. Сейчас в Google Spreadsheets или Excel, вы может указать, как оказывается данные. Вы можете перейти в меню Формат, и вы можно указать показать этот знак как доллар, показать это как значение с плавающей запятой. Так, это похоже по духу что то, что мы собираемся сделать, но это на самом деле происходит, чтобы заставить данные, чтобы быть определенный тип. Теперь, даже если минуту назад я сказал, что есть только несколько типов данных, там на самом деле намного, и они в разной степени специфичности. И, как в сторону, вы может даже сделать модные вещи как геометрий хранения внутри базы данных. Вы можете хранить вещи как координат GPS и на самом деле найти, математически, точки, которые близки к другим. Но мы собираемся держать это супер просто и идти до сюда, все так называемые типы строк. Итак, вот список из целая куча вариантов. СИМВОЛ, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. И это отчасти подавляющим. И, к сожалению, несколько как это ни парадоксально С, полукокса на самом деле не СИМВОЛ. Если вы укажете в базе данных что ваш тип данных CHAR, что означает, что да, это СИМВОЛ, но это один или несколько символов. И вы должны указать сколько символы вы хотите. Итак, что типичный Длина имени пользователя? Есть ли ограничения, как правило,? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: 16, может быть? Что-то вроде того. Вы знаете, еще в день, это было восемь. Иногда это 16, иногда это даже больше, чем это. И так, это не значит дать мне один символ. Это означает, что я должен указать длина области, и теперь я могу сказать что-то вроде 16. И есть компромисс здесь. Таким образом, мы увидим в момент это означает, что одно, каждый имя пользователя должно быть 16 символов. Но подождите минуту, M-A-L-A-N. Если это мое имя пользователя и я только с помощью пяти, то, что вы могли бы предложить, что база данных чтобы сделать для остальных 11 персонажей, которые Я защищены пространства для? Что бы вы сделали? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Да, только сделать их всех нуль. Сделайте им пространства. Но, наверное, нулевая, так что много обратной косой нулей. Так, с одной стороны, мы в Теперь убедился, что мое имя пользователя не может быть более 16 символов. И оборотная сторона, которая что если я действительно длинное имя или хотели действительно долго имя пользователя, как некоторые из вас ребята, может иметь в этом колледже или в Yale.edu, вы не можете иметь один. И так на самом деле, если у Вас есть либо зарегистрированных на сайте и вы получите кричал на говоря пароль слишком долго или имя пользователя слишком долго, это просто потому, что программист, когда настройке свою базу данных, решил, что это поле не быть длиннее этой длины. Ладно, так что, если мы исходим назвать? Как долго должен ли Имя типичная человеческая будем? Как много символов, 16? Я предполагаю, что мы могли бы найти кого-то в этой комнате где его или ее первого плюс последний Имя длиннее, чем 16 символов. Так, что лучше, чем 17? 18? 25? Больше? 30? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: 5000, боже мой. Так, что, вероятно, приличный Верхняя граница, скажем. И вот мы вроде есть чтобы сделать звонок суждения. Мол, нет правильного ответа здесь. Бесконечное не вполне возможно, потому что мы в конечном итоге собирается have-- мы собирается бежать из памяти. Таким образом, мы должны сделать решение вызова в некоторой точке. Очень часто будет, например, чтобы use-- и позвольте мне задать CHAR здесь а before-- 255 был буквально Верхний предел этого программного обеспечения баз данных много лет назад. И так, много людей просто сказать, хорошо. 255 это предел. Давайте просто использовать максимум. И это довольно смешно. Мол, если вы печатаете кто-то назвать на 200 плюс персонажей, что немного смешно. Но, помните, что это не ASCII- единственная система для персонажей. И так, особенно в много азиатских языков где есть символы, мы не можем выразить на клавишных, как мой США клавиатура, некоторые символы на самом деле взять 16 бит вместо восьми битов. И так, это на самом деле это не все, что неразумно что нам нужно больше пространством, если мы хотим, чтобы соответствовать крупные символов, чем в самом США ориентированных те, кого мы имели тенденцию обсуждать. Так, нам нужны верхнюю грань. Я не знаю, что лучше один, но 255, как правило, общий. 25 чувствует слабость. 16, 32 чувствую себя подавленным. Я бы ошибиться в сторону о чем-то выше. Но есть компромисс, как всегда. Что такое, пожалуй, очевидно, Компромисс резервирования 255 символов для имени каждого в моей базе данных? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Что это? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Это много памяти, верно? М-А-Л-А-Н. Я просто впустую 250 символы просто хранить свое имя в обороне, на всякий случай, кто-то в классе есть действительно длинное имя. Это кажется неправомерного компромисса. Таким образом, получается, что SQL, это язык баз данных, на самом деле что-то поддерживает называется VARCHAR или CHAR переменной. И это отчасти хорошо, что это в позволяет указать не фиксированная ширина, а, скорее, с переменной шириной. И более конкретно Максимальная ширина области. Таким образом, это означает, что имя может быть не более 250 символов, но это, безусловно, может быть меньше. И база данных будет умным. Если вы положить в М-А-Л-А-N, это только собирается использовать пять, может, шесть байт для как заднюю нулевой символ, и не тратить дополнительные 249 или 250 байт излишне. Таким образом, это кажется, что я должен начали с этой историей. Но всегда есть компромисс. Так, с одной стороны, Имя пользователя: Я указано быть закодирован на 16, и, возможно, не было право вызова, может быть, это есть, но почему бы не использовать VARCHARS за все? Она существует по причине. Почему бы не использовать VARCHARS для каждого поля длина которого вы не знаете заранее, если это, кажется, это великая вещь, не так ли? Используйте только столько места, сколько Вы должны до этого предела? АУДИТОРИЯ: Медленнее. Дэвид Малан: Спеллер? АУДИТОРИЯ: Делает это медленнее? Дэвид Малан: О, это медленнее. Хорошо, что это почти всегда ответ, честно говоря. Мол, то, что компромисс? Она либо стоит больше места или стоит больше времени. Таким образом, в этом случае, это может быть медленнее. Зачем? АУДИТОРИЯ: [неразборчиво] определения [неразборчиво]. Дэвид Малан: Хорошо. Таким образом, вы, возможно, помните из даже PSED5, играя с вашим подходом в словарь, если у вас есть, чтобы выделить память динамически или сохранить растет буфер, который может на самом деле быть медленным. Если у вас есть, чтобы позвонить таНос под капотом и, возможно, это то, что MySQL делает, так конечно, что может быть так. И если вы думаете, путь Вернуться к PSet-- или даже недели две, когда мы делали такие вещи, как бинарный поиск, или даже линейный поиск, Одна из приятных вещей о каждом слове в базе данных или каждое слово в колонке будучи точно такой же длины, даже если целая куча этих символов пустые, что вы можете использовать произвольного доступа на ваших данных, не так ли? Если вы знаете, что каждый слово 16 символов прочь, Вы можете использовать арифметические операции, так говорить, и идут к нам 16, 32, 48, 64, и вы можете просто прыгать мгновенно с помощью арифметики в любое из слов в вашей базе данных. В то время как, если это VARCHAR, что вы вместо того, чтобы делать? [Телефон звонит] Если это VARCHAR, вы не может использовать произвольный доступ. То, что вы должны искать или делать? Да? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Посмотрите через whole-- следа весь список Смотря для чего, скорее всего,? Какие особое значение? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Цель для нулевых терминаторов что демаркацию разделение слов. Итак, еще раз, это компромисс, и нет правильного ответа. Но это, где, в частности когда ваши пользователи получают быть много и ваш груз на своих серверах, то Количество людей, использующих она получает высокий, это на самом деле нетривиальных решений. Таким образом, можно оставить их как это, но давайте прокрутите вниз к правому Вот. Теперь, есть несколько столбцов где мы должны сделать звонок суждения. Имеет ли смысл, чтобы позволить пользователя имя, имя пользователя пользователя или пользователя Имя, чтобы быть пустым? То есть, просто пустым. По ощущениям немного бессмысленно, поэтому я не собираюсь проверить эти ящики. Но, оказывается, в базы данных, вы можете сказать: кто-то может необязательно иметь это значение. Эта колонка не на самом деле там. Теперь, есть в этом выпадающем меню. И заметьте, я до сих пор там в первом ряду, так что я говорю о имени пользователя в настоящее время. И получается, что в базу данных, в отличие от простого лишь таблицу, имеет мощные функции, называемые индексы. И индекс является способ сказать базы данных заранее, что I человеческого Я умнее тебя. Я знаю, что виды запросов, выберите или вставить или удалить или обновить что мой код будет в конечном до делать в этой базе данных. Я хочу, чтобы прочитать много данных. Я хочу, чтобы вставить много данных. Я хочу, чтобы постоянно удалить много данных. Если я знаю, что я собираюсь быть доступ к такой области, как Псевдоним много, Я могу рассказать превентивно базы данных, я знаю больше, чем вы, и я хочу, чтобы указа, Вы должны Индекс это поле. Где индексации поле или столбец означает, что база данных заранее должны заимствовать некоторые идеи из, как, неделю четыре и пять, и шесть из CS50 а на самом деле построить что-то вроде бинарного поиска дерево или что-то как правило, называют Б дерево что вы узнаете в классе, как CS124 в Гарварде, класс алгоритмов, или любое количество других местах. База данных и смарт- люди, которые реализовали его будет выяснить, как хранить что таблица информации в памяти, так что поиск и другие операции очень быстро. Вы не должны делать это. Вы не должны осуществлять линейный поиск или бинарный поиск или объединить то или выбор сортировать, ничего из этого. В базе данных делает это для вас, если вы говорите это превентивно, чтобы индекс в этом поле. И вы можете видеть также, есть некоторые другие характеристики мы можем сказать, база данных для выполнения. Что это может означать, если я выберу Уникальный Из этого меню, просто интуитивно? Да? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Да, Имя пользователя должно быть уникальным. Является ли это хорошо или плохо для база данных, для веб-сайта с пользователями? Если имена быть уникальным? Да, наверное. Если это то, что поле мы используем, чтобы войти, Вы действительно не хотите, чтобы люди, имеющие то же самое чувство или же имя пользователя. Таким образом, мы можем иметь В базе соблюдения, что так что сейчас в моем коде PHP или любом языке, Я не должен, например, проверить обязательно делает это имя пользователя существуют, прежде чем я пусть кто-то зарегистрироваться? База данных не позволит два человека, названные Дэвид или зарегистрируйтесь Malans в этом случае. И, как в сторону, даже если это Меню только позволяет выбрать один, уникальный индекс является одним это индексируются для супер быстрого исполнения, но это также усиливает уникальность. И мы вернемся к тому, что два других имею в виду минуту. Между тем, если я иду в мой второй ряд, который это имя пользователя, я должен указать, что имя должно быть уникальным? Нет, потому что вы, безусловно, have-- нет двух Дэвид Malans в этой комнате, скорее всего. Но если мы выбираем другое имя, мы могли бы безусловно столкновений. Вспомните хеши и тому подобное. Таким образом, мы, конечно, не хочу чтобы сделать поле имя уникальным. Так, мы только собираемся, чтобы оставить что в тире, тире, тире, ничего. И я ухожу все остальное в одиночку. В самом деле, большинство из этих полей мы не должны заботиться о. И когда я готов, чтобы сохранить это, если интернет сотрудничает, Я нажмите кнопку Сохранить, и очень, очень, очень медленно вовсе база данных спастись. И теперь я снова на это интерфейс, который по общему признанию, является подавляющим на первый взгляд. Но все, что я собираюсь сделать, это нажмите на слова пользователей на верхнем левом углу. Я собираюсь пойти сюда, нажмите Люди, и по умолчанию, это выполнил некоторые SQL, но подробнее об этом в данный момент. Вот только описание того, что я и сделал. И не волнуйтесь, что вы видите говоря латыни и шведском здесь. Таковы лишь по умолчанию Настройки, потому что MySQL изначально, или PHP MyAdmin, один из двух произошло быть написаны в некоторых шведских людей. Но это не имеет значения, в нашем случае здесь. Ладно, так почему все это интересно? Оказывается, я могу вставить данные в базе данных путем написания кода. И я идти вперед и в моем файле здесь, я идти вперед и делать вид, как это подключены к этой базе данных, которая это не в данный момент, но это будет быть, когда мы доберемся до проблемы установите семь. И я собираюсь идти вперед и выполнить функцию под названием запрос, которые мы дадим вам в задаче установить семь в код распределения, что занимает по меньшей мере один аргумент, который является только строкой. Строка кода SQL. Таким образом, вы собираетесь, чтобы узнать, как написать структурированный язык запросов. Если я хочу, чтобы вставить новую строку в моей базы данных, потому что кто-то подал форма для моего кода, я бы в буквальном смысле написать INSERT INTO пользователей следующее поля: имя пользователя, запятая, имя, ценности, и теперь мне нужно вставить что-то вроде Маланом, и цитатой, конец цитаты "Дэвид Малан. И сейчас даже для тех, кто незнаком с SQL, Поэтому я использую одинарные кавычки внутри этого зеленые строки? Что может быть причиной здесь? Обратите внимание, я со-смешение двух языков. Запрос является функцией PHP, но принимает аргумент. И этот аргумент должен быть сам по себе написана на другом языке, называемом SQL, Structured Query Language. Так, все, что я только выделенный здесь это язык, называемый SQL. Итак, что же с одинарные кавычки, как быстро проверить вменяемость? Преуспевать. Они строк. Так, цитата, конец цитаты Малан и цитата, конец цитаты Дэвид Малан являются строками. И только думать интуитивно сейчас, зная, что вы знаете о С и PHP, почему я не сделать это, которое я обычно б двойные кавычки для строк? Почему я не хочу, чтобы это сделать? Да? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Точно. Потому что я уже использую двойные кавычки на пути за пределами аргумента функции PHP, Я бы просто путают переводчика. Это не будет знать, не это пойти вместе? Есть они идут вместе? Есть они идут вместе? Таким образом, я чередовать вместо этого. Или я мог бы сделать что-то вроде этого, Обратная косая черта Обратная косая черта или цитата цитаты. Честно говоря, только начинает получить очень нечитаемым, и некрасиво. Но что бы достичь такой же результат, как хорошо. Так что, если бы я был, чтобы выполнить это запрос сейчас, давайте посмотрим, что происходит. Я собираюсь идти вперед, а сейчас и не выполнять код PHP, который где вы будете играть в задаче установить семь, Я собираюсь вместо идти в PHP MyAdmin. И я собираюсь вручную чтобы перейти к вкладке SQL, и позвольте мне увеличить на интерфейсе. И я собираюсь вставить в вещь, которую я только что ввели. И цвет имеет кодирование немного изменилась в настоящее время, только потому, что форматы программ вещи немного по-другому. Но обратите внимание, что все, что я сделал это я сказал, вставьте в пользователей. Я указал, то, через запятую разделенных скобки список два Поля, которые я хочу, чтобы вставить, и Затем я сказал буквально значения последовал еще один Paren, а затем эти два значения Я хочу, чтобы плагин, и Теперь для хорошей мерой, Я положу точку с запятой в конце. Таким образом, это не С. Это не PHP. Теперь это SQL, и я вставить его в этом веб-интерфейс, что это только собирается позволить мне, как только я нажимаю Go, выполнить этот запрос в базе данных работает внутри CS50 IDE. Так что это хорошо. Обратите внимание, что сказал один ряд вставлена, пошел очень быстро, 0,0054 секунд, чтобы вставить эти данные. Так, что звучит довольно здоровым. Это переформатирован мой запрос для меня здесь, чтобы посмотреть его в то цвета кодируются версии. Но теперь, если я нажму Люди, заметить, что даже хотя есть много беспорядка на экран, мой стол теперь имеет два ряда. Итак, позвольте мне идти вперед, а делают другое. Вместо этого, позвольте мне перейдите на вкладку SQL снова. И на этот раз я буду вставлять нечто вроде Роб и его имя будет Роб Боуден. Боуден. Давайте нажмите кнопку Сохранить. Нам, скорее Go. Нажмите кнопку Обзор снова, и Теперь обратите внимание, я два ряда. Таким образом, это просто способ более сложный способ открытия таблиц Google и просто введя строку в столбце. Но то, что ключевым является то, теперь у нас есть синтаксис с которой писать код так, что В конечном счете, мы могли на самом деле сделать некоторые, и это. Напомним, что опоры PHP супер глобальные переменные. Что находится внутри доллара войдите подчеркивания GET в PHP? Мы рассмотрели в одном или два простых примера. И в PSet6, вспоминаю вас есть привет точка PHP, который использует эту переменную. То, что происходит там? Или что это? Чуть громче. АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Это снег Семя массива, который это просто причудливый способ сказать Массив, который имеет пары ключ-значение. И ключи не числовой. Они слова или строки. И конкретно, какие те пары ключ-значение? Откуда они? Сожалею? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Нет? Где те ключ Пары значений пришел? Повтори? Еще раз? Я только один слуховой то? [Смех] Это верно, да? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Да, они приходят из строки запроса. Так что, если вы в назад время когда мы играли с Google и мы пошли в Google.com слэш Поиск вопросительный знак Q равен кошек, если бы я ударил Введите и если Google были реализованы в PHP, PHP код, который написал Google будут иметь доступ к знак доллара подчеркивают GET, внутри которого является ключевым называется Q и значение называемые кошки, которые он может затем использовать используется, чтобы сделать фактический поиск с. Так, в самом деле, что я собираюсь сейчас сделать, это вернуться к моей PHP кода что вы будете снова видеть больше в PSet7. И вместо того, подключив в трудных закодированных значений, которые не показаться, очень динамичный сайт, Я собираюсь дать вам тизер то, что ваш фактический код будет делать. Вы бы поставить в два вопросительные знаки, как это. Я не знаю, что имя пользователя является. Я не знаю, что с Имя будет, но я знаю, что могу получить их динамически. Таким образом, если код мы пишем сейчас код работает на серверах Google, или, если это привет точка PHP, который поставляется с PSet6, Я собираюсь перейти в функция запроса так же, как Printf, два другие аргументы. GET, цитата, конец цитаты имя пользователя, и GET, цитата, конец цитаты имя. А теперь обратите внимание, что в Общая структура здесь. У меня слева сторона вызова, эта функция называется запрос в PHP. Я до сих пор в качестве первого Аргумент, просто строка текста. Но что строка текста написано на языке, называемом SQL. И, честно говоря, это не является большой язык. Мы только будем говорить о формально сегодня, на самом деле. И тогда в задаче установить семь, есть относительно несколько особенностей, которые мы собирается использовать. Знаки вопроса, хотя, в виду подключить значение здесь и вилка в другом значении Вот. И заметьте, я опустил, что по всему quote-- проклятый it-- вокруг цитаты отмечает на этот раз. Я опустил цитату знаки вокруг вопросительного знака, извините, на этот раз вокруг. Так, то, что приятно об этом Функция вопрос знак, который PHP, как правило, поддерживают, Руби и Python и другие языки, это просто означает, что плагин в некоторых ценим здесь, и вы знаете, что? Вы выяснить, следует ли использовать одиночные или двойные кавычки. Не беспокоит меня с теми, интеллектуально неинтересные детали. Но, убедитесь, что он правильно так что мой код, в конечном счете оперативной и безопасным, что будет иметь смысл, прежде чем длинный. Теперь, сколько аргументов всего, просто ясно, является функция, принимающая запрос? Кто-нибудь хочет голосовать за более чем два? Три? Конечно, почему? Почему три? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Точно. Первая часть это строка. Вторым аргументом является знак доллара подчеркивают GET кронштейн пользователя. И третий аргумент является То же самое, но только название. Итак, другими словами, в настоящее время если бы я имел веб-форму что пришлось текстовых полей, одним имя пользователя пользователя, одним для его или ее имя, просто как вы увидите в сайт при регистрации некоторые веб-сайт, это может быть код, указанный на задней части, что на самом деле вставки в настоящее время в базу данных. Теперь, напротив, давайте быстро вперед. Предположим, что пользователь теперь войдите в систему и Вы хотите написать PHP код, который проверяет, является ли человек, который только что вошли в на самом деле пользователь, вы можете использовать довольно простой синтаксис. Вы можете сказать, SELECT, скажем звезда, звезда, где означает, что все. Я не знаю, что я хочу, так что просто дать мне все столбцы из таблицы называется пользователей, где, и это приятно. Выберите то, что поддерживает называется предикат, который является как способ отборочного что вы хотите. Где имя пользователя равен цитата, конец цитаты Малан. Так и здесь, я встроенные внутри аргумента в функции PHP, строки кода SQL. И, что код SQL это Время буквально собирается искать цитаты, конец цитаты Малан. Теперь это не все, что полезно, так что я собираюсь, чтобы пропустить и я собираюсь убрать этот совет от Brady, и идти и плагин вместо знак вопроса здесь. Так, только чтобы быть ясно, какие Должен ли мой второй аргумент если кто-то будет только вошли в и I хотите проверить, если он или она на самом деле пользователь? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Да. Я слышу знак подчеркивания доллар Получить специальное предложение, конец цитаты пользователя. И что должен вернуться ко мне любой из строк в моей базе данных которые имеют имя пользователя Маланом. Теперь, надеюсь, я собираюсь вернуться нулю, если Малан никогда не был здесь, или один, если у него есть. Я не должен вернуться два или три или четыре. Зачем? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Я сказал, уникальным, не так ли? Причина проста. Потому что я сказал, что это должен быть уникальным, просто логически, вы можете иметь только ноль или один Malans в данном таблицы базы данных. Теперь, как в сторону, только так вы видели это, хотя я продолжать использовать GET и хотя PSet6 только GET, можно, конечно, есть POST. И помните, что сообщение является еще одним техника для представления информации из формы, но не появляется в URL. Это немного более безопасным, конечно, для такие вещи, как имена пользователей и пароли, которые PSet7 будет, на самом деле, связаны. Итак, давайте делать это в PHP MyAdmin и посмотреть, что происходит. Я собираюсь пойти на вкладку MySQL. И заметьте, что значение по умолчанию для PHP MyAdmin, просто чтобы попробовать, чтобы быть полезным, это выбрать звезду из пользователей, где один. Ну, один всегда верно, так это имеет глупо эффективным просто выберите все. Но я собираюсь быть немного более педантичным и вручную типа из SELECT, звезда из пользователей. Теперь технически, вы можете экранирует имя таблиц. Это редкое, что у вас есть, но обратите внимание, это не Ваши нормальные котировки на клавиатуре США. Это так называемый Обратный апостроф, который как правило, на верхней левой руке углу клавиатуры. Но это редко, что вы будете на самом деле нужно, чтобы возиться с, что, так что я просто опустить их в любом случае. Так что теперь, позвольте мне идти вперед и ударил идти. И сколько строк я должен получить назад, когда я выбрать звезду из пользователей? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Количество строк, конечно. Но сколько в этом бетон история прямо сейчас? Во-вторых, потому что там было мне и было Роб. Так что, если я нажмите кнопку Перейти, я вижу, что визуально Я получил обратно, на самом деле, два ряда. Там очень много беспорядка на экраном, но я вижу только две строки. Напротив, если я сделаю это снова и сделать ВЫБОР звезда из пользователей, где имя пользователя равна цитата, конец цитаты Малан, теперь, если я нажмите кнопку Перейти, Я только собираюсь вернуться на одну строку. И, наконец, если я что-то вроде этого, предположим, что я не забочусь о получать все, которая является своеобразной бессмысленно сейчас, потому что есть только две колонки. Это не то, что я выборе огромное количество данных. Предположим, я иду вперед и Действия Выбор имени ОТ пользователи, где имя пользователя равняется Малан, то, что приятно об SQL, честно говоря, является то, что это действительно просто делает то, что вы скажете ей сделать. Это довольно лаконичным, но вы буквально просто скажите ему, что вы хотите сделать. Выберите имя из пользователей, где имя пользователя, равно Малан. И это действительно так явно. Так, в настоящее время, если я ударил пойди, сколько Строки я собираюсь вернуться? Один из них, потому что это просто Малан, надеюсь. Или ноль, если он не есть, но максимально. И сколько колонок я вернусь? Сколько столбцов? На этот раз, я только собираюсь чтобы получить один, потому что я не сделал выберите звезду, которая все. Теперь я просто выбрав имя, поэтому я просто вернуться на один столбец и одну строку. И, похоже, своего рода надлежащим образом смешно, просто глядя супер маленьким, как этот. Итак, что же происходит на самом деле? При выполнении SQL запрос с использованием выберите, то, что вы получаете назад из базы данных это как временную таблицу со строками и столбцами, возможно, но опустить ничего фактически не выбран вами. Таким образом, как если кто-то был большой таблица всех студентов зарегистрировано некоторые студент группы, а вы говорите, дать мне все, кто уже на первом курсе зарегистрировано нашей студенческой группы, то, что Ваш коллега в студент группы могли бы сделать является они могли бы просто передать Вы все таблицы. Это, как говорят звезды выберите. И это немного раздражает, если Вы только хотели новичка. И так, если вы вместо сказал, выберите звезда из таблицы базы данных где год равен цитата, конец цитаты первокурсник, Это как если бы ваш друг в студенческой группе буквально выделены и скопированные только новичка ряды, вставить их в новый Google Таблица или файл Excel, и передал вам обратно в результате только файл. Это все, что происходит на концептуально здесь. Таким образом, в конце концов, мы можем сделать некоторые довольно причудливые вещи при хранении вещи, как имена пользователей и пароли и тому подобное. Но, оказывается, мы должны сделать немного по-другому, чем это. Это не то, что умны, чтобы только хранить имя пользователя и пароль. Кто-то раньше, я думаю, сюда, предложил ID. Теперь идентификатор может быть как Гарвардский ID или Йельского Net ID, но это может быть еще проще в нашем случае базы данных. И в самом деле, общий случай это еще один столбец. И я собираюсь пойти вперед и редактировать таблицы. И если вы поиграть с это интерфейс для PSet7, Вы увидите, что вы можете проверить эта кнопка здесь и добавить поле в начале таблицы. И теперь, если я нажмите кнопку Перейти, это будет чтобы дать мне один из тех форм от ранее. Я собираюсь добавить поле с именем ID. И я собираюсь сделать это числовой тип. У меня есть целый букет значений для числовых значений. Я просто хочу, чтобы выбрать INT и Не беспокойтесь о разрозненных размеров. Я не нужно указывать длина или значение, потому что это будет 32 бита независимо от того, что. Атрибуты, мы не видели прежде. Любой интерес в любой из них Опции меню на сей раз? Для INT? Что вы предлагаете? Нет? У любого из них смысл? Да. Да, без знака, верно? Вообще, если мы собираемся дать все это уникальный номер, который где эта история происходит, я действительно хочу только человек, чтобы иметь номер, как нуля и один и два, и три, и четыре. Мне не нужно, чтобы дело с отрицательными числами. Это только кажется, что неоправданной сложности. Я хочу четыре миллиарда возможных значений, не четыре миллиарда возможных значений, так что я просто удвоили мощность моего INT. Как в стороне, если вы хотите, чтобы связать это что-то вроде Facebook, назад в то день, когда мой Facebook впервые вышел, Я считаю, что они были используют в своей базе данных MySQL Чтобы сохранить пользователя Идентификатор, был просто INT. Но, конечно, есть много реальных людей в мире. Там очень много поддельных Facebook счета в мире. И так в конце концов, Facebook захлестнула размер в INT, А четыре миллиарда стоимость. Именно поэтому, если вы посмотрите вокруг и есть сайты что могу сказать вам, что Ваш уникальный идентификатор. И если вы никогда не выбрали имя пользователя в Facebook, вы увидите свой уникальный ID. Я думаю, что это точка PHP профиль знак вопроса ID равен то. То есть сейчас что-то вроде большой INT или долго долго, если вы будете, который является 64-битное значение или что-то сопоставимы. Таким образом, даже в реальном мире делать это вопросы, в конечном счете, иногда имеет значения. И получается, здесь, если я давая все из моих пользователей уникальный идентификатор, Я хочу быть супер явное и минимально сделать это поле уникальным. Но, оказывается, есть один кусок номенклатуры сегодня слишком что это первичный ключ. Если вы разрабатываете базы данных стол и вы заранее знаете, что один из столбцов этой таблицы должны и будут однозначно идентифицировать строки в таблице, вы хотите, чтобы указать его и сказать базы данных, это мой первичный ключ. Там может быть дубликаты в других областях, но я говорю базы данных, что это это моя основная, мой самый важный поле, что гарантированно будет уникальным. Теперь, это кажется излишним. Я в настоящее время предлагает, что мы добавить, нажав Сохранить здесь, поле called--, и я собираюсь идти вперед и нажмите AI, мы вернемся к что в настоящее время, за исключением. Я предлагаю сейчас, мой стол выглядит так. У меня есть поле под названием INT ID, поле CHAR называется Имя пользователя, поле VARCHAR называется имя, но ID, если это основной и, следовательно, уникальный, почему я просто тратить Время введения что эффективно это Вторая уникальная поле называется ID, что еще более INT? Имя пользователя, напомним, был уже уникален, мы сказали. Так что логично, что вам не нужно любой опыт базы данных причине через это, поэтому я мог бы ввели целочисленное в качестве моего уникального идентификатора, а? Что this-- раз сказать? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Случайные доступ легче, то почему? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Да, это просто доступе номера. Так что, если вы думаете, этого поистине представляет собой таблицу, как массив, Теперь у меня есть уникальные идентификаторы что я могу прыгать. И лучше, чем до сих пор, что как большой приведен INT будет снова? 32 бит или байт. Четыре Насколько велика мое имя пользователя будет? Максимально? 16 байт. Так что, если вы действительно заботиться о производительность вашего кода, вспомните PSet5, вы бы предпочли искать по стоимости четырех байтов или 16 Значение байта, верно? Это действительно так просто, как, что. Вы должны сделать в четыре раза больше работы искать имена пользователей, потому что те 16 байт. Таким образом, вы должны буквально сравнить все 16 байт, чтобы быть уверен, что да, это имя пользователя я хочу. В то время как для INT, вы можете сделать это только с четырьмя байтами. И, как в сторону для тех, заинтересованы в компьютерной техники, Оказывается можно разместить что-то вроде целочисленное или 32-битное значение в чем-то называется регистром в компьютере Процессора, что означает, что супер, супер быстрый, даже при самых низких Уровень аппаратной части компьютера. Так, там просто все вокруг преимущества. Итак, что же это значит? В самом деле, когда вы разрабатываете Таблица базы данных, почти все время вы будете иметь не только данные, которые вы заботитесь о, но также что-то вроде уникальный идентификатор потому что это будет давайте делать другие вещи. И давайте споткнуться одной проблемы здесь. Предположим, что пользователи не только имена и названия, но они также имеют такие вещи, как городов и государства и почтовые индексы, по крайней мере, здесь, в США. Итак, я собираюсь идти вперед и просто быстро сказать, дать мне больше трех столбцов В конце таблицы. И это будет город, это будет государство, и это будет Zip. Теперь виды города, то, что данные это должно быть, может быть? VARCHAR? Я не знаю, что с длинная название города. Где-то в Америке, есть вероятно, некоторые смехотворно длинное слово, так что давайте просто пойти с 255, несколько исторически или произвольным образом. Район, то, что вы хотите сделать? Суд вызов, не так ли? Что может быть наиболее эффективным? Сколько символов? Может быть, только два, если мы можем уйти с делать просто, как М. А. на Массачусетс и так далее. Итак, я собираюсь пойти значение CHAR два. Индекс это интересным. Мы здесь, в 02138, так что предлагает, мы должны использовать то, что? Это INT, верно? INT, INT, короткие? Краткое будет работать. Нет? СИМВОЛ или пять, но я хочу в INT. Почему отодвинуть на INT? Убедите меня от этого. Что глупо об INT, мою идею? Да. АУДИТОРИЯ: Возьмите больше памяти. Дэвид Малан: Возьмите больше памяти. Четыре байта, но вы предложив почтовый индекс как пять байтов или кто-то был в CHAR, который чувствует себя подобно да, это на самом деле не случай. Ну, веселая история. Много лет назад, когда я использовал, чтобы использовать Microsoft Outlook для моей электронной почте, В конце концов я хотел, чтобы перейти к Gmail. И так, я экспортировал все мои контакты из Outlook, как файл CSV. Разделенных запятыми значений, который только означает, что я были все мои друзья имена и последний имена и телефонные номера и почтовые индексы и все, что. И тогда я сделал ошибка открытия его в Excel, который является таблицы программа, понимает CSV файлов, как мы уже видели. Но тогда, я должен попали, как, Команда или управления S в одной точке. И, видимо, Excel в то время была особенность: при любом времени увидел номер, он пытался быть полезным. И если это число с начала нули, он просто будет избавиться от них. Почему вы должны ведущий нули на целых? Они бессмысленны, математически. Они не бессмысленны в США почтовой системы. Таким образом, я имел в течение многих лет, по сей день, я все еще есть друзья, которые, когда редкий случай, что мне нужно кто-то обратиться в эти дни, Я до сих пор вижу, что я есть друг в Кембридже, Массачусетс, 2 138. И это раздражает, если вы пытаясь разобраться в программно генерировать конверты или просто записать его. И это потому, что по этой причине, Я выбрал неправильный тип данных. Так, я люблю свою идею. Давайте использовать поле CHAR. Пять символов, за исключением есть уголок случай. Если вы все еще послать почту, иногда почтовых индексов в эти дни, они, как и, плюс четыре. Таким образом, мы должны дефис, а затем мы должны еще четыре цифры. Таким образом, чтобы быть честным, это может перейти много различных способов. В настоящее время, я иду, чтобы сохранить это просто, и я просто хочу сказать, что это пять значение CHAR и мы собираюсь пропустить весь тире плюс четыре. Но эти виды компромиссов. И вы можете думать о же проблемы, возникающие с номерами телефонов или других областях. И теперь, это на самом деле глупый дороге идти вниз. Предположим, как Роб и я, и Ханна и Мария, и [? Davon?] И Энди и другие на сотрудников все живем в Кембридже, штат Массачусетс, 02138. Это на самом деле чувствую себя глупо, что я добавляя к моей таблице пользователей, город, государство, и ZIP. Зачем? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: раз сказать? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Они всегда собираюсь идти вместе, не так ли? Когда выясняется, мы привыкли думать, это не было так, пока мы исчерпывающе обыскал весь США, и оказывается, что некоторые несоответствия где несколько городов есть то же самое на молнии, который является фантастическим. Но, если мы предусматривают, что в настоящее время 02138 Всегда Кембридж, штат Массачусетс, почему в мире вы храните в база данных Кембридж, М. А. и 02138 для меня и для Ханны и для Роба и для [? Davon?], А для других, которые живут здесь, в Кембридже, это совершенно излишним. Мы должны уйти только с хранения, что? Просто почтовый индекс. Но тогда, если мы храним только почтовый индекс, я хочу, наверное, для моего сайта, чтобы узнать, где находится 02138. Так, мне нужно еще одну таблицу. И это нормально. И в самом деле, это один из проектирование процессов проектирования таблиц что вы будете делать в PSet7 а также посредством Вы хотите, чтобы вынести общие данные. Так же, как мы были факторизации общий код и факторинг из общего стили CSS из здесь тоже в базе данных, если мне нужно только, чтобы однозначно 02138 определить чью-то родной город, не хранить Кембридж, Массачусетс для каждый штопать пользователь в таблице. Вместо этого, есть отдельная таблица с именем Молнии, которые должны иметь то, что столбцы? Возможно идентификатор поля, просто потому, что для принципы, которые мы говорим о теперь. Возможно поле молнии для 02138. И тогда, возможно, что другие колонки? Город и государство, но только один строка для 02138, по одной строке для 02139, одна строка для 90210. И это буквально все почтовые индексы, которых я знаю. Так что теперь, что вы можете сделать? Это проблематично, поскольку теперь у меня есть две таблицы. Итак, мои пользователи в основном здесь, но их информация город-государство это здесь. Таким образом, получается с SQL, есть на самом деле путь, чтобы присоединиться информации, и вы увидите это в Pset. Но, оказывается, можно сделать что-то вроде этого. ВЫБОР звезда из пользователей, JOIN молнии ПО пользователи точка почтовый равна молнии точка молнию. Что немного многословны, по общему признанию, но это только означает выберите все от процесс принятия мой стол пользователи и мой молнии таблице. Присоединяйтесь к ним на одной поле они имеют в колонке. Так, буквально что-то делать как это, и отдай мне новая временная таблица это шире, это больше, что имеет все колонны из обоих. И, что, попросту говоря, будет Синтаксис для этого что-то вроде этого. Так, есть это вперед, но происходит чтобы быть и другие дизайнерские решения вы будете должны сделать не только с индексами но также работает в задач. В самом деле, есть задача в любом проектирования баз данных в результате чего иногда два человека, возможно, захотите доступ к тем же строки базы данных Таблица. Таким образом, это то, что мы будем столкнуться в PSet7 также. Но я думал, что я смотрю на одного атака, что это возможно в SQL. Каковы некоторые из Проблемы, которые могут возникнуть? Таким образом, вы будете сталкиваться в этом PSet7. И мы говорим вам прямо, что кодирования решение для этой проблемы есть. Но если вы берете более высокий класс уровне, особенно в операционных системах, Вы будете сталкиваться с вопрос атомарность, проблема пытается сделать несколько вещей сразу без перерыва. И я думал, что я представить это Идея PSet7 с метафорой что я узнал себя в Марго CS164 операционные системы Зельцер в класса лет назад. Предположим, что у вас есть один из этих общежитии холодильники в вашем номере или в общежитии дома, и у вас есть реальный склонность к молока. И так, вы приходите домой с занятий в один прекрасный день, вы открываете холодильник. О, черт возьми. Там нет молока в холодильнике. Таким образом, вы закрыть холодильник, запереть дверь, заблокировать общежитие, ходить по углу в CVS, попасть в линии, и начать проверять за молоком. И это займет время, потому что эти проклятые самоуправления кассе счетчики длиться вечно, чтобы использовать в любом случае. Так в то время, ваш сосед по комнате приходит домой. Он или она действительно любит молоко, а также. Они приходят в комнате общежития, открыть холодильник, ох, палки. Там нет больше молока. Таким образом, он или она также идет не за горами. Но теперь, поскольку есть как два или три или четыре CVSes рядом, они происходят, чтобы перейти к одной из различные те на площади. И вот теперь, через несколько минут Через вас обоих пришел домой и тьфу, самая большая проблема когда-либо. Теперь у вас есть слишком много молока потому что это будет идти кислый. И вы любите молоко, но вы не люблю молоко. Так что теперь, это было дорого ошибка, потому что вы оба было принято решение, основываясь на состояние какой-то переменной, был в процессе изменяется от вас, Инициатором собирается получить молоко. Итак, что такое возможно, человек Решение этой проблемы? АУДИТОРИЯ: [неразборчиво] Дэвид Малан: Оставьте записку, верно? Всегда оставить записку, если вы знакомы с этого шоу. Да, есть два из нас. Таким образом, всегда оставить записку или буквально заблокировать холодильник с какой-то замка или то поверх, как, что. Но что на самом деле происходит, чтобы быть Ключевая проблема проектирования баз данных, особенно, когда вы, возможно, придется несколько браузеров, несколько ноутбуков, несколько пользователей все пытаются обновить информацию сразу. Особенно важная информация как финансовой информации, в результате чего с биржевой торговли Сайт, как вы будете строить, что, если вы хотите, чтобы проверить, сколько денег у вас есть и то, если у вас есть достаточно, купить акции? Но что, если кто-то еще, кто имеет совместный счет с вами одновременно пытаясь это чтобы купить акции? Таким образом, он или она проверяет баланс счета, вы оба вернуться то же самое Ответ, нет молока. Или вы оба получите обратно ответ, у вас есть $ 100 на счету. Оба вы пытаетесь сделать решение купить одну акцию какой-то акции компании. А теперь, что происходит? У вас есть два акции? У вас нет акций? Такие проблемы, как, что могут возникнуть. Таким образом, мы будем сталкиваться с этим. Атаки инъекции SQL, к счастью, что-то мы поможем вам с, но это ужасно часто в эти дни по-прежнему. Таким образом, это всего лишь пример. Я не делаю никаких претензий, что Система Гарвардского ПИН уязвимы к данной атаке. Мы старались. Но, вы знаете, что мы есть поле, как это. И Йельского Net ID имеет аналогичный смотря экран в эти дни. И оказывается, что, возможно, Система ПИН осуществляется в PHP. И если это were-- это не-- они может есть код, который выглядит следующим образом. Они имеют две переменные. Дайте мне имя пользователя и пароль от должности супер глобальной переменной что мы говорили ранее. Может быть, Гарварде запрос как SELECT, звезды от пользователей где имя пользователя равна, что и пароль равна, что. И заметьте, что я просто подключив его при помощи фигурная скобка обозначения от друга день, что означает просто подключите значение Вот. Я не с помощью Вопрос техника знак. Я не в любую секунду или третий аргументы. Я просто буквально построения строку сам. Проблема, однако, в том, что если кто-то нравится scroob, который является ссылкой на пленке, входит в что-то вроде этого, и я удалил точки что, как правило, прикрыть пароли, что, если он особенно вредоносный и его пароль может быть 12345, за фильм под названием "Космические яйца", но он критически печатает апостроф после пяти лет, Затем буквально слово или в пространстве, а затем цитата, конец цитаты один равняется один цитата, Но обратите внимание, он опущен, что? Он опустил цитату на право и он опущен цитату слева. Потому что, если это злоумышленник презумпция scroob в является то, что люди, которые писали это PHP код не так ярко, может быть, они просто есть некоторые одного кавычки интерполяции переменной в фигурные скобки? И так может быть, он мог рода полного свою мысль для них, но таким образом, что происходит чтобы позволить ему взломал систему PIN-кода. Другими словами, предположим, что это код и теперь мы подключить, что scroob набрали. И это красный, потому что это плохо. И основной текст это то, что он набрал в, scroob может обмануть сервер Гарвардского университета в построении SQL запроса строка, которая выглядит как это. Пароль равен 12345 или один равняется один. Результат, который, по логике, является то, что это будет войти scroob , если его пароль 12345 или если один равно Один из них, который, конечно, всегда верно, что означает scroob всегда попадает в. И так, как исправить это, как и в большинстве случаев, было бы написать на обороне. Чтобы использовать что-то вроде нашего Реальная функция запроса, который вы увидите в PSet7, где мы подключить в что-то вроде вопроса знаменует здесь. И красота Функция запроса, что мы дать вам это защищает от них так называемые атаки инъекции SQL, где кто обманывает свой код в инъекционных свой собственный код SQL. Потому что то, что функции запроса мы даем вам будет на самом деле, если вы используете синтаксис знак вопроса и второй и третий аргумент здесь, это то, что сделал это добавить к вход, который пользователь условии? Те, обратный слеш цитирует. Так, оно ускользает любой потенциально опасные персонажи. Это выглядит странно, но это не уязвимы потому что это не изменить логику больше потому что вся пароль Теперь один цитата, это не так, на самом деле, пароль scroob в. Так, там были некоторые шутки об этом на протяжении многих лет. Так, это было сфотографироваться какой выродка на стоянке в котором вы, возможно, знаете, что некоторые города и государства пытаются сканировать ваш лицензию пластина счета Вам или билет вы если вы идете через без, как, вещь Е-Z Пасс. Таким образом, это лицо, которое предположительно может быть, что люди, пишущие системы E-Pass Z не так ярко, и, возможно, они просто объединяются вместе строку, так что он или она не может злонамеренно не только завершить свою мысль, но на самом деле выполнить команду плохое, которые мы еще не упоминали, но вы, наверное, догадались. Это в дополнение к удалять и Вставка и обновление и выберите, есть также ключевое слово называется падение, который буквально удаляет все в базе данных, которая Особенно плохо. Мы можем увеличить на это, если это немного трудно увидеть. Это, в настоящее время, является известным мультфильм это удивительно умный в настоящее время и понятно. [Смех] Да, круто. Вид из geeking. Таким образом, эти, тогда, Атаки инъекции SQL. И они так легко избежать с помощью право код или правый библиотеки. И вы увидите в PSet7, что это Поэтому мы даем вам функцию запроса. Так, пару тизеров что мы думали, что мы дать вам здесь, в нашем оставшиеся минуты вместе. Так что, как вы помните из нулевой неделе, мы введены эти две лампочки, которые приятно, не только потому, они довольно и красочные, а потому, что они поддерживают то называется API, приложение Интерфейс программирования и в CS50 сих пор, мы в основном сосредоточены на GET и POST, но, оказывается, есть другие HTTP глаголы PUT. И в самом деле, это было слайд от нуля недели в результате чего, если вы пишете код, который посылает а-ля PSet6-запрос HTTP, что Похоже, это с этим куском текста в нижней, которая называется JSON, или JavaScript Object Notation что мы будем говорить о следующей неделе, Вы можете включить или выключить или изменить цвет огней, как таковых. Таким образом, если CS50 также имеет в дополнение к некоторым из тех лампочек здесь в Нью-Хейвене если вы хотите занять им для окончательных проектов, Также некоторые Microsoft Полосы, которые, как следит за тем, вы носите на запястье что аналогично есть API, так что вы можете написать собственное программное обеспечение для них. У нас есть запись с Код IOS от Apple, так что если у вас есть Apple Наблюдать или iPhone или IPad или IPod, Вы можете написать код, который на самом деле работает на них. У нас есть целый букет из Arduinos, которые крошечные компьютеры без случаев, по сути, что вы можете подключить через USB, как правило, на свой собственный Mac или PC, код, который выполняется на эти физические написать Устройства, которые часто имеют датчики на них так что вы можете взаимодействовать с реальным миром. У нас есть целый букет устройств Leap Motion, которые являются USB устройства для компьютеров Mac и ПК, здесь и снова, в Нью-Хейвене. И если вы подключите его к Mac, Вы можете фактически управлять компьютером в письменной форме программное обеспечение что с помощью инфракрасных лучей, выясняет, где ваши человеческие руки, даже не касаясь клавиатуры. Мы думали, что мы разделяем быстро заглянуть в это, например. [Играет музыка] Так, у нас есть целый куча из этих вещей, тоже называется мио повязки которые вы положили над предплечья а затем вы можете контролировать реальный мир или виртуальный мир, как это. [Играет музыка] Или, мы также есть Google Картон, который в буквальном смысле, как, картонная коробка можно положить на вашем лицо, но слайд в вашем телефоне в него так что вы поставить стакан вашего телефон действительно близко к глазам. И Google Картон очень дешево в $ 10 или $ 20. И это имеет мало линзы что немного не сдвига изображение на экране для вашего человека глаза, чтобы дать вам ощущение глубины так что вы на самом деле есть 3D среда перед вами. У нас также есть некоторые Samsung Gear, которая это более дорогой версии этого, но это может так же скольжения в Android-телефон и дать вам иллюзию of-- или дать опыт виртуальной реальности. И в наших последних двух минут, мы думали, что мы стараемся сделать это. Если я могу выступать, что Колтон имеет здесь просто чтобы подогреть аппетит, позвольте мне идти вперед и бросить на большом экране здесь. Позвольте мне убить огни. Колтон, вы хотите, чтобы идти вперед и поставить на свой мобильный на мгновение и приходи к Середина этапе? И вы хотите, чтобы project-- это то, что видит Колтон. Теперь, Wi-Fi в здесь не так сильна для этого устройства что это супер убедительными, но Колтон буквально в этом волшебном месте футуристический. Он видит только одно изображение. Вы видите его левого и правого глаза что его мозг будут сшивая в трехмерном среды на его лице. Он просто выбрал опцию меню здесь. И так снова, он носит эту гарнитуру с Samsung телефон на нем, что это беспроводное проецирование к нашей головой. Теперь вы на Марсе, я думаю? Колтон: Я так думаю. Я не уверен, что [неразборчиво]. [Смех] Дэвид Малан: Оказывается Марс имеет эти меню. Колтон: [неразборчиво] какой-нибудь классный места, если мы хотим идти, целью которых Дэвид Малан: Где мы хотим идти? Колтон: [неразборчиво] Дэвид Малан: И давайте посмотрим где Колтон берет с нами сейчас. Колтон: [неразборчиво] Дэвид Малан: Итак, есть так много различные места, которые вы можете взять себе. Там это FAPIs, через который вы можете писать игры или взаимодействий, которые бежать, в конечном счете по телефону. Таким образом, вы на самом деле просто писать мобильного телефона приложение. Но благодаря программного обеспечения и графические возможности, Теперь Колтон в этот крошечный домик. И на риск подавляющее себя, Колтон, и я буду придерживаться вокруг в то время как в конце класса здесь сегодня если вы хотите, чтобы подойти и играть. И мы будем вернуть их на следующей неделе, а также. Без дальнейших церемоний это на сегодня. Мы будем видеть Вас на следующей неделе. [МУЗЫКА - Ragga Twins, "плохой человек"]