>> [Музички]
Дејвид MALAN: Во ред, ова е CS50.
Ова е крајот на недела осум.
И денес, ние започнуваме за пополнување на некои парчиња
кога станува збор за градење работите на интернет.
Значи, да се потсетиме дека во понеделникот ние трошиме многу повеќе време
на PHP, кој е овој динамичен програмски јазик кој
ни овозможува излез, меѓу другите работи, HTML и други такви содржини
дека ќе сакаат да видат.
Но, ние не сме навистина погледна како ние ќе треба да чува сите податоци.
Всушност, речиси секој од дека супер интересни веб-сајтови кои ги посетувате и денес
имаат некој вид на база на податоци на задниот крај, нели?
Фејсбук сигурно складира големи количини на податоци за сите нас и сите продавници на Gmail
на вашите пораки.
>> И така, многу други сајтови, не се само статична содржина која е информативни.
Тоа е всушност динамичен на некој начин.
Ви обезбеди влез, тоа надградби страниците за други луѓе.
Ќе го добиете пораки, ви испрати пораки, и така натаму.
Така, денес, ние се погледне поблиску основи на проектот
дека ќе се нурне во следната недела, CS50 финансии, кое
е всушност ќе имаме да се изгради нешто што не е во C, но во PHP.
А веб-сајт што изгледа малку нешто како ова
која им овозможува да купуваат и продаваат акции, кои се всушност
ќе се осврне реално време трговија податоци од Јаху финансии.
И така на крајот, ќе имаат Илузијата за себе и за корисниците
дека вие сте всушност купување и продавање акции и добива речиси во реално време
надградби, управување со портфолио, од кои сите
се случува да се бара да се има, во крајна линија, база на податоци на корисниците.
>> Значи, со свои зборови, особено ако не сте
супер запознаени со компјутер наука или бази на податоци, што
знаеш базата на податоци да биде во моментов, во nontechnical термини?
Што е тоа?
Како ќе го опише да цимер или пријател?
>> ПУБЛИКАТА: [Беззвучен] информации [Беззвучен]
>> Дејвид MALAN: Значи, листа на информации, или store-- листа на информации
кои можеби ќе сакате да ги чувате за нешто, како корисник.
И она што корисниците се направи поврзани со нив?
Ако сте корисник на Фејсбук или Gmail, кои се карактеристиките
дека сите од нас кои имаат?
Како, што би можело да биде дел од колони во табелата на која ние
алудираше последен пат?
Бидејќи повторно, можете да мислам на база на податоци
навистина како фенси Excel датотеката или Google Табела или Епл броеви датотека.
>> Значи, она што мислите кога ќе се сетам на корисникот?
Што прават тие?
Што е тоа?
>> ПУБЛИКАТА: Едно име.
>> Дејвид MALAN: Едно име.
Значи, ако името, како Дејвид Malan ќе биде име на некој корисник.
Што друго корисничко имаат?
>> ПУБЛИКАТА: лична карта.
>> Дејвид MALAN: лична карта.
Значи, како идентификациски број, како вашиот Харвард Проект или вашиот Јеил Нет проект или слично.
Што друго би корисник имаат?
>> ПУБЛИКАТА: Лозинка.
>> Дејвид MALAN: А лозинка, можеби адреса, телефонски број, можеби, можеби
е-маил адреса.
Значи, има гроздовете на полиња и ова би можеле вид на спирала надвор од контрола
брзо веднаш штом ќе започнете реализација, ох, ајде да го зачувате овој
и ајде да се сместат ова и она.
>> Но, како ние всушност го направи тоа?
Значи, повторно, ментална модел за да имаат за денес како што
нурне во вистинските SQL, Структурно јазик за пребарување,
е база на податоци која изгледа вака.
Тоа е само редови и колони.
И можете да замислите Google Spreadsheets или било кој број на други програми.
Но она што е клучот за MySQL, која е база на податоци софтвер ние се случува да се користи,
слободно отворено available-- Фејсбук употреба
тоа и било кој број на други websites-- база на податоци продавници работите relationally.
И релациона база на податоци само значи оној кој буквално
складира податоците во редови и колони.
Тоа е толку едноставно како што.
>> Значи, дури и нешто како Оракл дека можеби сте слушнале за општо
е релациона база на податоци.
И под хаубата тоа, продавници податоци во редови и колони.
И Oracle ви наплаќа многу пари за да го направи тоа,
со оглед на MySQL обвиненија можете ништо за истата.
Значи, SQL ќе ни даде најмалку четири операции.
Можност за избор на податоци, како за читање податоци, вметнете, избришете, и ажурирање на податоците.
Со други зборови, тие се навистина четири клучни операции
кој се случува да ни овозможи да се промени работи во овие редови и колони.
>> Алатка која ние ќе ги користиме денес особено да научат SQL и да си игра со него
повторно се вика PHP MyAdmin.
Тоа е веб-базирана алатка.
Вкупниот е случајно што тоа е напишано во PHP.
Но, тоа се случува да ни даде графички кориснички интерфејс, така што ние всушност може да
создадат овие редови и колони а потоа и да разговараат со нив преку код.
Значи, ајде сега да почне да се што мислам дека е искрено
вид на процес на забавата на градење на задниот крај на веб-сајтови,
деловите што корисниците не види, но сигурно се грижат за,
затоа што тоа е подобро за податоци се случува.
Така, слично на C и малку помалку како PHP,
SQL или база на податоци која ги поддржува SQL, има барем овие типови на податоци
и гроздовете на другите.
Char, VARCHAR, ИНТ, BIGINT, Децималниот и DateTime.
И има цела куп други карактеристики,
но ајде да го направите тоа со начин на вистински пример.
>> Одам да одите во CS50 ИРО каде што, во однапред, јас сум логиран
и јас исто така го посетиле URL за оваа алатка наречена PHP MyAdmin.
А проблемот постави седум, ние ќе ти каже како точно да се дојде до овој интерфејс
исто така.
Во горниот лев агол на екранот, известување што се вели предавање.
И тоа само значи дека однапред, го создадоа
празна база на податоци наречена предавање дека нема табели во него уште.
Нема редови и колони.
Бидејќи прв нешто што ние ќе треба да се направи
се почне да се создаде маса што се случува да се сместат на нашите корисници.
>> Значи, буквално над тука на правото, јас сум
случува да се каже за базата на податоци Сакам маса наречена корисници.
Значи, ова е како на датотека што го сакате да ги чувате сите мои податоци во.
И колку колони?
Па, ајде да ја задржиш едноставен за сега.
Јас само сакам да ги чувате како корисничко име и име за корисникот.
Ќе започнете мал.
Значи, сакам две колони вкупно.
А јас ќе одам да се оди напред и да кликнете на Оди.
А потоа, за овие столбови, она што јас ќе одам
да do-- ако овој интернет cooperates-- во ред,
па ние ќе се обидеме тоа повторно.
Одам да се создаде маса наречена Корисниците со две колони, кликнете оди, ОК.
Сега имаме тоа навистина брзо.
Ви благодарам, многу добро направено.
Добро, па она што сакаме овие колумни да се вика?
>> Значи, се случува да се нарече Корисничко име.
Значи, сите гледам here-- и интерфејс искрено добива малку грдо на крајот,
еднаш ќе почнете да пишувате во сите овие податоци.
Но, она што е убаво е тоа вид на парадоксално, Јас сум во создавањето колони,
но алатка има глупаво ги распослав во редови
така што можам да го конфигурирате овие колони.
Значи, има две празни места таму под име.
И една од овие области јас сакаат да се нарече име,
а другиот поле Сакам да го наречеш со името.
>> И сега јас треба да го изберат типови на податоци за овие работи.
Значи, со оглед на тоа во Excel и Google Spreadsheets,
ако сакате колона, вие буквално само напишете име или корисничко име, притиснете Enter.
Можеби сте го направи храбар лице само за да биде појасно, но тоа е тоа.
Вие не се определи типови на колоните.
Сега во Google Spreadsheets или Excel, може да се определи како ќе се рендерира податоци.
Вие би можеле да одат на менито Формат, и вие да наведете ја прикажете како знак за долар,
прикажете како децимален број.
>> Значи, тоа е слични во духот дека она што ние сме за да се направи,
но ова е всушност ќе ја принуди на податоци за да биде одреден тип.
Сега, иако пред еден миг јас рече дека има само неколку типови на податоци,
има всушност е многу, и тие се
во различни степени на специфичност.
И како настрана, вие па дури и може да направи фенси работи
како геометрии складирање во внатрешноста на базата на податоци.
Можете да ги чувате работите како GPS координати
а всушност се најде, математички, точки кои се блиски до другите.
Но, ние ќе треба да задржи овој супер едноставен
и да си одат до тука, на сите т.н. видови стринг.
>> Значи, тука е листа на куп на опции.
Char, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT.
И тоа е вид на огромна.
И, за жал, малку парадоксално до С,
знак не е навистина знак.
Ако се определи во база на податоци дека вашиот тип на податок е char,
тоа значи дека, да, тоа е Char, но тоа е една или повеќе карактери.
И ќе мора да се определи колку знаци што го сакате.
Значи, она што е типично должина на корисничко име?
Има ограничување обично?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: 16, можеби?
Така нешто.
Знаете, се врати во ден, што се користи да биде осум.
Понекогаш тоа е 16, понекогаш тоа е дури и повеќе од тоа.
И така, тоа не значи дај ми еден знак.
Ова значи дека треба да се наведе должината на полето,
и сега би можел да кажам нешто како 16.
И таму е пласирам тука.
Така, ќе видиме во еден момент дека ова значи еден,
секој корисничко име мора да биде 16 карактери.
Но чекајте, М-А-Л-А-Н. Ако тоа е моето корисничко име и јас сум со користење само на пет,
она што ќе му предложи на база на податоци да го стори и за другите 11 карактери кои
Сум се задржани простор за?
Што би направил?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Да, само да ги направи сите ништовни.
Да ги направи простори.
Но веројатно нула, па многу обратна коса црта нули.
Значи, од една страна, имаме сега се сигурни дека моето корисничко име
може да биде не повеќе од 16 карактери.
И друга страна на тоа е дека ако имав навистина долго име
или сакаше навистина долго корисничко име, како што некои од вас
момци би можеле да имаат во тој колеџ или во Yale.edu, не можете да имате еден.
И така во Всушност, ако сте некогаш сте регистрирани за веб-сајт
и ќе се викал на велејќи Вашата лозинка е премногу долго
или вашето корисничко име е премногу долго, тоа е едноставно поради програмер, кога
конфигурирање на неговата или нејзината база на податоци, одлучи дека оваа област ќе
да биде подолг од оваа должина.
>> Добро, така што ако да продолжиме со името?
Колку долго треба да биде Име на човекот вообичаено е да биде?
Колку знаци, 16?
Јас сум Сомневајќи се што можевме најде некој во оваа соба
каде што од страна на неговиот или нејзиниот прв плус последните Името е подолг од 16 карактери.
Значи, што е подобро од тоа, 17?
18?
25?
Поголема?
30?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: 5.000, о, боже.
Значи, тоа е веројатно пристоен горна граница, да се каже.
И тука сме вид на се има да се направи проценка на повик.
Како, нема вистински одговор тука.
Бесконечна не е сосема можно, бидејќи ние сме на крајот
ќе have-- сме ќе снема меморија.
Значи, ние треба да се направи пресуда повик во некоја точка.
>> Многу честа појава ќе биде, на пример, да use-- и дозволете ми да наведете CHAR тука
како before-- 255 беше буквално Горната граница на оваа база на податоци софтвер
Пред години.
И така, многу од луѓето само би рекол, парична казна.
255 е граница.
Ајде да се само користење на максимум.
И ова е прилично смешно.
Како, ако сте пишување нечии именува за 200 плус знаци,
дека малку смешно.
>> Но, не заборавајте дека не е ASCII единствениот систем за ликовите.
И така, особено во многу азиски јазици
каде што има знаци не можеме изразат на клавијатури како мојата САД
тастатура, некои ликови, всушност, се до 16 бита, наместо од осум бита.
И така, ова всушност не е толку неразумно
што ни е потребно повеќе простор, ако сакаме да се вклопи
поголеми ликови од многу САД оддалечиме од оние што сме со тенденција да се разговара.
Значи, ние треба некои горната граница.
Јас не знам што најдобра е, но 255 е генерално заедничка еден.
25 чувствува ниско.
16, 32 се чувствуваат мали.
Јас ќе згрешат на страната на нешто повисоко.
Но, има пласирам, како и секогаш.
Што е, можеби, очигледно пласирам резервираат 255 карактери
за името на сите во мојата база на податоци?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Што е тоа?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Тоа е многу меморија, нели?
M-A-L-A-N. Имам само залудно потрошени 250 карактери само за чување на моето име
дефанзивно, само во случај некој во класата има навистина долго име.
Тоа изгледа како непотребно Губитокот.
>> Значи, излегува дека на SQL, овој јазик база на податоци,
всушност поддржува нешто наречен VARCHAR, или променлив знак.
И ова е вид на убаво со тоа ова Ви дозволува да наведете не фиксна
ширина, туку, со променлива ширина.
И поконкретно, на максималната ширина на поле.
Значи, ова значи дека името може да да има повеќе од 250 карактери,
но тоа сигурно не може да биде помал.
И базата на податоци се случува да се биде паметен.
Ако не се стави во М-А-Л-А-Н, тоа е само ќе да се користи пет,
можеби шест бајти за како заостанува null карактер,
и не трошат дополнителни 249 или 250 бајти непотребно.
>> Значи, ова изгледа како јас треба почнаа со оваа приказна.
Но секогаш постои Губитокот.
Значи, од една страна, а јас сум корисничко име наведени да биде хард кодирани во 16,
а можеби и тоа не беше вистинскиот повик, можеби
е, но зошто да не ги користат VARCHARs за сè?
>> Таа постои со причина.
Зошто не ја користите VARCHARs за секоја област чија должина не знаете однапред
ако тоа се чини дека е голема работа, нели?
Користете само колку простор како што треба до овој лимит?
>> ПУБЛИКАТА: побавно.
Дејвид MALAN: правопис?
ПУБЛИКАТА: Тоа го прави побавно?
Дејвид MALAN: Ох, тоа е побавно.
Добро, тоа е речиси секогаш одговорот на прашањето, искрено.
Како, на она што е Губитокот?
Таа или чини повеќе простор или тоа чини повеќе време.
Значи, во овој случај, тоа би можело да биде побавен.
Зошто?
>> ПУБЛИКАТА: [Беззвучен] утврдување [Беззвучен].
>> Дејвид MALAN: Добро.
Значи, може да се сети од дури PSED5, играјќи си со вашиот пристап
во речникот, ако треба да се алоцирам меморија динамички или задржите
расте тампон, дека всушност може да биде бавен.
Ако треба да се јавите Примерок под хаубата, а можеби и
MySQL, тоа е она што го прави, па сигурно дека би можел да биде случај.
И ако мислите дека начинот на кој назад кон PSet-- или дури
две недели, кога го правевме работите како бинарни пребарување или дури линеарно пребарување,
еден од убави работи за секој збор во базата на податоци или секој збор во колона
биде иста должина, па дури и ако целиот куп на тие ликови
се празни, е во тоа што можете да го користите случаен пристап на вашите податоци, нели?
>> Ако знаете дека секој Зборот е 16 карактери далеку,
можете да го користите покажувачот аритметички, така да зборува, и да си одат за да ни 16, 32, 48, 64,
и вие само може да се фрламе веднаш користење на аритметички
со некој од зборовите во вашата база на податоци.
Со оглед на тоа дали тоа е VARCHAR, што ти наместо да се направи?
>> [Телефонот ѕвони]
>> Ако тоа е VARCHAR, можете не може да се користи случаен пристап.
Она што треба да се погледне за или не?
Да?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Погледнете преку whole-- трага
во текот на целата листа во потрага по она што, најверојатно?
Каков вид на посебна вредност?
ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Овде сум за ништовни терминатори
демаркираат дека поделбата на зборови.
Значи, повторно, Губитокот, и нема вистинскиот одговор.
Но, ова е местото каде што, особено кога корисниците се да биде многу
и вашиот товар на вашиот сервери, број на луѓе користат таа добива висока,
Ова се всушност nontrivial одлуки.
Значи, можеме да ги напуштат овие како ова, но ајде да се движите надолу во текот на правото
овде.
Сега, има неколку колони каде што ние треба да се направи проценка на повик.
Дали има смисла да се овозможи на корисникот име, корисничко име на корисникот или на корисникот
име, за да биде нула?
Тоа е, само празна.
Се чувствува малку бесмислени, па јас сум не се случува да се провери оние кутии.
Но, се покажа во еден база на податоци, може да се каже,
некој може евентуално да има оваа вредност.
Оваа колона нема всушност да биде таму.
>> Сега, тука е тоа паѓачкото мени.
И ќе забележите дека јас сум се уште во првиот ред таму,
така што јас го зборувам корисничко име сега.
И излегува дека базата на податоци, за разлика од едноставна обичен табела,
има моќни карактеристики наречен индекси.
И индекс е начин на раскажување на база на податоци за однапред дека човечкиот
сум попаметен од вас.
>> Знам дека она што видови на пребарувања, одберете или вметнете или да ги избришете или да ги ажурирате,
дека мојот код ќе заврши го направиле на оваа база на податоци.
Сакам да го прочитате голем број на податоци.
Сакам да внесете голем број на податоци.
Сакам да се постојано избришете многу податоци.
Ако знам дека јас ќе одам да се биде пристапуваат поле Корисничко име како многу,
Можам да кажам превентивно база на податоци, знам повеќе од вас,
и сакам да указ со кој што треба индекс на ова поле.
Каде индексирање поле или колона значи дека базата на податоци во однапред
треба да позајмуваат некои идеи од, како, недела четири и пет и шест од CS50
а всушност се изгради нешто како бинарни пребарување
дрво или нешто генерално се нарекува Б дрво
дека ќе научат во како CS124 класа
на Харвард, на алгоритми класа, или било кој број на други места.
>> Базата на податоци и паметни луѓе кои го спроведуваат
ќе дознаам како да се чуваат таа маса на информации
во меморијата, така што пребарувања и други операции се супер брзо.
Вие не мора да го направи тоа.
Вие не мора да се спроведе линеарно пребарување или бинарни пребарување
или се спојуваат вид или селекција вид, било што.
Базата на податоци го прави тоа за вас, ако ви кажам тоа превентивно да индекс на ова поле.
>> И може да се види исто така, има некои други карактеристики
може да се каже за базата на податоци за да се спроведат.
Што би можело да значи тоа, ако изберам Единствен од ова мени, само интуитивно?
Да?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Да, корисничко име мора да биде уникатно.
Дали е ова добро или лошо за база на податоци, за веб-сајт со корисници?
Треба да биде уникатен кориснички имиња?
Да, веројатно.
Ако тоа е она што поле ги користиме за да се логирате,
Вие навистина не сакаат да се луѓе кои имаат истото чувство или на истото корисничко име.
Значи, можеме да имаме база на податоци за спроведување на тоа што толку
дека сега во мојата PHP код или било кој јазик, Јас не треба да се, на пример, да се провери
мора да го прави ова корисничко име постојат пред да ги споделите со некој да се регистрирате?
Базата на податоци не ќе може да две лица по име Давид или Malans регистрирани во овој случај.
>> И како настрана, иако ова мени само ви овозможува да изберете еден,
единствен индекс е оној кој е во индексираат за супер брзи перформанси,
но тоа исто така, наметнува уникатност.
И ние ќе се вратам на она што Другите две значи во само еден миг.
Во меѓувреме, ако одам да мојот втор ред, кои
е името на корисникот, јас треба да се определи дека името треба да биде уникатен?
Не, затоа што секако може да have-- нема две Дејвид
Malans во оваа соба, најверојатно.
Но, ако ги изберете друго име, ние сигурно може да има судири.
>> Сетам на хаш маси и слично.
Значи, ние сигурно не сакаат да се направи полето Име на уникатен.
Значи, ние сме само ќе ја напушти дека како цртичка, црта, цртичка, ништо.
А јас ќе одам да ја напушти се друго сами.
Навистина, повеќето од овие области ние не ќе мора да се грижи за.
И кога сум подготвен да се спаси ова, ако на интернет соработува,
Кога ќе кликнете на Зачувај, и многу, многу, многу полека ја базата на податоци да се спаси.
И сега сум назад кон оваа интерфејс, што мора да се признае,
е огромна на прв поглед.
Но сите јас ќе одам да направите е да кликнете на зборот Корисниците во горниот лев агол.
Одам да одиме до тука, кликнете Корисници, и стандардно, го
го извршила некои SQL, но повеќе за тоа во еден миг.
Еве само резиме на она што го направив.
И да не се грижи што ќе го видите спомнуваме на латински и шведски тука.
Оние кои се само на стандардната поставки, бидејќи MySQL, првично,
или PHP MyAdmin, еден од двата се случило да бидат напишани од страна на некои шведски луѓе.
Но, тоа е ирелевантно во нашиот случај тука.
>> Добро, па зошто е сето ова интересно?
Излезе, Јас може да внесете податоци во базата на податоци со пишување на код.
И јас сум се оди напред и да Во досието на мојот престој тука, јас сум
да се оди напред и да се преправам како ова е жичен до таа база на податоци, која
дека не е во моментот, но тоа ќе биде кога ќе се дојде до проблем во собата седум.
А јас ќе одам да се оди напред и вршење на функција наречена пребарување,
кој ние ќе ви даде во проблемот постави седум е дистрибуција код, што
трае најмалку еден аргумент, која е само низа.
А низа на SQL код.
Значи, ти си за да дознаете како да се пишуваат Структурно јазик за пребарување.
>> Ако сакам да се вметне нов ред во мојата база на податоци, бидејќи некој поднел
форма на мојот код, што буквално ќе пишуваат вметнете во корисниците на следниве
области: корисничко име, запирка, име, вредностите,
и сега јас треба да го вметнете нешто како Malan, и понуда,
unquote "Дејвид Malan. А сега дури и за оние кои се запознаени со SQL,
зошто сум јас користење единечен наводник во внатрешноста на оваа зелена стринг?
Што може да биде причина тука?
>> Известување дека сум ко-мешање на два јазика.
Барањето е PHP функција, но потребно е аргумент.
И тој аргумент мора да се биде напишани на друг јазик наречен
SQL, Структурно јазик за пребарување.
Значи, она што можам имаат само нагласени овде
е овој јазик наречен SQL.
Значи, што е со единечен наводник, само како брза проверка разум?
Само напред.
Тие се стрингови.
Значи, цитирам, unquote Malan и понуда, unquote Дејвид Malan се низи.
И само размислување интуитивно сега, знаејќи го она што го знам за C и PHP,
зошто јас не го направите тоа, што јас обично користени двојни наводници за жици?
Зошто не сакам да го направите тоа?
Да?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Токму така.
Бидејќи веќе користам двојни наводници на патот
надвор од аргументот со функцијата на PHP,
Јас само ќе се збуни на преведувач.
Тоа нема да знам, дали тие одат заедно?
Дали тие одат заедно?
Значи, јас го менува наместо.
>> Или би можел да направи нешто како ова, обратна коса црта цитат или црта цитат.
Искрено, тоа само почнува да да се добие многу неразбран и грдото.
Но, тоа ќе се постигне истиот резултат како и.
>> Значи, ако јас се да се изврши оваа пребарување сега, ајде да видиме што се случува.
Одам да се оди напред сега и наместо од вршење PHP код, што
е местото каде што ќе игра проблем во собата во седум,
Одам да наместо да одат на PHP MyAdmin.
И јас сум со рачно оди да се оди на јазичето на SQL,
и дозволете ми да зумирате на интерфејс.
А јас ќе одам да го поставите во нешто јас само ја внеле.
И боја кодирање има промениле малку сега,
само поради тоа што форматот на програмата работите малку поинаку.
Не се забележи дека сите што го направив е што рековме, вметнете во Корисници.
Сум наведени, тогаш, во една запирка одделени parenthesized листа двете
области кои сакам да ги внесете и тогаш јас сум буквално рече вредности
проследено со друг paren, а потоа и на две вредности
Сакам да plug-in, и сега за добра мерка,
Ќе се стави запирка на крајот.
Па, ова не е C. Ова не е PHP.
Ова сега е на SQL, и јас сум со вметнување во оваа веб-базирани интерфејс, кој е
само ќе ме пушти, штом ќе кликнете оди,
изврши ова пребарување на базата на податоци работи во внатрешноста на CS50 ИРО.
>> Па ова е добра.
Известување дека рече еден ред вметнат, отиде супер брз,
0,0054 секунди да внесете податоците.
Значи, тоа звучи прилично здрави.
Го форматира мојот пребарување за мене тука само за да ја видите
во вид на боја кодирани верзија.
Но сега ако јас кликнете Преглед на, да се забележи дека, дури и
Точно е дека постојат голем број на нередот на екранот, мојата маса сега има два реда.
>> Па, дозволете ми да оди напред и да се направи уште еден.
Наместо тоа, дозволете ми одете на ливчето SQL повторно.
И овој пат јас ќе внесете нешто како Роб и неговото име ќе биде Роб Бауден.
Бауден.
Ајде да кликнете на Зачувај.
Упс, наместо да одат.
>> Кликни тука за да, повторно, и сега забележите Имам два реда.
Значи, ова е само начин посложени начин на отворање на Google Spreadsheets
и само внесување на ред во колона.
Но она што е клучот е во тоа сега имаме синтаксата
со која треба да се напише код, така што во крајна линија, ние, всушност, може да
направи некои и оваа.
Потсетиме дека PHP поддржува супер глобални променливи.
>> Она што е во внатрешноста на доларот потпише црта добие во PHP?
Ние се погледне во еден или два едноставни примери.
И во PSet6, да се потсетиме имате здраво дот на PHP во кој се користи оваа променлива.
Она што се случува таму?
Или што е тоа?
Малку погласно.
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Тоа е снег семе од низата, кои
е само фенси начин да се каже една Низа која има клучните вредност парови.
И копчињата не се бројки.
Тие се зборови или жици.
И конкретно, што се оние кои се клучните вредност парови?
Од каде доаѓаат?
Жал ми е?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Не?
Каде се оние клучни вредност парови доаѓаат од?
Повторно се каже?
Повторно?
Јас само едно рочиште нешто?
>> [Смеа]
>> Дека е во право, да?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Да, тие доаѓаат од низата за пребарување.
Значи, ако се враќате назад во времето за да кога игравме со Google
и ние сме поминале на Google.com коса црта пребарување прашалник q е еднакво на мачки,
ако јас се да притиснете Enter и ако Гугл беа имплементирани во PHP,
PHP кодот напиша дека Google ќе имаат пристап до знакот за долар
подвлекуваат влезам внатре, од кои е клучен наречена П и вредност
наречен мачки кои потоа може да се користи се користи за да се направи вистински пребарување со.
>> Така, всушност, она што јас ќе одам да направите сега е да се вратам во мојата PHP код
што повторно ќе го види повеќе од во PSet7.
И наместо тоа на приклучување во хард кодирани вредности кои
не изгледа како многу динамичен сајт,
Одам да ви даде краток вовед на она што ќе го направи вашиот вистински код.
Сакаш да се стави во две прашалници се допаѓа ова.
Јас не знам што е корисничкото име.
Јас не знам што име ќе биде,
но знам што можам ги добие динамично.
>> Значи, ако го кодот пишуваме сега е кодот се извршува на серверите на Google,
или ако ова е здраво точка PHP, кој доаѓа со PSet6,
Одам да се помине во функцијата за пребарување
само како printf, двајца други аргументи.
GET, цитирам, unquote корисничко име, и да добијат, цитирам, unquote име.
И сега, да се забележи она што Општата структура е тука.
Јас имам на левата страна, која на повик,
оваа функција се нарекува пребарување во PHP.
Јас имам уште, како прв аргумент, само една нишка од текстот.
>> Но, тоа е серија на текст напишани на јазик наречен SQL.
И искрено, тоа не е голема јазик.
Ние сме само ќе зборуваме за тоа формално денес, навистина.
А потоа и во проблем во собата седум, има релативно
неколку особини кои ние сме ќе потпора.
Прашалниците, иако, значи уклучете односно вредноста не тука и уклучете друг вредност
овде.
И известување, јас сум она што се испуштени од целиот quote-- проклето
it-- целиот цитат го означува тоа време.
Сум го пропуштил цитат ознаки околу прашалник,
Жалам, овојпат.
>> Значи, она што е убаво за ова Прашањето функција марка која
PHP има тенденција да го поддржи, Ruby и Пајтон и други јазици,
тоа само значи приклучок во некои вредност тука и знаеш што?
Ќе дознаам дали да се користи единечен наводник или двојни наводници.
Не ми пречи со оние интелектуално неинтересни детали.
Но, бидете сигурни дека тоа е правилна така што мојот код е во крајна линија
оперативните и безбедно, која ќе имаат значење пред долго.
>> Сега, колку изнесуваат аргументи, само за да биде јасно, е преземање на функцијата за пребарување?
Секој сака да гласа за повеќе од два?
Три?
Секако, зошто?
Зошто три?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Токму така.
Во првиот дел е на стрингот.
Вториот аргумент е знак за долар подвлекуваат ГЕТ заградата корисничко име.
И третиот аргумент е истото, но само за името.
Значи со други зборови, сега ако имав веб форма
која требаше да текст полиња, еден за име на корисникот,
еден за неговото или нејзиното име, само како ќе ја видиш во веб страната,
кога ќе се регистрирате за некои веб-сајт, тоа може да
биде кодот на задниот крај дека всушност не вметнување сега
во базата на податоци.
>> Сега пак, ајде брзо напред.
Да претпоставиме дека сега за корисник е најавување и сакате
да се напише PHP код кој проверува дали лицето кое е само најавени
е всушност корисник, можете да користат прилично едноставна синтакса.
Може да се каже SELECT, да речеме ѕвезда, во кој ѕвезда значи сè.
Јас не знам што сакате, па само да ми даде
сите колони од табелата наречена корисници, каде што, и тоа е убаво.
Одберете го поддржува она што е наречен предикат, што е
како начин на квалификациите за она што го сакате.
Каде корисничко име е еднаква на понуда, unquote Malan.
Така и овде, јас сум вградени во внатрешноста на аргумент
на PHP функција, линија на SQL код.
И дека ова SQL код време е буквално оди
да пребарувате за понуда, unquote Malan.
>> Сега тоа не е сè што е корисно, па јас ќе одам да го прескокнете дека
а јас ќе одам да се стави настрана овој совет од Брејди, и да си одат
и plug-in, наместо прашалник тука.
Значи, само за да биде јасно, она што треба мојот втор аргумент
да, ако некој има само најавени и јас сакате да се провери дали тој или таа е, всушност,
корисник?
ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Да.
Слушам знак за долар црта GET цитат unquote корисничко име.
И дека треба да се врати кај мене некој од редови во мојата база на податоци
дека имате корисничко име на Malan.
Сега се надевам, јас ќе одам да се вратам нула ако никогаш Malan е тука,
или ако тој има една.
Јас не треба да се вратам две или три или четири.
Зошто?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Реков уникатен, нели?
Едноставна причина.
Затоа реков тоа е мора да да бидат единствени, само логично,
вие само може да има нула или еден Malans во овој особено базата на податоци маса.
Сега како настрана, само така сте виделе тоа, иако јас ги користите ГЕТ
и иако се користат само PSet6 Добие, сигурно ќе може да има пост.
И се сети дека е уште еден пост техника за доставување на информации
од формата, но тоа не се појавува во URL-то.
Тоа е малку посигурни сигурно за работи како кориснички имиња и лозинки,
која ќе PSet7, всушност, се вклучи.
>> Значи, ајде да го направите тоа во PHP MyAdmin и да видиме што се случува.
Одам да одиме на јазичето MySQL.
И ќе забележите дека стандардната вредност за PHP MyAdmin, само за да се обиде да биде од корист,
е да го изберете ѕвезда од корисници каде еден.
Па, една е секогаш точно, па ова има глупо ефективна
на само изберете сè.
Но јас ќе одам да се биде малку повеќе педантни и рачно
тип надвор Избери ѕвезда од корисниците.
>> Сега технички, можете да цитирам името на табели.
Тоа е редок дека треба да се, но забележите овие не се
вашата нормална цитати на тастатурата САД.
Ова е т.н. backtick, која генерално е на горниот лев
агол на вашата тастатура.
Но тоа е ретко дека ќе всушност треба да се занимаваат со тоа,
па јас само ќе ги изостави во секој случај.
Па сега, дозволете ми да оди напред и да ја погоди оди.
И колку редови да ви набавам назад кога ќе изберете ѕвезда од корисниците?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Бројот на редови, секако.
Но, колку во овој бетон приказна во моментов?
Две, бидејќи имаше мене и имаше Роб.
Значи, ако јас кликнете на Оди, гледам дека визуелно Сум добил назад, навистина, два реда.
Има многу на нередот на екран, но јас гледам само два реда.
Спротивно на тоа, ако го направам тоа повторно и направи Избери ѕвезда од корисниците, каде корисничко име
еднаква цитат, unquote MALAN, сега ако јас кликнете оди,
Јас сум само ќе се врати еден ред.
И на крај, ако го направам нешто како ова, претпоставувам
дека јас не се грижат за добивање сè,
која е вид на бесмислени сега, затоа што има само две колони.
Тоа не е како јас избирање големи количини на податоци.
Претпоставувам дека се оди напред и да го изберете име од
корисници, каде корисничко име е еднакво Malan, Што е убаво за SQL искрено,
е дека тоа навистина само го прави тоа она што ви го кажам да се направи.
Тоа е прилично кратка, но вие буквално само да го каже она што сакате да го направите.
Изберете име од корисници каде корисничкото име е еднакво Malan.
И тоа навистина е така експлицитни.
Значи, сега ако јас хит Одете, колку редови сум јас ќе се вратам?
Еден, бидејќи тоа е само Malan, се надевам.
Или нула ако тој не е таму, но еден максимално.
>> И колку колони ќе се вратам?
Колку колони?
Овој пат, јас сум само ќе да се добие една, бидејќи јас не
изберете ѕвезда, која е сè.
Сега сум во изборот само името, па јас само да се вратам една колона и еден ред.
И тоа изгледа вид на соодветно смешно, само бараат супер
мали се допаѓа ова.
Значи, она што навистина се случува?
Кога ќе се изврши SQL пребарување користење одберете,
што се добива назад од базата на податоци
е како привремена табела со редови и колони, можеби,
но дека изостави нешто што не беше всушност избрани од тебе.
Значи, тоа е како ако некој имаше големо табела на сите студенти
регистрирани за некои Група на студенти, и велиш,
ми даде сите на кои сум бруцош регистрирани за нашата студентска група, што
вашиот колега во Група на студенти може да се направи
тие само може да се предаде вас целата табела.
Тоа е како да кажеш одберете ѕвезда.
И тоа е малку досадни, ако сакавте само Новак.
И така, ако наместо да рече: изберете ѕвезда од базата на податоци маса
која година е еднаква на понуда, unquote Новак,
тоа е како вашиот пријател во групата студент
буквално истакнат и копирани само редовите Новак,
ги пренесен на Google Табела или една датотека Excel,
а вие предаден назад на резултира само датотека.
Тоа е се што се случува на концептуално тука.
>> Така, на крајот, ние може да го направи некои прилично фенси работи
со зачувување на нешта како кориснички имиња и лозинки и слично.
Но, што се испоставува, ние треба да се направи малку поинаку отколку ова.
Тоа не е дека паметни да се само чување на корисничко име и лозинка.
Некој порано, мислам дека овде долу, предложи проект.
Сега е проект би можело да биде како Харвард ID или Нет проект Јеил,
но тоа би можело да биде уште поедноставно во нашиот случај база на податоци.
И навистина, на заедничката случај е да се има друга колумна.
А јас ќе одам да се оди напред и да ги уредувате мојата маса.
И ако се позанимавам со овој интерфејс за PSet7,
ќе видите дека може да се провери ова копче тука и да додадете
областа на почетокот на табелата.
И сега, ако јас кликнете оди, тоа се случува да ми даде еден од оние форми
од порано.
Одам да додадете областа наречена проект.
А јас ќе одам да се направи тоа нумерички тип направи.
>> Јас имам еден куп на вредности за numerics.
Јас сум само ќе го изберете INT и Не грижете се за различни големини.
Јас не мора да се определи должина или вредност,
затоа што тоа се случува да биде 32 бита, без разлика што.
Атрибути, не видовме претходно.
Било каков интерес за било кој од овие опциите на менито ова време?
За ИНТ?
Што ви предложи?
Не?
Не некој од овие да има смисла?
Је.
Да, непотпишана, нели?
>> Општо земено, ако ние се случува да се даде сите единствен број, кој
е местото каде што оваа приказна е случува, јас навистина сакаат само
едно лице да има бројот како нулта и еден и два и три и четири.
Јас не треба да се справи со негативните бројки.
Тоа само изгледа како непотребно комплексност.
Сакам четири милијарди можни вредности, не четири милијарди можни вредности,
па јас само ја удвои капацитетот на мојот INT.
Како настрана, ако сакате да се однесуваат ова на нешто како што се Фејсбук,
назад во вид на мојот ден кога Фејсбук прв излезе,
Верувам дека она што беа користење на MySQL база на податоци во нивните
за чување на корисникот идентификатор, беше само INT.
Но, се разбира, има многу на вистински луѓе во светот.
Има многу на лажни Фејсбук сметки во светот.
И така на крајот, Фејсбук преплави на големината на INT, односно четири милијарди
вредност.
Кој е зошто, ако се погледне наоколу и да има веб-сајтови
што може да ви каже што Вашиот единствен број е.
И ако никогаш не сте одбрале корисничко име во Фејсбук, ќе видите вашата идентификација.
Мислам дека тоа е профилот на точка на PHP прашалник проект еднаква нешто.
Што сега е нешто како голема ИНТ, или долго долго ако сакате,
која е 64-битна вредност или нешто споредливи.
>> Значи, дури и во реалниот свет, не овие прашања во крајна линија понекогаш е важно.
И излегува тука, ако јас сум давање на сите мои корисници единствен број,
Сакам да бидам супер експлицитни и минимално направи ова поле уникатен.
Но, се покажа, има една парче номенклатура и денес
тоа е примарен клуч.
Ако сте дизајнирање на бази на податоци маса и да знаете однапред
дека еден од колони во табелата треба и ќе се идентификуваат уникатно редови
во табелата, дека сакате да го го наведете и кажете на базата на податоци,
тоа ми е примарен клуч.
Може да има дупликати во други области,
но јас сум се кажува дека оваа база на податоци Ми претставува примарен, најважниот мојата нива,
што е гарантирано да биде уникатна.
>> Сега, ова се чини излишна.
Јас сум сега предлагам е ние додадете, со кликнување Зачувај тука,
поле called-- и јас одам да се оди напред и да кликнете на АИ,
ние ќе се вратам на дека во еден момент, спаси.
Јас го предлагам сега кога мојата маса да изгледа вака.
Имам поле ИНТ наречен проект, поле знак наречен Корисничко име,
поле VARCHAR наречен име, но проект, ако тоа е основното и затоа единствен,
зошто јас само да отпад време за воведување на она што
ефикасно да е втор уникатна поле наречено број кој е ИНТ?
>> Корисничко име, да се потсетиме, беше веќе уникатен, рековме.
Па само логично, вие не треба да искуство база на податоци за причината
преку ова, зошто Јас би можеле да имаат воведено
на int како мој единствен идентификатор, како?
Што се this-- кажам уште еднаш?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Случаен пристап е полесно, зошто?
>> ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: Да, тоа е само пристап броеви.
Значи, ако мислите на тоа, навистина е на маса, како низа,
сега имам единствени идентификатори што можам да скокаат наоколу.
И подобро отколку што се 'уште е во тоа што колку е голема е int ќе биде повторно?
32 бита или четири бајти.
>> Колкава е моето корисничко име ќе биде?
Максимално?
16 бајти.
>> Значи, ако сте навистина се грижат за на перформансите на вашиот код,
сетам PSet5, дали би преферирале да пребарувате за четири byte вредност или 16 на
byte вредност, нели?
Тоа навистина е толку едноставно како што.
Што треба да направите е четири пати поголем работа да пребарувате за кориснички имиња, бидејќи тие
16 бајти.
Значи, вие мора да бидат буквално да ги споредиме сите 16 бајти да бидат
сигурни дека да, ова е корисничко име сакам.
Додека за int, можете да направете го тоа со само четири бајти.
>> И како настрана за оние заинтересирани за компјутерски хардвер,
излегува може да се вклопи нешто како на int или 32-битна вредност на нешто
наречен регистар во компјутер Процесорот, што значи дека е супер,
супер брз, дури и по најниска ниво на хардвер на компјутерот.
Значи, има само предностите на сите околу.
Значи, она што значи тоа?
Всушност, кога сте дизајнирање на база на податоци маса, речиси сите на време
што ви се случува да нема само податоците што се грижат за,
туку нешто како единствен идентификатор
затоа што ова се случува да нека се прават други работи.
И ајде да се сопнал еден проблем тука.
>> Да претпоставиме дека корисниците не треба само кориснички имиња и имиња,
но тие исто така се работи како градови и држави и поштенски кодови, барем
тука во САД.
Па, јас ќе одам да се оди напред и само брзо се каже,
ми даде повеќе од три колони на крајот на масата.
И тоа се случува да биде град, тоа се случува да биде држава,
и тоа се случува да биде Поштенски.
>> Сега типови Сити, она што на податоци ова треба да биде, можеби?
VARCHAR?
Јас не знам што најдолго име на градот е.
Некаде во Америка, постојат веројатно некои смешно долго збор,
па да се оди со 255, донекаде историски или самоволно.
Држава, она што сакате да направите?
Пресуда повик, нели?
Што е можеби повеќето ефикасна?
Колку знаци?
Можеби само две, ако не можеме да да се извлечеш со тоа само,
како, магистер за Масачусетс и така натаму.
Значи, јас ќе одам да си знак вредност на две.
>> Поштенски код е интересна.
Ние сме тука во 02138, така што сугерира дека треба да го користите она што?
Тоа е ИНТ, нели?
ИНТ, ИНТ, кратко?
Кратко ќе работи.
Не?
CHAR-пет, но сакам да int.
Зошто да им помогнам назад на int?
Убеди ме од ова.
Што е глуп за int, мојата идеја?
Је.
>> ПУБЛИКАТА: Земете повеќе меморија.
>> Дејвид MALAN: Земете повеќе меморија.
Четири бајти, но ти си предлагајќи ZIP код
како пет бајти или некој беше како char, кој се чувствува како еј, тоа не е навистина
случајот.
>> Па, забава приказна.
Пред неколку години, кога јас се користи да се користи Microsoft Outlook за мојата е-маил,
Јас на крајот сака да се префрлат на Gmail.
И така, јас се извезуваат сите мои контактите од Outlook како CSV датотека.
Одвоени со запирки вредности, која само што значи јас
имаше сите мои пријатели и последните имиња имиња и телефонски броеви и поштенски кодови
и сето тоа.
А потоа ќе се донесе грешка и го отвора
во Excel, што е програма за табелирање дека
разбира CSV датотеки како што видовме.
Но, тогаш, јас мора да се погоди, како, Команда или контрола К во една точка.
И Excel очигледно во тоа време имаше функција која секој пат тоа
видов голем број, се обиделе да бидат од корист.
И ако тој број, започна со нули, тоа само ќе се ослободи од нив.
Зошто ви е потребна водечките нули на цели броеви?
Тие се бесмислени, математички.
Тие не се бесмислени во системот САД поштенски.
Па, јас сум имал со години, на овој ден, јас се уште
имаат пријатели дека кога редок случај дека ми треба некој е
решавање на овие денови, Јас се уште ќе се види дека јас
имам еден пријател во Кембриџ, Масачусетс, 2138.
И тоа е досадно, ако сте во обид да се најде решение на програмски
генерираат коверти или само да го запишете.
А тоа е поради оваа причина, Одбрав погрешен тип на податок.
Значи, сакам вашата идеја.
Ајде да го користите полето знак.
Пет карактери, освен постои случај во корнер.
Ако сè уште праќаш пораки, понекогаш поштенски кодови овие денови,
тие се, како, плус четири.
Значи, ние треба цртичка и потоа ни треба повеќе од четири броеви.
Па да бидам искрен, тоа би можело да одат многу различни начини.
>> За сега, јас ќе одам да се задржи тоа едноставно и јас сум само
одам да се каже дека тоа е пет CHAR вредност и ние сме
ќе прескокне целата цртичка плус четири.
Но овие се видови на размена.
И може да се мисли на истите проблеми кои произлегуваат
со телефонски броеви или други области.
>> И сега, ова е всушност глупави патот да одат надолу.
Да претпоставиме дека двете Роб и јас и Ана и Марија и [? Davon?] И Енди
и други на сите вработени во живо во Кембриџ, Масачусетс, 02138.
Ова, всушност, се чувствувам дека сум глупав додавајќи мојата маса корисници, град, држава,
и ZIP.
Зошто?
>> ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: еднаш се каже?
ПУБЛИКАТА: [Беззвучен]
>> Дејвид MALAN: Тие се секогаш случува да одат заедно, нели?
Кога ќе се случи, ние се користат да се мисли тоа беше случај додека не исцрпно
претрес на целата САД, и се покажа дека има
некои недоследности каде што повеќе градови имаат
исто патент, што е чудно.
Но, ако се пропише за сега дека 02138 секогаш е Кембриџ, Масачусетс,
зошто во светот ќе се чуваат во Вашата база на податоци во Кембриџ и и м 02138
за мене и за Ана и за Роб и за [? Davon?] И за другите кои живеат
тука во Кембриџ, тоа е совршено непотребни.
>> Ние треба да се извлече со само чување на што?
Само го кодот Zip.
Но, тогаш, ако ние ги чувате само поштенски код, јас сакам, веројатно,
за мојот веб-сајт да се знае каде е 02138.
Па, ми треба друга маса.
И тоа е во ред.
И всушност, ова е еден од дизајн процеси на креирање табели
дека ќе го направи во PSet7 како и при сакате да се фактор на општи податоци.
Исто како и ние сме биле факторинг надвор заеднички код и факторингот од заеднички
стилови од CSS, тука исто така и во базата на податоци,
ако јас само треба да се уникатно 02138 идентификуваат некој роден град,
не ставајте Кембриџ, за секој ебам корисникот во вашата маса.
>> Наместо тоа, има посебна табела наречена Патентите кои треба да се она што колони?
Веројатно поле проект, само затоа, за принципите ние зборуваме за сега.
Веројатно ZIP поле за 02138.
А потоа веројатно она што другите колони?
Градот и државата, но само една ред за 02138, еден ред 02139,
еден ред 90210.
И тоа е буквално сите кодови на поштенски знам.
>> Па сега, она што можете да направите?
Ова е проблематично, бидејќи сега имам две маси.
Значи, мојот корисници најчесто се овде, но нивните информации на градот држава е
тука.
Значи, излегува со SQL, има всушност е начин да се приклучат на информации,
и ќе видите ова во pset.
>> Но, се покажа можеш направи нешто како ова.
Избери ѕвезда од корисниците, ПРИДРУЖЕТЕ патентите ЗА корисници dot ZIP еднаква на патентите dot Zip.
Што е малку разточен, Мора да се признае, но тоа само
значи одберете сè, од процес на преземање на мојата маса корисници
и мојата маса патентите.
Пристапуваат кон нив и од една поле што ги имаат во колона.
Значи, буквално прави нешто како таков, и ми даде назад
нова привремена табела тоа е поширок, што е многу поголемо,
кој ги има сите на колони од двете од нив.
И дека, едноставно, ќе биде Синтаксата за правење на нешто како ова.
>> Значи, тука е тоа напред, но таму се случува
треба да се други дизајн одлуки испишан треба да се направи, не само со индекси
но, исто така, работи во предизвици.
Всушност, таму е предизвик во било која база на податоци дизајн
при што две лица понекогаш се потребни да пристапите до истите редови на базата на податоци
табела.
Значи, ова е нешто што ние ќе судрите во PSet7, како и.
>> Но мислев дека сум се погледне во едно Нападот е можно тоа во SQL.
Кои се некои од проблеми што можат да се појават?
Значи, ќе се судрите со овој во PSet7.
И ние ќе ви кажам она што на отворено кодирање решение за овој проблем е.
Но, ако се повисока класа ниво, особено во оперативни системи,
си оди за да се сретне прашање на atomicity,
проблемот да се обидат да се направи повеќе работи одеднаш
без прекин.
>> И јас мислев дека ќе се воведе овој Идејата за PSet7 со метафора
дека јас научив во Марго CS164 оперативни системи сода е
класа години.
Да претпоставиме дека имате една од овие студентски дом фрижидери во вашиот dorm соба или куќа,
и имате вистинска наклонетост за млеко.
И така, ќе дојдеш дома од класи еден ден, ќе се отвори фрижидерот.
Ох, по ѓаволите.
Нема млеко во фрижидер.
Значи, ќе го затворите фрижидер, заклучи вратата, го заклучите вашиот дом,
одиме зад аголот да Биографии, се во согласност,
и да почне да се проверува за малку млеко.
И тоа се случува да се земе некое време, бидејќи оние проклети само исходот
бројачи се засекогаш да го користите и понатаму.
Па во меѓувреме, вашиот цимер доаѓа дома.
Тој или таа навистина сака млеко, како и.
Да влезат во соба dorm, отвори фрижидерот, ох, тоа ебам.
Нема повеќе млеко.
>> Значи, тој или таа, исто така, оди зад аголот.
Но, сега, бидејќи не е како две или три или четири CVSes близина,
тие се случи да оди на една од различни оние на плоштадот.
И така сега, неколку минути подоцна, и на вас
се врати дома и ugh, најлошото проблем секогаш.
Сега имате премногу млеко затоа што тоа се случува да одат кисело.
И ви се допаѓа млеко, но вие навистина не како млеко.
>> Па сега, ова беше скап грешка, бидејќи и двете од вас
донесе одлука врз основа на состојба на некои променливи кои
беше во процес на се менува од вас,
иницијатор случува да се добие млеко.
Значи, она што е можеби човечко решение за тој проблем?
ПУБЛИКАТА: [Беззвучен]
Дејвид MALAN: остават порака, нели?
Секогаш да оставите порака, ако сте запознаени со тоа шоу.
Да, постојат две од нас.
Значи, секогаш се остават порака, или буквално заклучите фрижидер
со некој вид на катанец или нешто во текот на врвот како што.
Но, тоа е, всушност, ќе биде Клучниот проблем со базата на податоци дизајн,
особено кога ќе може да има повеќе прелистувачи, повеќе лаптопи,
повеќе корисници сите се обидуваат да надградба на информации одеднаш.
Сензитивна информација како финансиски информации,
при што со тргување веб-сајт како што ќе се гради,
што ако сакате да се провери колку пари што треба, а потоа, ако имате доволно,
купам акции?
>> Но, што ако некој друг кој има заедничко сметка со вас
истовремено обидувајќи да купам акции?
Значи, тој или таа е проверка на Баланс на сметка, и на вас
да се вратам на истата одговор, нема млеко.
Или двете ќе се вратам од одговорот, имате $ 100 во предвид.
Двајцата ќе се обидат да се направи одлука да се купи една акција од некоја компанија акции.
>> И сега, што се случува?
Имате две акции?
Немате акции?
Проблеми, како што може да се појават.
Значи, ние ќе се судрите со тоа.
SQL инјекција напади, за среќа, се нешто што ќе ви помогне со тоа,
но овие се atrociously заеднички овие дена се уште.
Значи, ова е само еден пример.
Јас не прават тврдењата дека Харвард ПИН систем е
ранливи на овој посебен напад.
Се обидовме.
Но, знаете дека ние има поле како овој.
И нето проект Јеил има слично во потрага екран овие денови.
И што излезе, дека можеби PIN-от систем се спроведува во PHP.
>> А ако тоа е not-- were-- тие би можеле да имаат код кој изгледа вака.
Тие имаат две променливи.
Дај ми корисничко име и лозинка од функцијата супер глобалната променлива
кои зборувавме претходно.
Можеби Харвард има побарување како SELECT ѕвезда од корисниците
каде корисничко име е еднаква на онаа и лозинка еднаква на тоа.
И ќе забележите дека јас сум само приклучување тоа во користење
кадрава заграда нотација од другите ден, што значи само приклучете вредност
овде.
Јас не сум со користење на Прашањето техника марка.
Јас не се имате било какви вториот или трети аргументи.
Јас сум само буквално изградба на себе низа.
>> Проблемот, сепак, е дека ако некој сакал scroob,
која се однесува на филм, се пријавува со нешто како ова,
и јас се отстранат на точки кои обично се прикриваат
лозинки, што ако тој е особено малициозен
и неговата лозинка можеби е 12345, за на филм наречен "Spaceballs"
но тој критички типови на една понуда по пет,
тогаш буквално зборот или во просторот, а потоа и понуда,
unquote еден е еднакво на еден цитат, Но забележите тој е испуштена што?
Тој е испуштена цитатот на десната и тој е испуштена цитатот на левата страна.
>> Бидејќи ако тоа напаѓачот Претпоставката е scroob
е дека луѓето кои пишувале ова PHP код не беа толку светла,
можеби тие само имаат некои сингл цитати околу интерполација
на променливата во големи загради?
И така, можеби, тој би можел вид завршување на нивната мисла
за нив, но на начин кој ќе да му дозволи да се пробиени во системот на PIN-от.
Со други зборови, да претпоставиме дека ова е кодот
и ние сега се вклучи во она scroob напишале.
И тоа е црвено, бидејќи тоа е лошо.
>> И со основниот текст е она што тој ја внеле во,
scroob можеше трик серверот на Харвард во изградба на пребарување SQL
стринг кој изгледа вака.
Лозинка или еднакво на 12.345 еден е еднакво на еден.
Како резултат на кои, логично, е дека тоа ќе се логирате scroob
во својата лозинка, ако е 12.345 или ако еден е еднакво на
еден, што е, се разбира секогаш точно, што значи scroob секогаш добива во.
>> И така, на начин да се поправи оваа, како и во многу случаи,
ќе биде да се напише, одбраната.
Да се ​​користи нешто како нашата вистинската функција за пребарување, кои
што ќе видите во PSet7, каде што се вклучи во нешто како прашалници тука.
И убавината на функција за пребарување дека ние
ви даде е да ги брани против овие т.н. SQL инјекција напади, каде
некој се трикови на вашиот код во инјектирање свој SQL код.
Затоа што она што го бараш функција ние ви даде, всушност, ќе се направи,
ако користите синтакса прашалник и втор и трет аргумент тука,
е она што не го додадете во внесување дека корисникот обезбедени?
Оние црта цитати.
>> Значи, тоа се измолкнува било каква потенцијално опасни карактери.
Ова изгледа чудно сега, но тоа не е ранлив
поради тоа што не го прави тоа промена на логиката повеќе
затоа што целиот лозинка е сега една понуда што не е,
всушност, лозинка scroob е.
Значи, таму се некои шеги за ова во текот на годините.
Значи, ова е слика преземени на некои geek на паркингот
при што може да знам дека некои градови и држави се обидуваат да го скенира вашиот лиценца
плоча кон вас или да ви наплати билет ако одите преку без, како,
нешто Е-Зи pass.
Значи, ова лице се претпоставува дека можеби на луѓе кои ќе пишуваат на системот Е-Зи Лозинка
не беа толку светли, а можеби и тие само споени заедно стринг,
така што тој или таа не може злонамерно не само да ја заврши својата мисла,
но всушност извршување лоша команда, кои што не сум споменат уште,
но вие веројатно може да се погоди.
Дека во прилог да го избришете и вметнете и надградба и да изберете,
таму е исто така клучен збор нарекува капка, кои буквално се што се брише
во базата на податоци, која особено е лошо.
>> Можеме да зумирате на ова, ако тоа е малку тешко да се види.
Ова, во моментов, е познатиот цртан филм тоа е прекрасно умен сега
и разбирливи.
>> [Смеа]
>> Да, се излади.
Вид на geeking надвор.
Значи овие се, тогаш, SQL инјекција напади.
И тие се толку лесно да се избегне со користење на правото код или десно библиотеки.
И ќе видите во PSet7, тоа е Затоа ние ви даде барање функција.
Значи, неколку закачки дека ние сме мислеле дека би
ви даде тука во нашата Останатите минути заедно.
Значи, како што се сеќавам од нула недела, ние воведени овие две светилки кои
се убаво, не само затоа што тие се прилично и се шарени,
туку затоа што тие го поддржуваат нешто повика на API, апликација
Програмски интерфејс и во CS50 досега, ние сме
најмногу фокусирана на добие и ПОСТ, но излегува
има и други како HTTP глаголи стави.
>> И всушност, тоа беше слајд од нула недела
при што доколку се пишува код кој испраќа ла PSet6 барањето за HTTP дека
изгледа вака со ова парче на текст на дното, кој се нарекува JSON,
или JavaScript Објектно Нотација што ние ќе зборуваме за следната недела,
можете да го вклучите или исклучите или промена боја на светла како оние.
Па ако CS50 исто така има во прилог на некои на оние светилки овде во Њу Хејвн
ако сакате да ги позајмите, нив за конечниот проекти,
Мајкрософт, исто така, некои Бендови, кои се како
часовници кои ќе се носат околу вашиот зглоб кои имаат сличен начин на API, така што ќе
може да напише свој софтвер за нив.
>> Имаме сметка со IOS на Apple код, така
дека ако имате Apple Гледајте или iPhone или iPad или iPod,
можете да се напише код кој всушност се работи на нив.
Имаме еден куп на Arduinos, кои се
малечки компјутери без случаи, во суштина,
дека можете да ги поврзете преку USB, обично на вашата Mac или PC,
напише код кој работи на овие физички уреди кои често имаат сензори на нив
за да можете да комуницирате со реалниот свет.
Имаме еден куп Скок на уреди за движење,
кои се USB уреди за Macs и Компјутери, тука и повторно, во Њу Хејвен.
И ако го поврзете вашиот Mac, вие всушност може да го контролираат вашиот компјутер
со пишување на софтвер дека преку инфрацрвени зраци,
фигури од каде се вашите човечки раце се, дури и без да се допира вашата тастатура.
Ние сме мислеле дека би ги споделат брз видат во ова, на пример.
>> [Музички]
Значи, имаме една цела куп на овие работи,
исто така, се нарекува Myo рака бендови која ќе се стави врз вашите подлактица
а потоа можете да ги контролирате реално свет или во виртуелниот свет се допаѓа ова.
>> [Музички]
Или, имаме и некои Google Картон, кој е буквално, како,
картонска кутија може да се стави на вашиот лице, но слајд во вашиот телефон во неа
така што ќе се стави на вашата чаша телефон навистина блиску до твоите очи.
И Google Картон е прилично евтини од $ 10 или 20 $.
И таа има мали леќи дека нешто надвор смена
на сликата на екранот на вашиот човечки очите да ви даде чувство на длабочина
така што навистина имаат 3D средина во пред вас.
Ние, исто така, има некои Samsung Gear, која е поскапа верзија на ова,
но тоа може да слајд на сличен начин, во Андроид телефон и да ви даде на илузијата
of-- или даваат по искуството на виртуелната реалност.
И во нашата конечна две минути, ние сме мислеле дека би се обидувал да го направите тоа.
Ако можам да проектираат она Колтон има тука само за да наточи вашиот апетит,
дозволете ми да оди напред и да се фрли Регистрација на големиот екран тука.
Дозволете ми да го убие на светла.
Колтон, дали сакате да се оди напред и го стави на вашиот мобилен за момент
и да дојде на над да средината на сцената?
И сакате да project-- тоа е она што го гледа Колтон.
>> Во овој момент, Wi-Fi во овде е не толку силно за овој уред
дека ова е супер привлечна, но Колтон е буквално
во овој магичен футуристички место.
Тој го гледа само една слика.
Ја гледате левото и десното око дека неговиот мозок се прикрпувањето
во три димензионален средина на лицето.
Тој е само избраните изборна опција тука.
И така, повторно, тој е облечен во оваа гарнитура со Самсунг телефон на тоа дека тоа е
безжично проектирање на нашата глава.
Сега сте на Марс, мислам?
COLTON: Јас мислам така.
Не сум сигурен [Беззвучен].
[Смеа]
>> Дејвид MALAN: Излегува Марс има овие менија.
>> COLTON: [Беззвучен] некои кул места, ако сакаме да одиме to--
>> Дејвид MALAN: Каде сакаме да се оди?
>> COLTON: [Беззвучен]
Дејвид MALAN: И ајде да видиме каде Колтон е земајќи ни сега.
COLTON: [Беззвучен]
>> Дејвид MALAN: Значи, има толку многу различни места може да се земе себе.
Има FAPIs преку кој може да пишуваат игри или интеракции кои
работи, во крајна линија, на телефон.
Значи, навистина, само пишување на мобилен телефон стан.
Но, благодарение на софтвер и способностите на графика,
сега Колтон е во овој малечки куќа.
И по ризик самите себе огромна,
Колтон а јас ќе останат околу за додека на крајот од класа денес овде
ако сакате да се излезе и да игра.
А ние ќе ги донесе врати следната недела, како и.
Без понатамошно, Шум тоа е тоа за денес.
Ќе се видиме следната недела.
>> [Музика - рага близнаци, "лош човек"]