>> [За възпроизвеждане на музика]
DAVID Malan: Добре, това е CS50.
Това е краят на седмицата осем.
И днес, ние започваме за попълване на някои части
когато става дума за сграда неща в интернет.
Така че, припомни, че в понеделник прекарваме много повече време
на PHP, което е този динамичен език за програмиране, който
ни позволява изход, наред с други неща, HTML и други подобно съдържание
че ние ще искаме да видим.
Но ние не сме наистина погледна как отиваме да съхранявате всякаква информация.
Всъщност, почти всеки от които супер интересни сайтове, които посещавате днес
имат някаква база данни на задния край, нали?
Facebook със сигурност съхранява много данни за всички нас и магазини Gmail всички
на вашите имейли.
>> И така, много други сайтове, които не са само статично съдържание, което е информационен.
Това всъщност е динамична по някакъв начин.
Можете даде своя принос, да го актуализира страниците за други хора.
Можете да получите съобщения, ви изпратим съобщения, и така нататък.
Така че днес, се вгледаме на основи на проект
че вие ​​ще се потопите в следващия седмица, CS50 финансите, което
всъщност ще трябва да изградите нещо не в C, но в PHP.
А сайт, който изглежда по- малко нещо като това
която позволява да се купуват и продават запаси, които са всъщност
ще разчита и в реално време борсови данни от Yahoo Finance.
И така, в крайна сметка, ще имате илюзия за себе си и за потребителите
че вие ​​всъщност купуват и продават запаси и получаване на почти реално време
актуализации, управление на портфолио, всички от които
ще изисква като, в крайна сметка, база данни на потребителите.
>> Така че, в собствените си думи, особено ако не сте
супер запознат с компютър науката или бази данни, това, което
знаеш ли база данни, за да бъде точно сега, в нетехнически условия?
Какво е?
Как бихте го опиша да съквартирант или приятел?
>> АУДИТОРИЯ: [недоловим] информация [недоловим]
>> DAVID Malan: Значи, списък с информация, или store-- списък с информация
че може да искате да съхранявате за нещо, като потребител.
И това, което потребителите имат направя свързани с тях?
Ако сте потребител на Facebook или Gmail, какви са характеристиките
че всички ние, потребителите имат?
Подобно на това, което може да са някои от колони в електронната таблица, към които ние
намекна за последен път?
Защото отново, можете да мисля, че на база данни
наистина като фантазия Excel файл или Google Spreadsheet или Apple Numbers файл.
>> И така, какво мислиш за когато мислите за даден потребител?
Какво общо имат те?
Какво е това?
>> АУДИТОРИЯ: A име.
>> DAVID Malan: A име.
Така че, ако името, като, David Malan ще бъде името на някой друг потребител.
Какво друго потребител има?
>> АУДИТОРИЯ: An ID.
>> DAVID Malan: An ID.
Така че, като идентификационен номер, като си Harvard ID или вашия Yale Net ID или други подобни.
Какво друго може един потребител да има?
>> АУДИТОРИЯ: Password.
>> DAVID Malan: Паролата, може би един адрес, може би един телефонен номер, може би
имейл адрес.
Така че, има букети от полета и това можеше някак излезе извън контрол
бързо, веднага след като започнете осъзнавайки, о, нека да съхранявате това
и нека да съхранявате това и онова.
>> Но как ние всъщност прави това?
Така че отново, умственото модел да има за днес, тъй като ние
потопите в действителната SQL, Език за структурирани заявки,
е база данни, която изглежда така.
Това е само на редове и колони.
И можете да си представите Google Spreadsheets или произволен брой други програми.
Но това, което е ключово за MySQL, което е най- софтуер за бази данни, ние ще използваме,
на свободно открито available-- Facebook приложения
то и всякакъв брой други websites-- база данни съхранява неща в човешките отношения.
И една релационна база данни Просто означава, че една буквално
съхранява своите данни в редове и колони.
Това е толкова просто като това.
>> Така че, дори и нещо като Oracle, че може би сте чували за цяло
е релационна база данни.
И под предния капак го, съхранява данни в редове и колони.
И Oracle ви таксува много пари, за да направи това,
като има предвид, MySQL такси вие нищо за същото.
Така че, SQL ще ни даде най-малко четири операции.
Възможността за избор на данни, като прочетено данни, вмъкване, изтриване и актуализиране на данни.
С други думи, това са наистина четирите основни операции
че ще ни позволи да се промени неща в тези редове и колони.
>> Инструментът, който ще използваме днес особено да се научат SQL и да играе с него
отново се нарича PHP MyAdmin.
Това е уеб базиран инструмент.
Общо случайно, че това е написано в PHP.
Но това ще ни даде графично потребителски интерфейс, така че ние можем действително
създаване на тези редове и колони и след това говорете с тях чрез код.
Така че, нека сега да започне да се това, което мисля, че е честно
вид на процеса на забавление на изграждане на задния край на уебсайтове,
частите, които потребителите не виж, но сигурно се грижи за,
защото това е по-скоро на данни ще.
Така че, подобно на С и малко по-малко като PHP,
SQL, или база данни, която поддържа SQL, има видове поне тези данни
и букети от другите.
CHAR, VARCHAR, INT, BIGINT, DECIMAL и DATETIME.
А има и едно цяло куп други функции,
но нека да направите това, като начин на действителното например.
>> Отивам да отидат в CS50 IDE където, по-рано, аз съм регистриран в
и аз също съм посетила URL за този инструмент, наречен PHP MyAdmin.
И в определен проблем седем, ние ще кажете как точно да стигнем до този интерфейс
както добре.
На горния ляв ъгъл, забележите, тя казва, изнася лекции.
И това просто означава, че предварително, съм създал
празна база данни, наречена лекция че все още няма таблици в него все още.
Няма по редове и колони.
Тъй като първият нещо, което ще направим
се започне да се създаде таблица че това ще се съхранява на нашите потребители.
>> Така че, буквално над тук надясно, аз съм
Ще кажа на базата данни Искам таблица, озаглавена потребители.
Така че, това е като файла, който I искате да съхранявате всичките си данни инча
И колко колони?
Е, нека да го прости, за сега.
Аз просто искам да се съхранява като потребителско име и име на потребителя.
Ще започнем малък.
Така че, искам две колони общо.
И аз ще отида напред и кликнете Go.
И тогава, за тях колони, това, което аз ще
да do-- ако тази интернет cooperates-- всичко е наред,
така че ние ще се опитаме това отново.
Отивам да се създаде таблица, наречена Потребителите с две колони, щракнете Go, OK.
Сега ние имаме наистина бързо.
Благодаря ви, много добре направено.
Добре, така че това, което искаме тези колони, за да се наричат?
>> Така че, един ще бъде наречен име.
Така че, всичко, което виждам here-- и интерфейса честно казано става малко грозно в крайна сметка,
след като започнете да пишете в цялата тази информация.
Но това, което е хубаво е, че нещо парадоксално, аз съм създаване на колони,
но инструментът има безумие ги положиха в редове
така че мога да конфигурирате тези колони.
Така че, има две заготовки има по име.
И една от тези области I Искам да призова име,
и другото поле Искам да се обадя Name.
>> И сега трябва да избирам типове данни за тези неща.
Така че, докато в Excel и Google Spreadsheets,
ако искате колона, вие буквално Просто напишете име или име, удари Enter.
Може би сте го смели лицето направи само за яснота, но това е всичко.
Вие не уточняват типа на колоните.
Сега в Google Spreadsheets или Excel, можете може да определите колко е постановено на данните.
Можете да отидете в менюто Format, а вие да укажете да се покаже тази като знак за долар,
покажа това като стойност с плаваща запетая.
>> Така че, това е подобен по дух, за да че това, което ние сме на път да направим,
но това всъщност ще принудят данните да бъдат определен тип.
Сега, въпреки че преди малко I казва, че има само няколко типове данни,
там всъщност е куп, и те са
в различна степен на специфичност.
И като настрана, вие Дори можете да направите ефектни неща
като геометрии за съхранение вътрешността на база данни.
Можете да съхранявате неща като GPS координати
и действително се намери, математически, точки, които са в близост до други.
Но ние ще запазите този супер проста
и да стигнат до тук, всички от така наречените видове низ.
>> Така че, ето списък на цял куп възможности.
CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
И това е нещо непоносимо.
И за съжаление, малко по- парадоксално до С,
а CHAR всъщност не е CHAR.
Ако посочите в база данни че вашият тип данни е CHAR,
това означава, че отговорът е да, това е CHAR, но това е един или повече символа.
И вие трябва да посочите колко символа, който искате.
Така че, това, което е типично дължина за име?
Има ли ограничение обикновено?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: 16 може би?
Нещо такова.
Знаеш ли, обратно в ден, той да бъде използван осем.
Понякога е 16, а понякога това е дори повече от това.
И така, това не е така означава, дайте ми един CHAR.
Това означава, че трябва да зададете дължината на полето,
и сега мога да кажа нещо като 16.
И има компромис тук.
Така че, ние ще видим след малко това означава, че един,
всеки потребител трябва да е 16 символа.
Но почакайте, M-A-L-A-N. Ако това е името ми и аз съм само с помощта на пет,
какво бихте предложили, че базата данни да се направи и за останалите 11 знака, че
Аз бях запазено пространство за?
Какво би направил?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Да, просто да ги направят всички нищожна.
Накарайте ги пространства.
Но вероятно нула, така че Много от обратно наклонена черта нули.
Така че, от една страна, ние сме Сега се прави сигурни, че името ми
може да бъде не повече от 16 символа.
И обратната страна на която е че ако имах много дълго име
или искаше наистина дълго потребителско име като някои от вас
момчета може да има в този колеж или най Yale.edu, не може да има една.
И така, в действителност, ако сте някога регистриран за сайт
а ти се развика, казвайки парола е твърде дълго
или потребителско име е твърде дълго, това е просто защото един програмист, когато
конфигуриране на неговата база данни, реши, че тази област ще
е не повече от тази дължина.
>> Добре, и какво от това, ако се пристъпва към назове?
Колко дълго трябва да е Име на типична човешка бъдем?
Как много герои, 16?
Аз съм се познае можехме намери някой в ​​тази зала
когато от първия си плюс последния име е по-дълго от 16 символа.
Така че, това, което е по-добре от това, 17?
18?
25?
Bigger?
30?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: 5000, о, Боже мой.
Така че, това е може би един достоен горна граница, така да се каже.
И тук ние имаме вид да направи преценка повикване.
Подобно, няма правилен отговор тук.
Infinite не е напълно възможно, защото ние сме в крайна сметка
Ще have-- сме ще свършат на паметта.
Така че, ние трябва да се направи решение повикване в някакъв момент.
>> Много чести би било, например, да use-- и ми позволи да уточни CHAR тук
като before-- 255 беше буквално горна граница на този софтуер за бази данни
преди години.
И така, много хора Просто ще кажа, добре.
255 е граница.
Нека просто да използвате максимума.
А това е доста нелепо.
Подобно на това, ако сте да пишете някой е назове за 200 плюс герои,
че малко нелепо.
>> Но, не забравяйте, че не е ASCII единствената система за герои.
И така, особено в много азиатски езици
където има знаци, че не можем изразя по клавиатури като ми US
клавиатура, някои от героите всъщност отнеме до 16 бита, вместо на осем бита.
И така, това всъщност не е всичко, което неразумно
че имаме нужда от повече пространство, ако искаме да се поберат
по-големи герои, отколкото самото САЩ ориентирани хора, които сме склонни да обсъдят.
Така че, имаме нужда от горна граница.
Аз не знам какво е най-доброто, 255 но обикновено е една обща.
25 се чувства слаб.
16, 32 се чувстват ниско.
Бих се заблуждават от страна нещо по-висока.
Но има един компромис, както винаги.
Какъв е, може би, очевидното търговия на разстояние от 255 символа резервация
за името на всички в моята база данни?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Какво е това?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Това е много памет, нали?
М-A-L-A-N. Имам само губи 250 знаци, само за да се съхранява името ми
в защита, само в случай, някой, в класа има наистина дълго име.
Това изглежда като неправомерно компромис.
>> Така че, се оказва, че SQL, този език на базата данни,
всъщност подкрепя нещо наречено VARCHAR или Variable CHAR.
И това е нещо хубаво в това, че позволява ви да определите не фиксиран
ширина, а по-скоро с променлива ширина.
И по-специално, Максималната ширина на полето.
Така че, това означава, че едно име може е не повече от 250 символа,
но тя със сигурност може да бъде по-малко.
И на базата данни ще бъде умен.
Ако все пак се пробва M-A-L-A-N, това е само отивам да се използва пет,
може би шест байта за подобно а зад гърба нищожна характер,
и не харчат допълнително 249 или 250 байта ненужно.
>> Така че, това изглежда като че трябва Започнахме с тази история.
Но винаги има компромис.
Така че, от една страна, а аз съм потребителско име уточнено, че се твърди, кодиран на 16,
и може би това не беше дясното повикването, може би това
е, но защо не се използва VARCHARs за всичко?
>> Тя съществува поради някаква причина.
Защо не се използва VARCHARs за всяка област чиято дължина не знаете предварително
ако тя изглежда да е голямо нещо, нали?
Използвайте само толкова място, колкото имате нужда до тази граница?
>> АУДИТОРИЯ: По-бавно.
DAVID Malan: правопис?
АУДИТОРИЯ: Прави го по-бавно?
DAVID Malan: О, това е по-бавен.
Добър, това е почти винаги отговорът, честно казано.
Подобно на това, което е компромис?
То било струва повече пространство или тя струва повече време.
Така че, в този случай, може да е по-бавен.
Защо?
>> АУДИТОРИЯ: [недоловим] определяне [недоловим].
>> DAVID Malan: Добро.
Така че, можете да си спомните, дори от PSED5, играе с вашия подход
към речника, ако трябва да достатъчно памет динамично или да съхраните
отглеждане на буфер, че всъщност може да бъде бавно.
Ако трябва да се обадя изчистване под капака на двигателя и може би
това е, което прави MySQL, така че със сигурност, че може да се случи.
И ако мислите, начин обратно към PSet-- или дори
две седмици, когато сме направили неща, като двоично търсене или дори линейно търсене,
един от най-хубавите неща всяка дума в база данни или всяка дума в колона
е точно същата дължина, дори ако цял куп от тези знаци
са празни, е, че можете да използвате произволен достъп на данните си, нали?
>> Ако знаете, че всеки Думата е 16 символа далеч,
можете да използвате показалеца аритметика, така да се говори, и да преминете към нас 16, 32, 48, 64,
и може просто да скочи моментално използване на аритметиката
която и да е от думите в базата данни.
Като има предвид, ако това е VARCHAR, ти какво, вместо да трябва да направя?
>> [Звънене на телефона]
>> Ако това е VARCHAR, вие Не можете да използвате произволен достъп.
Това, което трябва да се търси или не?
Да?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Погледни през whole-- следа
през целия списък търси това, което най-вероятно?
Какъв вид на специална стойност?
АУДИТОРИЯ: [недоловим]
DAVID Malan: Търси за нулеви терминаторите
които определят границите на разделението на думи.
Така че отново, компромис, и че няма правилен отговор.
Но това е мястото, където, особено когато вашите потребители получават да е много
и си натоварване на сървърите си, на брой хора, използвайки той получава висока,
това са всъщност nontrivial решения.
Така че, ние можем да оставим тези като този, но нека да превъртите надолу към правото
тук.
Сега, има няколко колони където ние трябва да се направи преценка повикване.
Има ли смисъл да се даде възможност на потребителя име, потребителско име на потребителя или на потребителя
Име, за да бъде нула?
Това е, просто празно.
Усеща малко безсмислен, така че аз съм Няма да проверите тези кутии.
Но се оказва в база данни, може да се каже,
някой може евентуално да има тази стойност.
Тази колона не разполага действително да бъде там.
>> Сега там е това падащо меню.
И забележи аз съм все още в първия ред има,
така че аз говоря за потребителско име сега.
И се оказва, че една база данни, за разлика от една проста обикновена електронна таблица,
има мощни функции, наречени индекси.
И индекс е начин да кажете на база данни, предварително, че съм човека
съм по-умен от теб.
>> Знам какви заявки, изберете или поставяне или изтриване или обновяване,
че ми код ще свърши до това на тази база данни.
Искам да прочета много данни.
Искам да поставите много данни.
Аз искам постоянно изтриете много данни.
Ако знам, че аз отивам да бъде достъп поле като име много,
Мога да кажа на изпреварващо база данни, аз знам повече от теб,
и аз искам да заповядваме Вие трябва индекс тази област.
Къде индексиране поле или колона означава, че базата данни в предварително
трябва да заемат някои идеи от подобно, четириседмица и пет и шест от CS50
и действително изградят нещо като двоично търсене
дърво или нещо обикновено се нарича B дърво
че вие ​​ще научите по подобен CS124 клас
в Харвард, един клас алгоритми, или произволен брой други места.
>> Базата данни и умните хората, които го изпълняват
ще разбера как да се съхранява тази таблица на информация
в паметта, така че търсения и други операции са супер бързи.
Вие не трябва да го направя.
Вие не трябва да се приложат линейно търсене или двоично търсене
или сортиране чрез сливане или избор сортиране, всеки от които.
Базата данни го прави за вас, ако ви кажа, то изпреварващо да индексира тази област.
>> И можете да видите също има някои други характеристики
можем да кажем на базата данни, за да наложат.
Какво може да означава това, ако избера Unique от това меню, просто интуитивно?
Да?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Да, потребителско име трябва да бъде уникален.
Дали това е нещо добро или лошо нещо за база данни, за един сайт с потребителите?
В случай, потребителски имена са уникални?
Да, вероятно.
Ако това е, което област, които използваме, за да влезете в системата,
наистина не искам да хора, които имат същото усещане, или същото потребителско име.
Така че, ние можем да имаме база данни, така че наложат
че сега в моя PHP код или всеки език, Не е нужно да се, например, проверка
задължително прави това потребителско име съществува, преди да съм нека някой да се регистрирам?
Базата данни няма да позволи на двама души на име David или Malans се регистрират в този случай.
>> И като настрана, въпреки че това меню само ви позволява да изберете една,
уникален индекс е този, който е индексирани за супер бързо изпълнение,
но също така налага уникалност.
И ние ще се върнем към това, което Другите два означава в един момент.
В същото време, ако отида да моята втора поредна които
е името на потребителя, трябва да посоча че името трябва да бъде уникален?
Не, защото вие със сигурност може да have-- че няма две David
Malans в тази стая, най-вероятно.
Но ако изберете различно име, ние със сигурност може да има сблъсъци.
>> Помислете обратно към хеш таблици и други подобни.
Така че, ние със сигурност не искам да направи полето Име на уникален.
Така че, ние просто ще напусне че като пробив, тире, тире, нищо.
И аз отивам да напусне всичко останало сам.
Всъщност, повечето от тези области ние не ще трябва да се грижи за.
И когато аз съм готов да спаси това, ако интернет сътрудничи,
I кликнете Save, и много, много, много бавно се базата данни да се спаси.
И сега съм към тази интерфейс, който разбира се,
е поразителен на пръв поглед.
Но всичко Отивам да направите е да щракнете върху думата потребители в горния ляв.
Отивам да отидете тук, кликнете Потребители, и по подразбиране, то
е изпълнила някои SQL, но повече за това в един миг.
Ето само резюме на това, което направих.
И да не се притеснява, че сте въвели говорим на латински и шведски тук.
Това са само по подразбиране настройки, защото MySQL първоначално,
или PHP MyAdmin, едното от двете се случи да бъдат написани от някои шведски хора.
Но това е без значение в нашия случай тук.
>> Добре, така че защо да е всичко това интересно?
Оказва се, мога да вмъкнете данни в база данни, като пишете код.
И аз отида напред и в досието ми тук, аз съм
Ще вървим напред и да се преструвам, като то е вързано с тази база данни, която
тя не е в момента, но това ще стане да бъде, когато стигнем до проблем определя седем.
И аз ще отида напред и изпълнява функция, наречена заявка,
които ние ще ви дадем в проблем определя седем дистрибуторска код, който
отнема най-малко един аргумент, който е само низ.
Низ от SQL код.
Така че, вие сте на път да се научат как да напиши Structured Query Language.
>> Ако искам да добавя нов ред в моя база данни, защото някой е подал
форма, за да ми код, бих буквално напиши INSERT INTO потребители следното
полета: потребителско име, запетая, име, ценностите,
и сега трябва да поставите нещо като Malan, и цитирам,
край на цитата "David Malan." И сега дори и за тези, които не са запознати с SQL,
защо съм с помощта на единични кавички вътрешността на тази зелена низ?
Каква може да е причината тук?
>> Забележете, че съм смесването на два езика.
Query е функция PHP, но това отнема един аргумент.
И този довод трябва да бъде себе си написани на друг език, наречен
SQL, Структуриран Query Language.
Така че, всичко, което съм току-що са подчертани тук
е този език, наречена SQL.
Така че, това, което е с единични кавички, точно както бърза проверка здрав разум?
Продължавай.
Те са струни.
Така че, цитирам, край на цитата Malan и цитирам, край на цитата David Malan са струни.
И само като си помисля интуитивно сега, знаейки какво знаете за C и PHP,
защо не направите това, което аз обикновено употребявани двойни кавички за низове?
Защо не искам да правя това?
Да?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Точно така.
Защото аз вече използвам двойни кавички по пътя
извън аргумента, към функцията PHP,
Бих искал само да объркат преводача.
Той няма да знае, да те вървят ръка за ръка?
Да те вървят ръка за ръка?
Така че, аз се редуват, вместо.
>> Или мога да направя нещо подобно, наклонена черта цитат или наклонена черта цитат.
Честно казано, това просто започва да получите много нечетлив и грозен.
Но това би постигнало същия резултат, както добре.
>> Така че, ако аз трябваше да изпълни тази заявка сега, нека да видим какво ще стане.
Отивам да се продължи напред сега и скоро отколкото изпълни кода на PHP, които
е мястото, където ще играят в проблем определя седем,
Отивам да вместо да отидете на PHP MyAdmin.
И аз ще ръчно за да отидете на раздела SQL,
и ми позволи да се фокусирам върху интерфейса.
И аз отивам да поставите в на нещо, което току-що напечатани.
И цвят кодирането има променила малко сега,
само защото формати програмните нещата малко по-различно.
Но забележете, че всичко, което съм правил е, което казах, поставете в Потребители.
Аз бях определен, а след това, в запетая Разделени в скоби списък от двете
полета, които искам да вмъкнете, и тогава аз съм буквално каза стойности
последвана от друга скоба, и след това двете стойности
Искам да плъг-ин, и Сега за добра мярка,
Ще сложа точка и запетая в края.
Така, това не е С. Това не е PHP.
Това сега е SQL, и аз съм го поставите в този уеб базиран интерфейс, който е
Просто ще ме пусне, веднага след като щракнете върху Go,
изпълни тази заявка в базата данни използвате във вътрешността на CS50 IDE.
>> Така че това е добро.
Забележете, че каза един ред Добавя, отиде супер бързо,
0.0054 секунди, за да вмъкнете, че данните.
Така че, това звучи доста здрави.
Тя преформатиран моя въпрос за мен тук, само за да го видите
в нещо като цветово кодиран версия.
Но сега, ако кликна Browse, забележите, че дори
въпреки че там е много елементарно на екрана, масата ми сега има два реда.
>> Така че, нека да вървим напред и да направя друг.
Вместо това, нека отидете на раздела SQL отново.
И този път аз ще поставите нещо подобно Rob и името му ще бъде Роб Боудън.
Боудън.
Нека да кликнете върху Запазване.
Ами сега, скоро Go.
>> Щракнете върху Преглед отново, и Сега забележите имам два реда.
Така че, това е просто начин по-сложна начин на отваряне на Google Spreadsheets
и просто напишете един ред в колона.
Но това, което е ключово е, че сега ние имаме синтаксиса
с които да се напише код, така че в крайна сметка, ние в действителност може да
направя някои и това.
Припомнете си, че PHP опори супер глобални променливи.
>> Какво е вътре в долари подпише долна GET в PHP?
Взехме един поглед към един или две прости примери.
И в PSet6, спомням имате здравей дот PHP, която използва тази променлива.
Какво става там?
Или какво е това?
А малко по-високо.
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Това е сняг семена от масив, който
е само един луксозен начин на казвайки едно масив, който има основни двойки стойности.
И ключовете не са числови.
Те са думи или струни.
И по-специално, което са тези двойки ключови стойности?
Откъде идват те?
Съжаляваме?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Не?
Когато правите тези ключовата двойки стойности идват от?
Повтори?
Отново?
Аз ли съм единственият едно заседание нещо?
>> [Смях]
>> Точно така, нали?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Да, те идват от низ заявка.
Така че, ако се върнем назад във времето, за да когато съм играл с Google
и ние сме отишли ​​в Google.com наклонена черта търсене въпросителен знак р е равно на котки,
ако аз трябваше да се удари Enter и ако Google се изпълнява в PHP,
PHP код, който Google писа ще има достъп до знака за долар
подчертават GET вътре от които е ключов наречена Q и стойност
наречени котки, които след това могат да използват, използва, за да се направи действително търсене с.
>> Така че, в действителност, това, което аз отивам да направя сега е да се върна в моята PHP код
че вие ​​отново ще видим повече от в PSet7.
И вместо да включите в твърди кодирани стойности, които
не изглежда като много динамичен сайт,
Отивам да ви дам един тийзър на какво ще направи вашия действителния код.
Вие ще постави в две въпросителни знаци като този.
Аз не знам какво е потребителското име.
Аз не знам какво, по Името ще бъде,
но знам, че мога ги получите динамично.
>> Така че, ако кодът пишем в момента е кодът работи на сървърите на Google,
или, ако това е здравей дот PHP, който идва с PSet6,
Отивам да премине в функцията за заявка
точно като ФОРМАТ, две други аргументи.
GET, цитирам, край на цитата потребителско име, и GET, цитирам, край на цитата име.
И сега, забележете какво по обща структура е тук.
Имам в ляво дясната страна на поканата,
тази функция, наречена заявка в PHP.
Аз все още имам като първа аргумент, просто низ от текст.
>> Но това е низ от текст написан на език, наречена SQL.
И честно казано, това не е голяма език.
Ние само ще говорим за тя официално днес, наистина.
И след това в определен проблем седем, там е относително
няколко функции, които ние сме Ще се наберат.
Въпросителните знаци, все пак, да кажа включете на стойност не тук и да се включат в друга стойност
тук.
И известие, че съм това, което пропуснахме от целия quote-- проклетия
it-- около цитата бележи този път.
Аз бях пропуснал цитата марка около въпросителния знак,
Съжалявам, този път.
>> Така че, това, което е хубаво за това въпросната функция марка, която
PHP е склонна да подкрепи, Ruby и Python и други езици,
това просто означава, щепсел в някои ценим тук и знаете ли какво?
Можете да разбера дали да се използва единични кавички или двойни кавички.
Не ме притеснява с тези интелектуално безинтересни подробности.
Но се уверете, че е правилно така че ми код е в крайна сметка
оперативна и безопасно, които ще има смисъл, не след дълго.
>> Сега, колко аргументи общо, само за да да е ясно, е вземането на функция заявка?
Всеки, който иска да гласува за повече от два?
Три?
Разбира се, защо?
Защо три?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Точно така.
Първата част е низ.
Вторият аргумент е знак за долар подчертават GET скоба потребителско име.
И третият аргумент е едно и също нещо, но само името.
Така че, с други думи, в момента ако имах уеб форма
че трябваше да се текстови полета, един за потребителско име на потребителя,
един за неговото или нейното име, просто като теб ще види в един сайт
когато се регистрирате за някой сайт, тази мощ
да бъде кодът на задния край, че всъщност прави вкарването сега
в базата данни.
>> Сега за разлика от това, нека се бързо напред.
Да предположим, че сега е за употреба е влезете в и искате
да пиша PHP код, който проверява дали лицето, което е просто влезете в профила си
всъщност е потребител, можете да използвате доста проста синтаксис.
Може да се каже SELECT, нека да кажем, звездни, където звезда означава всичко.
Аз не знам какво искам искам, така че просто ми даде
всички колони от таблицата призова потребителите, когато, и това е хубаво.
Изберете подкрепя това, което е нарича предикат, който е
като начин на квалификациите, което искате.
Къде потребителско име равнява цитирам, край на цитата Malan.
Така че тук също съм вградени във вътрешността на аргумента
към функция PHP, линия на SQL код.
И това SQL код това Време е буквално ще
за търсене на цитат, край на цитата Malan.
>> Сега това не е всичко, което полезно, така че аз отивам да го пропуснем
и аз отивам да се направи този съвет от Brady, и отидете
и плъг-ин, вместо въпросителен знак тук.
Така че, просто да е ясно, какво следва вторият ми аргумент
се ако някой е просто влезете в профила си и аз искате да проверите дали той или тя е всъщност
потребител?
АУДИТОРИЯ: [недоловим]
DAVID Malan: Да.
Чувам знак за долар долна черта GET цитат, край на цитата потребителско име.
И това трябва да се върне при мен някой от редовете в моята база данни
че имате потребителско име на Malan.
Сега се надяваме, аз отивам да се върна нула, ако никога не Malan е бил тук,
или един, ако той има.
Аз не трябва да се върнем две или три или четири.
Защо?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Казах уникален, нали?
Simple причина.
Защото аз казах, че е стигнал до да е уникално, просто логично,
можете да имате само нула или един Malans в този конкретен таблица от база данни.
Сега като настрана, просто така сте виждали тя, макар да продължите да използвате GET
и въпреки че се използват само PSet6 GET, със сигурност можете да имате POST.
И припомни, че Post е друг техника за предоставяне на информация
от форма, но не се показват в URL адреса.
Това е малко по-сигурна за сигурност неща, като потребителски имена и пароли,
които PSet7 ще, в действителност, да включва.
>> Така че, нека да направим това в PHP MyAdmin и да видим какво ще стане.
Отивам да отидете на раздела MySQL.
И забележете, че стойността по подразбиране за PHP MyAdmin, просто да се опитаме да бъдем полезни,
е да изберете звезда от потребителите, където е един.
Е, едно е винаги е вярно, така че това е глупаво ефективно
просто изберете всичко.
Но аз отивам да бъде малко по- по-педантични и ръчно
напишете SELECT звезда от потребителите.
>> Сега е технически, можете да цитирам името на масите.
Това е рядък, че трябва да имате, но забележете това не са
нормалните си цитати на клавиатурата US.
Това е така наречената backtick, което е обикновено в горния ляв страна
ъгъл на клавиатурата.
Но това е рядко, че ще всъщност трябва да се занимавам с това,
така че просто ще ги пропуснете, така или иначе.
Така че сега, нека да вървим напред и да се удари отида.
И колко реда трябва да получа обратно, когато изберете звезда от потребителите?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Броят на редовете, разбира се.
Но колко по този бетон история точно сега?
Два, защото там имаше мен и имаше Роб.
Така че, ако щракнете върху Go, виждам, че визуално Аз съм намерила назад, наистина, два реда.
Има много елементарно относно екран, но виждам само два реда.
От друга страна, ако аз направя това отново и да направим SELECT звезда от потребители, когато е потребителско име
се равнява на цитат, край на цитата Malan, сега ако щракнете Go,
Аз само ще се върна един ред.
И накрая, ако го направя нещо подобно на това, предполагам,
че аз не се грижи за получаване на всичко,
което е вид безсмислено сега, защото има само две колони.
Това не е като аз съм избирането огромно количество данни.
Да предположим, че вървим напред и да изберете името ОТ
Потребителите, където потребителско име равнява Malan, това, което е хубаво за SQL честно,
е, че тя наистина просто прави това, което му казвате да прави.
Това е доста кратка, но вие буквално просто го кажете това, което искате да направите.
Изберете име от потребителите, където е потребителското име равнява Malan.
И това наистина е толкова категоричен.
Така че, сега, ако аз се удари Go, колко редове съм аз ще се върна?
One, защото това е просто Malan, да се надяваме.
Или нула, ако той не е там, но една максимално.
>> И колко колони ще се върна?
Колко колони?
Този път, аз съм просто ще да се получи един, защото не го направих
изберете звезда, която е всичко.
Сега съм избирането просто име, така че аз Просто се върнем една колона и един ред.
И изглежда някак по подходящ начин нелепо, просто гледам супер
малка по този начин.
Така че, това, което се случва в действителност?
Когато изпълни SQL заявка, използвайки изберете,
какво сте се назад от базата данни
е като временна таблица с редове и колони, може би,
но това се пропусне нещо, което всъщност не е избран от вас.
Така че, това е като, ако някой е имал голям таблица на всички студенти
регистрирана за някои Студент група, а вие казвате,
ми даде всичко на първокурсника, които съм регистрирана за нашия студент група, това, което
Ваш колега в Студент група може да направи
е те просто да предадат вие цялата таблица.
Това е като да кажеш, изберете звезда.
И това е малко досадно, ако искахте само първокурсника.
И така, ако вместо това каза: изберете звезда от таблица от база данни
където годишно се равнява цитирам, край на цитата първокурсник,
това е така, сякаш ти приятел в групата на студентите
буквално подчерта и копират само редовете първокурсници,
ги поставили в нов Google Spreadsheet или файл Excel,
и ти я върна на Получената само файл.
Това е всичко, което се случва на концептуално тук.
>> Така че в крайна сметка, ние можем да направим някои доста фантазия неща
чрез съхраняване на неща, като потребителски имена и пароли и други подобни.
Но, оказва се, че трябва да правим малко по-различно от това.
Това не е толкова умен, за да само съхранява потребителско име и парола.
Някой по-рано, аз мисля, тук долу, предложено за самоличност.
Сега за самоличност може да бъде като Harvard ID или Net ID Йейл,
но може да бъде още по-лесно в нашия случай база данни.
И наистина, в общия случай е да има друга колона.
И аз ще отида напред и да редактирате моята маса.
И ако си поиграете с този интерфейс за PSet7,
ще видите, че можете да проверите този бутон тук и да добавите
поле в началото на таблицата.
И сега, ако аз кликнете Go, че ще ходи да ми даде една от тези форми
от по-рано.
Отивам да добавите поле, наречено ID.
И аз отивам да го числов тип направи.
>> Имам един куп на стойностите за Numerics.
Аз съм просто ще изберете INT и Не се притеснявайте за коренно различни размери.
Не е нужно да се уточни дължина или на стойност,
защото тя ще бъде 32 бита без значение какво.
Атрибутите, ние не се виждат преди.
Всяко участие в някое от изброените опции на менюто този път?
За INT?
Какво ви предлагаме?
Не?
Направете някое от тези неща да има смисъл?
Да.
Да, грозен, нали?
>> По принцип, ако ще да се получи всеки с уникален номер, който
е мястото, където тази история е, ще, аз наистина искам само
човек да има номера, като нула и едно и две и три и четири.
Не трябва да се справят с отрицателни числа.
Той просто изглежда като излишни усложнения.
Искам четири милиарда възможни стойности, не четири милиарда възможни стойности,
така че аз просто удвои капацитета на моя INT.
Като настрана, ако искате да се отнасят това да нещо като Facebook,
назад във вид на моя ден, когато Facebook за първи път излезе,
Вярвам, че това, което бяха използване на MySQL база данни в техния
за съхраняване на потребителя идентификатор, беше просто INT.
Но, разбира се, има много на реални хора в света.
Има много фалшиви Facebook сметки в света.
И така, в крайна сметка, Facebook препълни размерът на INT, а четири милиарда
стойност.
Ето защо, ако се вгледате наоколо и има сайтове
които могат да ви кажа какво вашия уникален идентификационен е.
И ако никога не сте избрали потребителско име в Facebook, ще видите вашия уникален идентификатор.
Мисля, че е профил дот PHP въпросителен знак ID равнява нещо.
Това вече е нещо като голям INT, или много, много дълго, ако щете,
което е с 64-битова стойност или нещо сравнимо.
>> Така че, дори и в реалния свят те направя въпроси в крайна сметка понякога имат значение.
И се оказва, тук, ако съм давайки на всички мои потребители уникален идентификатор,
Искам да бъда супер изрично и минимално направи тази област уникален.
Но се оказва, че има един парче номенклатура и днес
това е първичен ключ.
Ако сте проектиране на база данни маса и вие знаете предварително
че една от колоните в тази таблица трябва и еднозначно ще определи реда
в таблицата, която искате да той посочи и кажи на базата данни,
това е моят основен ключ.
Може да има дубликати в други области,
но аз казвам, че това базата данни е основният ми, най-важното моята област,
че е гарантирано да бъде уникален.
>> Сега, това изглежда излишен.
Аз съм сега предлагам да добавите, като кликнете Save тук,
поле called-- и аз отивам да вървим напред и кликнете AI,
ние ще се върнем към че в един миг, Спестете.
Аз предлагам сега, че масата ми изглежда по този начин.
Имам една област, наречена INT ID, поле за CHAR нарича име,
поле VARCHAR нарича име, но ID, ако това е основното и следователно уникално,
защо аз просто губим Време за въвеждане на това, което
ефективно е втори уникален поле, наречено идентификатор, който е един INT?
>> Потребител, изземване, беше вече уникална, казахме.
Така че просто логично, не е нужно всеки опит на база данни на разума
чрез това, защо може да са въвели
на INT като моя уникален идентификатор, както и?
Какво this-- кажа отново?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Random достъп е по-лесно, защо?
>> АУДИТОРИЯ: [недоловим]
DAVID Malan: Да, това е Просто достъп до номера.
Така че, ако мислите, че това наистина е таблица, като масив,
сега имам уникални идентификатори че мога да скачат наоколо.
И по-добре, отколкото, че все още е, че колко голям е един INT ще бъде отново?
32 бита или четири байта.
>> Колко голяма е името ми щеше да бъде?
Максимално?
16 байта.
>> Така че, ако наистина се грижат за изпълнението на кода си,
мисля, обратно към PSet5, бихте предпочели да търсите за четирима байт стойност или 16 а
байт стойност, нали?
Това наистина е толкова просто като това.
Вие трябва да направите четири пъти като много работа за търсене на потребителски имена, защото тези,
са 16 байта.
Така че, трябва да имате буквално сравни всички 16 байта, за да бъде
уверите, да, това е име, което искам.
Като има предвид, за INT, можете да го направя с едва четири байта.
>> И като заделени за тези, интересуват от компютърен хардуер,
оказва се, може да се побере нещо подобно на INT или 32-битова стойност в нещо
наречен регистър в компютър CPU, което означава, че е супер,
супер бързо, дори и при най-ниската ниво на хардуера на компютъра.
Така че, има само предимства на всички наоколо.
И така, какво означава това?
В действителност, когато сте проектиране таблица на база данни, почти всички от времето
смяташ да не са само данните ви е грижа за,
но и нещо като уникален идентификатор
защото това ще нека да правят други неща.
И нека да се спъне в един проблем тук.
>> Да предположим, че потребителите не са Просто потребителски имена и имена,
но те също имат такива неща градове и държави и пощенски кодове, най-малко
тук в САЩ.
Така че, аз отивам да се продължи напред и просто бързо да се каже,
ми даде още три колони в края на таблицата.
И това ще бъде City, това ще бъде държавна,
и това ще бъде Zip.
>> Сега видове City, какви данни следва да бъде това, може би?
VARCHAR?
Аз не знам какво, по най-дългата името на града е.
Някъде в Америка, има Вероятно някои абсурдно дълга дума,
така че нека просто отидете с 255, донякъде исторически или произволно.
Членка, това, което искате да правите?
Решение разговор, нали?
Какво е може би най-ефективност?
Колко герои?
Може би само две, ако можем, да се размине с прави точно,
харесват, MA за Масачузетс и така нататък.
Така че, аз отивам да се извърви CHAR стойност на две.
>> Пощенски код е интересна една.
Ние сме тук, в 02 138, така че предлага ние трябва да използваме това, което?
Това е INT, нали?
INT, INT, кратко?
Кратко ще работи.
Не?
CHAR или пет, но аз искам един INT.
Защо избутване на INT?
Убеди ме от това.
Какво е глупаво около INT, моята идея?
Да.
>> АУДИТОРИЯ: Вземете повече памет.
>> DAVID Malan: Вземете повече памет.
Четири байта, но ти си предлагане на пощенски код
като пет байта или някой беше като CHAR, която се чувства като нали, това всъщност не е
случаят.
>> Е, забавно история.
Преди години, когато се използва за употреба Microsoft Outlook за моя имейл,
Аз в крайна сметка исках да превключите в Gmail.
И така, аз се изнасят цялата си контактите от Outlook като файл CSV.
Разделени със запетая стойности, които просто означаваше, че
имаше всички мои приятели имена и последен имена и телефонни номера и пощенски кодове
и всичко това.
И тогава направих Грешка на това отваряне
в Excel, което е програма за електронни таблици, които
разбира CSV файлове, както сме виждали.
Но след това, аз трябва да са хит, като, Command Control или S в една точка.
И Excel очевидно в момента имаше функция, при която всяко време да я
Видях няколко, той се опита да бъде от полза.
И ако този номер започна с нули, би просто се отървете от тях.
Защо ви е нужен водеща нули на цели числа?
Те са безсмислени, математически.
Те не са безсмислени в системата САЩ пощенска.
Така че, аз съм имал от години, и до днес, аз все още
имам приятели, че когато рядък случай, че имам нужда от някой, е
отговори на тези дни, Аз все още ще видите, че аз
имам приятел в Кеймбридж, Massachusetts, 2138.
И това е досадно, ако сте се опитва да се справи на програмно
генерира пликове или просто да го нахвърлям.
И това е така, защото на тази причина, Аз избрах грешен тип данни.
Така че, аз обичам вашата идея.
Нека да използвате полето за CHAR.
Пет символи, с изключение на има случаи в корнер.
Ако все още изпращате електронна поща, понякога Пощ.код тези дни,
те са като плюс четири.
Така че, ние трябва с тире и след това имаме нужда от още четири числа.
Така че трябва да бъда честен, той би могъл отидете много различни начини.
>> За сега, аз отивам да се запази го прости и аз съм просто
щях да кажа, че това е пет CHAR стойност и ние сме
ще пропусне целия таблото плюс четири.
Но това са видовете компромиси.
И вие можете да мислите за Същите проблеми, които възникват
с телефонни номера или други области.
>> И сега, това е всъщност безумен пътната да слязат.
Да предположим, че и двете Роб и аз и Хана и Мария и [? Davon?] И Andy
и други на персонала, всички живеят в Кеймбридж, Масачузетс, 02138.
Това всъщност се чувствам глупаво, че аз съм добавяне към моята маса потребители, град, държава,
и цип.
Защо?
>> АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Кажете отново?
АУДИТОРИЯ: [недоловим]
>> DAVID Malan: Те са винаги ще вървят заедно, нали?
Когато се оказва, че сме свикнали да мислим, това е така, докато не изчерпателно
търси цялата САЩ, и се оказва, че има
са някои несъответствия където множество градове имат
по същия цип, което е странно.
Но, ако ние се предвиди за сега, че 02 138 Винаги е Кеймбридж, Масачузетс,
Защо в света би да съхранявате в вашата база данни Cambridge и MA и 02138
за мен и за Хана и за Роб и за [? Davon?], А за други, които живеят
тук, в Кеймбридж, това е съвършено излишно.
>> Ние трябва да се размине само с съхранение на какво?
Просто кода цип.
Но след това, ако ние съхраняваме само пощенски код, аз искам, може би,
за моя сайт, за да знаят къде е 02 138.
Така че, имам нужда от друга маса.
И това е ОК.
И в действителност, това е един от най- дизайн на процесите на проектиране маси
че вие ​​ще направите в PSet7 както при което искате да фактор общи данни.
Точно както ние сме били изложени факторинг общ кодекс и факторинг от общия
стилове от CSS, тук също в базата данни,
ако аз само трябва да 02138 еднозначно идентифициране на някого роден град,
да не се съхранява Cambridge, Mass за всеки дяволски потребител в таблицата.
>> Вместо това, има отделна таблица, наречена Zips, че трябва да имаме това, което колони?
Вероятно поле ID, само защото, за принципите, за които говорим сега.
Вероятно цип поле за 02138.
И тогава може би това, което другите колони?
Град и държава, но само един ред за 02 138, един ред за 02 139,
един ред за 90,210.
И това е буквално всички кодове по цип, които познавам.
>> Така че сега, какво можеш да направиш?
Това е проблематично, защото Сега имам две маси.
Така, потребителите ми са най-вече тук, но тяхната информация е град-държава
тук.
Така че, оказва се с SQL, има всъщност е начин да се присъединят към информацията,
и ще видите това в PSet.
>> Но се оказва, можете направя нещо подобно.
SELECT звезда от потребители, JOIN ципове ON Потребителите са разпръснати цип равнява ципове са разпръснати цип.
Което е малко многословен, разбира се, но това просто
означава изберете всичко от процес на вземане на моята маса потребители
и моята маса ципове.
Присъединете се към тях и на онзи, област те имат в колона.
Така че, буквално прави нещо по този начин, и ми даде назад
нова временна таблица това е по-широка, че е по-голям,
която има всички изброени по- колони от двете от тях.
И това съвсем просто, ще бъде най- синтаксис за правене на нещо подобно.
>> Така че, има тази перспектива, но се случва
да бъдат други дизайнерски решения ще ви трябва да се направи, не само с индекси
но също така работи в предизвикателства.
В действителност, има предизвикателство във всеки дизайн на база данни
при което понякога двама души може да искате за достъп до същите редове на базата данни
таблица.
Така че, това е нещо, което ние ще срещнете в PSet7, както добре.
>> Но аз мислех, че ще разгледаме една атака, която е възможно в SQL.
Какви са някои от най- проблеми които могат да възникнат?
Така че, вие ще се сблъскате с този в PSet7.
И ние ви кажа какво Краен победител кодиране на решение на този проблем е.
Но ако вземете по-висок клас ниво, особено в операционните системи,
започваш да се срещнете въпрос на валентност,
на проблема с опитвам да направя няколко неща наведнъж
без прекъсване.
>> И аз мислех, че ще въведе тази идея за PSet7 с метафора
че и аз самият научих в Margo CS164 операционни системи Seltzer е
клас преди години.
Да предположим, че имате един от тези общежитието хладилници във вашата стая в общежитието или къща,
а вие имате реален склонност за мляко.
И така, вие се върне у дома от класовете Един ден, когато отворите хладилника.
О, по дяволите.
Няма никакво мляко в хладилника.
Така че, можете да затворите хладилника, заключете вратата, заключване на общежитието,
ходи зад ъгъла да CVS, излезе в ред,
и да започне проверка за малко мляко.
И това ще отнеме известно време, защото тези, по дяволите самообслужване
броячи вземат завинаги да се използва във всеки случай.
Така че междувременно, съквартиранта ти се прибира вкъщи.
Той или тя наистина обича мляко, както добре.
Те влизат в стаята на общежитието, отворите хладилника, о, дяволски него.
Има не повече мляко.
>> Така че, той или тя също отива зад ъгъла.
Но сега, тъй като там е като две или три или четири CVSes наблизо,
те се случи да отидете в един от най- различни такива на площада.
И така, сега, на няколко минути по-късно, и на двама ви
се върне у дома и уф, най-лошият проблем някога.
Сега имате твърде много мляко защото то се случва да отида кисело.
И искате мляко, но вие наистина не искали мляко.
>> Така че сега, това е скъп грешка, защото и на двама ви
направи решение въз основа на състояние на някои променлива, която
е в процес на се променя от вас,
инициатор на мляко ще се получи.
Така че, това, което е може би един от човека решение на този проблем?
АУДИТОРИЯ: [недоловим]
DAVID Malan: Остави бележка, нали?
Винаги оставяйте бележка, ако сте запознат с това шоу.
Да, има двама от нас.
Така че, винаги оставят бележка, или буквално заключва хладилника
с някакъв вид катинар или нещо, над горната подобно.
Но това всъщност ще бъде ключов проблем с дизайна на базата данни,
особено когато може да се наложи множество браузъри, множество преносими компютри,
множество потребители всички се опитват да актуализират информация наведнъж.
Особено чувствителна информация като финансова информация,
при която с склад за търговия сайт като ще бъде изграждането,
Ами ако искате да проверите колко пари имате и след това, ако имате достатъчно,
купя склад?
>> Но какво, ако някой друг, който има обща сметка с вас
е едновременно опитвайки да си купи склад?
Така че, той или тя е проверка на салдо по сметка, и на двама ви
се върна същият отговор, няма мляко.
Или и на двама ви да се върна отговора, имате $ 100 в сметката.
И двамата се опитват да направят решението да си купя една акция от някоя компания склад.
>> И сега, какво се случва?
Имате две акции?
Вие нямате акции?
Проблеми като че могат да възникнат.
Така че, ние ще срещнете това.
SQL инжекция атаки, за щастие, са нещо, което ще ви помогне с,
но това са зверски често тези дни все още.
Така че, това е само един пример.
Аз правя никакви претенции, че Harvard PIN система е
уязвими към този конкретен атака.
Опитахме.
Но, знаете ли, че ние има поле като това.
И Net ID Йейл има подобна търси екран тези дни.
И се оказва, че може би PIN система се осъществява в PHP.
>> И ако това were-- това е not-- те може да има код, който изглежда така.
Те имат две променливи.
Дай ми потребителско име и парола от пощата супер глобалната променлива
че ние говорихме по-рано.
Може би Harvard има заявка като SELECT звезда от потребители
където потребителско име е равна на тази и парола изравни с това.
И забележи, че аз съм просто да го включите в използването
на фигурна скоба нотация от другия ден, което означава просто включете в стойност
тук.
Аз не съм с помощта на въпросната техника марка.
Аз нямам никакъв втора или трети аргументи.
Аз съм просто буквално изграждане на себе си низ.
>> Проблемът обаче е, че ако някой искал scroob,
който е препратка към филм, логва с нещо подобно на това,
и съм отстранен точките които обикновено се прикрие
пароли, какво ще стане ако той е особено опасен
и паролата си, може би е 12 345, на филма, наречен "Spaceballs"
но той критично видове а апостроф след пет,
След това буквално думата или в пространството, а след това цитирам,
край на цитата един цитат равнява една, Но забележете, че е пропуснат какво?
Той пропуска котировката в дясно и той е пропуснат цитатът от ляво.
>> Защото, ако този хакер презумпция за scroob
е, че хората, които са писали това PHP код не бяха толкова ярки,
Може би те просто имат някаква единна цитира около интерполация
на променлива във фигурни скоби?
И така че може би, можеше по вид на завършат своята мисъл
за тях, но по начин, който ще да го оставим да хакнат системата на PIN.
С други думи, да предположим, че това е кодът
и ние сега включете какво scroob написали.
И това е червено, защото това е лошо.
>> И основната текст е това, което той написа,
scroob може да подвежда сървъра Харвард в изграждането на една заявка SQL
низ, който изглежда по този начин.
Password равнява 12345 или един равнява на една.
Резултатът от които, логично, е, че това ще се впишете scroob
в случай на паролата му е 12345 или ако един равни
един, който е разбира се винаги вярно, което означава scroob винаги се получава инча
>> И така, на начин да се определи това, тъй като в много от случаите,
ще бъде да пиша повече в защита.
За да се използва нещо като нашата действителната функция заявка, която
ще видите в PSet7, където ние включете нещо като въпрос бележи тук.
И красотата на функция заявка, че ние
ви дам е да го защитава срещу тях така наречените SQL инжекция атаки, при които
някой се разиграва кода си в инжектиране на неговата или нейната собствена SQL код.
Защото това, което функцията за заявка ние даваме всъщност ще направя,
ако използвате синтаксиса на въпросителен знак и второ и трето аргумент тук,
е какво да го добавите към вход, че потребителят е предвидено?
Тези, наклонена черта цитира.
>> Така че, тя бяга всяко потенциално опасни знаци.
Това изглежда странно сега, но това не е уязвима
тъй като не промяна на логиката повече
защото цялата тази парола е сега е апостроф, че не е,
в действителност, парола scroob му.
Така че, е имало някои вицове за това през годините.
Така че, това е снимка, направена на някои маниак на паркинг
с което може би знаете, че някои градове и държави се опитват да сканира вашата лиценз
плоча за вас или да ви таксуваме билет ако проверете без, като,
нещото E-Z Pass.
Така че, този човек предполага, че може би хората пишат системата E-Z Pass
не са били толкова ярка, и може би те Просто съединявани заедно низ,
така че той или тя не можеше злонамерено не само завършат своята мисъл,
но всъщност изпълни лошо командване, които ние не споменахме още,
но най-вероятно да се досетите.
Това в допълнение да изтриете, и вмъкнете и актуализация и изберете,
има и дума, наречена капка, което буквално изтрива всичко
в базата данни, което е особено лошо.
>> Ние можем да се фокусирам върху това, ако това е малко трудно да се види.
Това, сега е известен анимационен филм това е чудесно умен сега
и разбираема.
>> [Смях]
>> Да, готино.
Вид на geeking навън.
Така че това, тогава, са SQL инжекция атаки.
И те са толкова лесно да се избегне, като се използва правилния код или правилните библиотеки.
И вие ще видите в PSet7, това е Затова ние ви даваме функцията заявка.
Така че, след няколко закачки че ние смятахме, че ще
ви дам тук в нашия Останалите минути заедно.
Така че, както си спомняте от нула седмица, ние въвежда тези две крушки, които
са приятни, не само защото те са доста и са цветни,
но тъй като те подкрепят нещо наречена API, за кандидатстване
Програмен интерфейс А в CS50 до този момент, ние сме
предимно фокусирани върху GET и POST, но се оказва,
Има други HTTP глаголи като PUT.
>> И в действителност, това е слайд от нула седмица
при което, ако пишете код, който изпраща а ла PSet6 заявка за HTTP, че
изглежда по този начин с този къс текст в долната част, която се нарича JSON,
или JavaScript Object Notation че ние ще говорим за следващата седмица,
можете да включите или изключите или промяна цвета на светлината, като тези.
Така че, ако CS50 също има в допълнение към някои на тези крушки тук, в Ню Хейвън
ако искате да се заемат тях за окончателните проекти,
също и някои Microsoft Bands, които са като
часовници, които носите около китката си че по подобен начин има API, така че да
може да напишете своя собствен софтуер за тях.
>> Имаме си сметка в На Apple IOS код, така
че ако имате Apple Watch или един iPhone или IPAD или Ipod,
можете да пишете код, който всъщност работи на тези.
Имаме цял куп на платки Ардуино, които са
мънички компютри без дела, по същество,
че можете да се свържете чрез USB, обикновено до моя собствен Mac или PC,
писане на код, който работи на тях физическа устройства, които често имат сензори за тях
така че можете да си взаимодействат с реалния свят.
Имаме цял куп на устройства Leap Motion,
които са USB устройства за Mac-ове и Компютри, тук и отново, в Ню Хейвън.
И ако го свържете към вашия Mac, всъщност можете да контролирате компютъра си
вписвайки софтуер че чрез инфрачервени лъчи,
разбере къде са вашите човешки ръце са, дори без да докосвате клавиатурата.
Ние смятахме, че ще споделят един бърз зърнат на този, например.
>> [За възпроизвеждане на музика]
Така че, ние имаме едно цяло куп от тези неща,
също призова мио рамо ленти което ще ви постави над предмишницата
и след това можете да контролирате реал свят или виртуалния свят като този.
>> [За възпроизвеждане на музика]
Или, ние също имаме някои Google Картон, която е буквално, като,
картонена кутия бихте могли да поставите на вашия лицето, но пързалка във вашия телефон, в него
така че да остави чашата на вашия телефон наистина близо до очите си.
И Google картон е доста евтино от $ 10 или $ 20.
И тя има малки лещи че леко смяната
изображението на екрана за вашата човешка очи, за да ви даде усещане за дълбочина
така че вие ​​всъщност имате 3D среда пред вас.
Ние също имаме някои Samsung Gear, които е по-скъпо версия на това,
но това може да се плъзга по подобен начин в Android телефон и ще ви даде илюзията
of-- или да даде на опита на виртуалната реалност.
И в крайните нашите две минути, ние смятахме, че ще се опитам да направя това.
Ако мога да проектира какво има Колтън тук само за да загрявка,
нека да вървим напред и да се хвърлят нагоре на големия екран тук.
Нека ме убие светлините.
Колтън, искаш ли да се продължи напред и постави на мобилния си за момент
и дойде на над към средата на сцената?
И искаш да project-- това е, което вижда Колтън.
>> Сега, Wi-Fi в тук е не толкова силна, за това устройство
че това е супер убедителна, но Колтън е буквално
в това вълшебно място футуристичен.
Той вижда само един образ.
Вие виждате лявото и дясното му око че мозъкът му се шев заедно
в триизмерна среда на лицето му.
Той просто избрана опция от менюто тук.
И така отново, той носи тази гарнитура с Samsung телефон него това е
безжично стърчаща в нашия режийни.
Сега сте на Марс, мисля?
COLTON: Мисля, че да.
Аз не съм сигурен [недоловим].
[Смях]
>> DAVID Malan: Оказа се, Марс има тези менюта.
>> COLTON: [недоловим] някой готин места, ако искаме да отидем to--
>> DAVID Malan: Къде искаме да отидем?
>> COLTON: [недоловим]
DAVID Malan: И нека да видим където Колтън ни като сега.
COLTON: [недоловим]
>> DAVID Malan: Значи, има толкова много различни места можете да предприемете сами.
Има FAPIs чрез който можете да напиши игри или взаимодействия, които
тичам, в крайна сметка, по телефона.
Така че, вие наистина просто написването на мобилен телефон ап.
Но благодарение на софтуера и графичните възможности,
Сега Колтън е в това мъничък вила.
И в риск от се претоварваме,
Колтън и аз ще си наоколо за докато в края на клас днес тук
ако искате да дойде и да играе.
И ние ще ги доведа обратно през следващата седмица, както добре.
Без допълнително, отсега това е всичко за днес.
Ще се видим следващата седмица.
>> [MUSIC - Ragga TWINS, "лош човек"]