[MUZYKI] DAVID MALAN: Dobrze, to jest CS50. To jest koniec tygodnia osiem. A dzisiaj, zaczynamy wypełnić w niektórych kawałkach jeśli chodzi o budynku rzeczy w sieci. Tak, pamiętam, że w poniedziałek spędzamy dużo więcej czasu na PHP, co jest ten dynamiczny język programowania, który umożliwia nam wyjście, m.in. rzeczy, HTML i inne takie treści że my chcemy zobaczyć. Ale tak naprawdę nie wyglądało na to, jak będziemy przechowywać informacje. Rzeczywiście, prawie nic z tego super ciekawe strony internetowe odwiedzasz dziś mieć jakieś bazy danych na tylnym końcu, prawda? Facebook na pewno przechowuje dużo danych o nas wszystkich i sklepach Gmail wszystkie e-maile. I tak, wiele innych miejsc nie tylko statyczny to informacyjny. To rzeczywiście w jakiś sposób dynamiczny. Podać wejście aktualizuje strony dla innych ludzi. Otrzymasz wiadomości, wysyłanie wiadomości i tak dalej. Więc dzisiaj, przyjrzymy się bliżej podbudow z projektu że będziesz nurkować w przyszłym tygodniu, CS50 Finanse, które faktycznie będzie musiał budować coś nie w C, ale w PHP. Strona internetowa, która wygląda Trochę coś takiego która pozwala kupować i sprzedawać zapasy, które są rzeczywiście będzie czerpać czasie rzeczywistym Dane stock Yahoo Finance. I tak w końcu będziesz mieć iluzja dla siebie i dla użytkowników że jesteś rzeczywiście kupna i sprzedaży akcje i uzyskanie czasu prawie prawdziwe aktualizacje, zarządzanie portfel, z których wszystkie będzie wymagać posiadania, ostatecznie, baza użytkowników. Tak, własnymi słowami, zwłaszcza jeśli nie jesteś bardzo obeznany z komputerem nauki lub bazy danych, co wiesz, bazy danych, aby być teraz, w kategoriach nietechnicznych? Co to jest? Jak można to opisać do współlokatora lub przyjaciela? PUBLICZNOŚCI: [niesłyszalne] informacje [niesłyszalne] DAVID MALAN: Tak, wykaz informacji, lub store-- listę informacji które warto przechowywać o czymś, jak użytkownik. A co zrobić, użytkownicy mają z nimi związane? Jeżeli jesteś użytkownikiem na Facebook lub Gmail, jakie są właściwości że wszyscy użytkownicy? Podobnie jak to, co może być jednymi z kolumny w arkuszu kalkulacyjnym, na które nawiązywał ostatni raz? Bo znowu, można myślę o bazie danych naprawdę tak fantazyjny pliku Excel lub Google Jabłko plik arkusza kalkulacyjnego lub numery. Więc, co o tym myślisz kiedy myślisz użytkownika? Co oni mają? Co to? PUBLICZNOŚCI: Nazwa. DAVID MALAN: Nazwa. Więc jeśli nazwa, podobnie jak David Malan będzie nazwa jakiegoś użytkownika. Co jeszcze robi użytkownik ma? PUBLICZNOŚCI: Identyfikator. DAVID MALAN: Identyfikator. Tak, jak numer identyfikacyjny, jak twój Harvard ID lub twój Yale Net ID lub podobne. Co jeszcze może użytkownik ma? PUBLICZNOŚCI: Hasło. DAVID MALAN: Hasło, może adres, numer telefonu, być może, być może adres e-mail. Tak, tam pęki pól i to może jakby wymknąć się spod kontroli szybko, jak tylko zacząć zdając sobie sprawę, no, powiedzmy, przechowywania tego i niech to zapisać to i to. Ale jak właściwie zrobić? Więc jeszcze raz, model psychicznego mieć na dzisiaj jak my nurkować w rzeczywistej SQL, Structured Query Language, Jest to baza danych, która wygląda tak. To tylko wiersze i kolumny. I można sobie wyobrazić Arkusze Google lub dowolną liczbą innych programów. Ale to, co jest kluczem o MySQL, która jest oprogramowanie bazy danych będziemy używać, swobodnie otwarcie available-- Facebooka zastosowań to i wielu innych websites-- Baza danych przechowuje rzeczy relacyjnie. I relacyjnej bazy danych oznacza po prostu taki, który dosłownie przechowuje dane w wierszach i kolumnach. To takie proste. Tak więc, nawet coś takiego jak Oracle, które mogłeś zwykle słyszał jest relacyjna baza danych. A pod maską go, przechowuje dane w wierszach i kolumnach. I Oracle pobiera opłaty w dużo pieniędzy, aby to zrobić, natomiast opłat MySQL masz nic do tego samego. Więc, SQL ma dać nam co najmniej cztery operacje. Możliwość wyboru danych, jak przeczytane danych, wstawianie, usuwanie i aktualizacji danych. Innymi słowy, są to naprawdę cztery kluczowe operacje że będziemy pozwalają nam zmienić rzeczy w tych wierszach i kolumnach. Narzędzie, które użyjemy dziś szczególnie do nauki języka SQL i bawić się z nim PHP jest ponownie wezwał MyAdmin. Jest to narzędzie oparte internetowej. Całkowity przypadek, że jest napisane w PHP. Ale to się nam graficzny interfejs użytkownika, tak, że możemy właściwie utworzyć te wiersze i kolumny i rozmawiać z nimi za pomocą kodu. Tak, niech teraz zacząć co myślę jest szczerze rodzaj procesu zabawy z budowy tylny koniec stronach internetowych, części, które użytkownicy nie zobaczyć, ale na pewno nie obchodzi, bo to raczej dane dzieje. Tak więc, podobnie jak w C i A Nieco mniej takich jak PHP, SQL lub bazy danych, która obsługuje SQL, ma przynajmniej te typy danych i kiście innych. CHAR, VARCHAR, INT, BIGINT, Po przecinku, a DATETIME. I jest cała kilka innych funkcji, ale niech to zrobić sposób rzeczywisty przykład. Mam zamiar iść do CS50 IDE gdzie z góry, ja zalogowany a ja również odwiedził URL PHP to narzędzie o nazwie MyAdmin. I problemu ustawić siedem, powiemy dokładnie, jak dostać się do tego interfejsu równie dobrze. Na górnym rogu, zauważyć, że mówi wykład. A to po prostu oznacza, że z góry, stworzyłem Wykład pusta baza danych o nazwie że nie posiada arkuszy kalkulacyjnych w nim. Nie ma żadnych wierszy i kolumn. Ponieważ pierwsza co zamierzamy zrobić jest rozpoczęcie tworzenia tabeli że będzie przechowywać naszych użytkowników. Tak, dosłownie w ciągu tutaj, w prawo, jestem powie bazy danych Chcę tabeli o nazwie Users. Tak, to jest tak, jak plik, że Aby zapisać wszystkie moje dane w. A ile kolumn? No cóż, keep it simple teraz. Chcę tylko, aby zapisać się jak Nazwa użytkownika i nazwę użytkownika. Zaczniemy małe. Tak, chcę dwóch kolumn łącznie. I mam zamiar iść do przodu i kliknij przycisk Przejdź. A więc, dla tych kolumny, co mam zamiar do do-- jeśli tego internecie cooperates-- wszelkie prawa, więc mamy zamiar spróbować ponownie. Zamierzam utworzyć tabelę o nazwie Użytkownicy z dwóch kolumn, kliknij przycisk Przejdź, OK. Teraz mamy to naprawdę szybko. Dziękuję, bardzo dobrze zrobione. W porządku, więc to, co chcemy te kolumny się nazywać? Tak, jeden będzie się nazywać Nazwa użytkownika. Tak, widzę here-- i interfejs szczerze mówiąc, robi się trochę brzydkie końcu, Po rozpoczęciu wpisywania wszystkich danych. Ale to, co miłe jest to, że rodzaj paradoksalnie, tworzę kolumn, ale narzędzie ma głupio położył je w rzędach tak, że można skonfigurować te kolumny. Tak, jest tam dwie spacje w kolumnie Nazwa. I jeden z tych pól I chcą nazywa Nazwa użytkownika, i inne pola chcę zadzwonić Nazwa. A teraz mam do wyboru typy danych dla tych rzeczy. Tak więc, podczas gdy w Excel Arkusze i Google, jeśli chcesz kolumny, dosłownie wpisz nazwę lub nazwy użytkownika, naciśnij Enter. Może zrobić to tłustym drukiem tak dla jasności, ale to wszystko. Nie określić typy kolumn. Teraz w arkuszach kalkulacyjnych Google lub Excel Ciebie może określić, w jaki sposób dane są renderowane. Można przejść do menu Format, a ty może określić pokazać jak znak dolara, pokazać, jak wartości zmiennoprzecinkowej. Tak, to w duchu podobnym do że to, co mamy zamiar zrobić, ale to jest rzeczywiście zmusi dane za pewien typ. Teraz, mimo że chwilę temu powiedział, że tylko kilka typów danych, Jest rzeczywiście dużo, a oni w różnym stopniu specyficzności. I tak na marginesie, to Można nawet robić wymyślne rzeczy jak geometrii magazynowych wewnątrz bazy danych. Można przechowywać rzeczy jak współrzędne GPS i rzeczywiście znaleźć, matematycznie, Punkty, które są blisko innych. Ale mamy zamiar mieć to super proste i udać się tutaj, wszystkie tak zwane typy String. Tak więc, oto lista cała masa opcji. CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. I jest to rodzaj przytłaczające. I niestety, nieco paradoksalnie do C, char nie jest to CHAR. Jeśli zostanie określona w bazie danych że typ danych to CHAR, to oznacza, że ​​tak, to jest ZNAK, ale jest to jeden lub więcej znaków. I trzeba określić Ile znaków chcesz. Więc, co jest typowe długość nazwy użytkownika? Czy istnieje limit zwykle? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: 16 może być? Coś takiego. Wiesz, z powrotem w dzień, kiedyś osiem. Czasami jest to 16, czasami to nawet więcej. A więc nie ma oznacza, daj mi jeden CHAR. Oznacza to, że trzeba określić długość pola a teraz mogę powiedzieć coś w stylu 16. I jest kompromis tutaj. Więc zobaczymy za chwilę że oznacza to jedno, każda nazwa musi być 16 znaków. Ale zaraz, M-A-L-A-N. Jeśli to moja nazwa użytkownika, a ja tylko za pięć, co można zaproponować, że baza danych zrobić dla innych 11 znaków I już zarezerwowane miejsca na? Co byś zrobił? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Tak, po prostu ich wszystkich zerowy. Bądź im miejsca. Ale chyba null, więc dużo zer backslash. Tak więc z jednej strony mamy teraz upewnić się, że moja nazwa użytkownika może być nie więcej niż 16 znaków. I druga strona, która jest że gdybym miał naprawdę długą nazwę lub chciał naprawdę długi nazwa użytkownika, jak niektórzy z was faceci mogą mieć w tym college'u lub w Yale.edu, nie można mieć. I tak w rzeczywistości, jeśli już kiedykolwiek zarejestrowana na stronie i masz krzyczał mówiąc Twoje hasło jest za długie lub nazwa użytkownika jest za długa, to po prostu dlatego, programista, kiedy konfigurując swoją bazę danych, zdecydował, że to pole będzie nie dłużej niż tej długości będzie. No dobrze, więc co, jeśli przystępujemy do nazwy? Jak długo należy Nazwa typowa ludzka być? Jak wiele znaków, 16? Zgaduję, mogliśmy znaleźć kogoś w tym pokoju gdzie przez swojego pierwszego plusa ostatniej nazwa jest dłuższa niż 16 znaków. Więc, co jest lepsze niż to, 17? 18? 25? Większe? 30? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: 5000, o mój Boże. Tak, to chyba przyzwoity górna granica, powiedzmy. I tu rodzaju mają aby nawiązać połączenie wyroku. Podobnie jak, nie ma dobrej odpowiedzi tutaj. Nieskończony nie jest całkiem możliwe, bo jesteśmy w końcu będzie have-- jesteśmy zamiar zabraknie pamięci. Tak, musimy zrobić osąd w pewnym momencie. Bardzo często będzie, na przykład, do use-- i pozwól mi określić CHAR tutaj jak before-- 255 było dosłownie górna granica tego oprogramowania bazy danych Lata temu. I tak, wiele ludzi po prostu powiedzieć, dobrze. 255 jest granica. Miejmy tylko wykorzystać maksymalnie. I to jest bardzo śmieszne. Na przykład, jeśli piszesz czyjeś wymienić na 200 powiększonej znaków, że trochę śmieszne. Ale należy pamiętać, że ASCII nie jest jedyny system znaków. I tak zwłaszcza w Wiele języków azjatyckich gdzie nie ma znaków, nie możemy wyrażenia na klawiszach jak mój USA Klawiatura, niektóre znaki faktycznie zajmują 16 bitów zamiast osiem bitów. I tak, to w rzeczywistości Nie wszystko, co jest nieuzasadnione że potrzebujemy więcej miejsca, jeśli chcemy, aby dopasować większe znaków niż samym USA centric nich mamy utrzymanych do dyskusji. Tak więc, musimy niektóre górnej granicy. Nie wiem, co jest jednym z najlepszych, ale 255 jest ogólnie rozpowszechnione. 25 czuje się na niskim poziomie. 16, 32 czują się na niskim poziomie. Chciałbym zaważyć na czegoś wyższego. Ale jest pewien kompromis, jak zawsze. Co to jest, być może, oczywiste kompromis rezerwowania 255 znaków wszystkich o nazwie w mojej bazy danych? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Co to jest? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: To Dużo pamięci, prawda? M-A-L-A-N. Właśnie zmarnowane 250 znaków po prostu do przechowywania moje imię defensywnie, tylko w przypadku, ktoś w klasie ma bardzo długą nazwę. To wydaje się niczym nieuzasadnionej kompromis. Tak więc okazuje się, że SQL, ten język bazy danych, faktycznie obsługuje coś nazywa VARCHAR lub zmiennej CHAR. I to jest miłe w że umożliwia określenie nie stały szerokość, lecz zmienna szerokość. A bardziej konkretnie, Maksymalna szerokość pola. Tak, oznacza to, że nazwa może nie więcej niż 250 znaków, ale może to na pewno mniej. A baza danych ma być inteligentny. Jeśli nie umieścić w M-A-L-A-N, to będzie używać tylko pięć, może sześć bajtów jak tylną znak null, i nie wydać dodatkowe 249 lub 250 bajtów niepotrzebnie. Tak, to wydaje się, że powinienem Rozpoczęliśmy z tej historii. Ale zawsze jest kompromis. Tak więc, z jednej strony, nazwa użytkownika Mam podano być zakodowana w wieku 16, a może to nie było prawo połączenia, może to jest, ale dlaczego nie korzystać Varchars na wszystko? Istnieje on powodu. Dlaczego nie skorzystać varchars dla każdego pola którego długość nie wiesz z góry jeśli wydaje się być wielka rzecz, prawda? Używaj tylko tyle miejsca co trzeba się do tego limitu? PUBLICZNOŚCI: Wolniej. DAVID MALAN: pisowni? PUBLICZNOŚCI: Sprawia, że ​​wolniej? DAVID MALAN: Och, to wolniej. Dobra, to prawie zawsze odpowiedź, szczerze mówiąc. Jak, co to jest kompromis? To albo kosztuje więcej miejsca czy to kosztuje więcej czasu. Tak więc, w tym przypadku, może być dłuższy. Czemu? PUBLICZNOŚCI: [niesłyszalne] określenia [niesłyszalne]. DAVID MALAN: Dobra. Więc, może pamiętacie z nawet PSED5, grając z podejściem do słownika, jeśli trzeba przydzielić pamięci dynamicznie lub utrzymać rośnie bufor, że w rzeczywistości może być powolne. Jeśli masz zadzwonić malloc pod maską, a może to co robi MySQL, więc pewnie, że może być. A jeśli uważasz, że sposób z powrotem do PSet-- lub nawet tygodni dwa, kiedy robili takie rzeczy jak przeszukiwanie binarne lub nawet przeszukiwanie liniowe, jedna z miłych rzeczy o każdym słowie w bazie danych lub w każdym słowie w kolumnie być dokładnie takiej samej długości, nawet jeśli cała masa tych znaków są puste, jest to, że można użyć o dostępie swobodnym na danych, prawda? Jeśli wiesz, że każdy Słowo to 16 znaków z dala, można użyć arytmetyki wskaźników, tak aby mówić i przejść do nas 16, 32, 48, 64, a może po prostu skoczyć natychmiast za pomocą arytmetyki do każdego z tych słów w swojej bazie danych. Natomiast jeśli jest to VARCHAR, co ty, zamiast zrobić? [Dzwoni telefon] Jeśli jest to VARCHAR, ty nie można korzystać z dostępu losowego. Co trzeba szukać lub zrobić? Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Look przez whole-- śladu całej listy patrząc za co, najbardziej prawdopodobne? Jaki rodzaj szczególnej wartości? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Szukam dla zerowych terminatorów które wyznaczają oddzielenie słowa. Więc jeszcze raz, to kompromis, a nie ma dobrej odpowiedzi. Ale to gdzie, w szczególności kiedy użytkownicy dostać się do być wiele a obciążenie serwerów, liczba osób korzystających dostaje wysokie, są to właściwie nieszablonowe decyzje. Tak więc, możemy zostawić tych, jak to, ale niech przewinąć w dół na prawo tutaj. Teraz jest kilka kolumn gdzie musimy wykonać połączenie wyroku. Czy jest sens, aby umożliwić użytkownika nazwa, nazwa użytkownika lub użytkownika Nazwa, aby być null? Oznacza to, że po prostu puste. Czuje się trochę bezsensowne, więc jestem nie będzie sprawdzić te pola. Ale okazuje się w sposób bazy danych, można powiedzieć, ktoś może mieć ewentualnie tę wartość. Ta kolumna nie ma faktycznie tam być. Teraz, jest to menu rozwijane. I zauważyć, nadal jestem tam w pierwszym rzędzie, więc mówię teraz o nazwę użytkownika. I okazuje się, że w bazie danych, w przeciwieństwie do zwykłego prostego arkusza kalkulacyjnego, posiada zaawansowane funkcje zwane indeksy. I indeks jest sposobem mówienia Baza z góry, że I ludzkiego jestem mądrzejszy od ciebie. Wiem, jakie rodzaje zapytań, wybierz lub wstawić lub usunąć lub aktualizacji, że mój kod się skończy się robi w tej bazie danych. Chcę czytać dużo danych. Chcę wstawić wiele danych. Chcę nieustannie usunąć wiele danych. Jeśli wiem, że będę dostępu, jak pole Nazwa użytkownika dużo, Mogę zapobiegawczo powiedzieć bazy danych, wiem więcej niż ty, i chcę, aby dekret, że zalecana indeksu to pole. Gdzie indeksowania pole lub kolumnę oznacza, że ​​baza danych z góry powinien pożyczyć kilka pomysłów, jak, Tydzień cztery i pięć i sześć z CS50 i rzeczywiście budować coś poszukiwania binarnego drzewa lub coś ogólnie nazywa się drzewo B że będzie się uczyć w klasie, jak CS124 na Harvardzie, klasa algorytmów, lub dowolną liczbę innych miejscach. Baza danych i inteligentna Ludzie, którzy go wdrażane będzie dowiedzieć się, jak przechowywać że tabela informacji w pamięci, aby wyszukiwanie i inne operacje są super szybko. Nie musisz tego robić. Nie musisz do realizacji przeszukiwanie liniowe lub binarne wyszukiwania lub połączyć rodzaju lub wybór sortowanie, nic z tego. Baza danych zrobi to za Ciebie, jeśli powiesz to zapobiegawczo do indeksu to pole. I widać też, nie ma niektóre inne cechy możemy powiedzieć, baza danych do wyegzekwowania. Co to może oznaczać, jeśli wybiorę Unique z tego menu, po prostu intuicyjnie? Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Tak, nazwa musi być unikalna. Czy to dobrze, czy źle dla bazy danych, na stronie z użytkownikami? Powinny być unikalne nazwy użytkownika? Tak, pewnie. Jeśli to, co pola używamy do logowania się, tak naprawdę nie chcą ludzi mających ten sam dotyk lub taka sama nazwa. Tak, możemy mieć Baza egzekwowania, że ​​tak że teraz w moim kodu PHP lub dowolnym języku, Nie mam do, na przykład, sprawdzić zawsze robi to nazwę użytkownika istnieje zanim niech ktoś zarejestrować? Baza danych nie pozwoli dwie osoby o nazwie David lub Malans zarejestrować się w tym przypadku. I tak na marginesie, chociaż Menu pozwala wybrać tylko jeden, unikatowy indeks jest jeden, który jest indeksowane dla super szybkich wyników, ale również wymusza unikalność. I będziemy wracać do tego, co Pozostałe dwie myśli za chwilę. Tymczasem, jeśli pójdę do mój drugi rząd, który to nazwa użytkownika, należy określić że nazwa powinna być wyjątkowa? Nie, dlatego, że mogłem na pewno have-- nie ma dwóch David Malans w tym pokoju, najprawdopodobniej. Ale jeśli mamy wybrać inną nazwę, możemy niewątpliwie kolizji. Pomyśl hash tabele i tym podobne. Tak, to na pewno nie chcesz aby pole Nazwa wyjątkowy. Tak, jesteśmy po prostu zostawię że w desce rozdzielczej, tablicy rozdzielczej, tablicy rozdzielczej, nic. I mam zamiar zostawić wszystko sam. W istocie, większość z tych pól nie musimy się przejmować. A kiedy jestem gotowy, aby zapisać to, Jeśli Internet współpracuje, I kliknij przycisk Zapisz, i bardzo, bardzo, bardzo powoli robi bazie zbawieni. A teraz jestem z powrotem do tego Interfejs, który co prawda, jest przytłaczająca na pierwszy rzut oka. Ale wszystko co mam zrobić, to kliknąć na Użytkowników słowo w lewym górnym rogu. Mam zamiar udać się tutaj, kliknij Użytkowników, a Domyślnie, wykonał jakiś SQL, ale więcej o tym za chwilę. Oto tylko podsumowanie tego, co zrobiłem. I nie martwić się, że zobaczysz wspomnieć łaciny i szwedzkim tutaj. To tylko domyślny ustawienia, ponieważ MySQL pierwotnie, lub PHP MyAdmin, jeden z dwóch się być napisany przez niektórych Szwedów. Ale to bez znaczenia w naszym przypadku tutaj. W porządku, więc dlaczego jest wszystko to interesujące? Okazuje się, mogę wstawić dane do bazy danych przez pisanie kodu. A ja śmiało i w moim pliku tutaj, jestem zamiar iść do przodu i udawać, to jest połączone z bazą danych, która Nie jest w tym momencie, ale będzie się, gdy mamy do problemu ustawić siedem. I mam zamiar iść do przodu i wykonywać funkcję o nazwie kwerendy, które dajemy ci problemu zestaw siedem jest kod dystrybucji, które ma co najmniej jeden argument, która jest po prostu ciągiem. Ciąg kodu SQL. Tak, masz zamiar dowiedzieć się, jak Napisać Structured Query Language. Jeśli chcę, aby wstawić nowy wiersz do mojego bazy danych, bo ktoś zgłosił forma do mojego kodu, chciałbym dosłownie Napisać INSERT INTO użytkowników następujące pola: Nazwa użytkownika, przecinek, nazwy, wartości, i teraz trzeba wstawić coś jak Malan, i środki, koniec cytatu 'David Malan. I teraz nawet dla osób niezaznajomionych z SQL, Dlatego używam apostrofów wewnątrz tego ciągu zielony? Co może być powodem tutaj? Zauważ, że jestem co-Margaritę dwa języki. Zapytanie to funkcja PHP, ale to wymaga argumentu. I ten argument musi samo w sobie napisane w innym języku nazwie SQL Structured Query Language. Tak, wszystko, co właśnie zaznaczony tutaj jest to język o nazwie SQL. Więc, o co chodzi z cudzysłowu, po prostu jako szybki test dla pewności? Śmiało. Są ciągi. Tak, cytuję, koniec cytatu Malan i cytat, koniec cytatu David Malan są łańcuchami. A teraz po prostu myśleć intuicyjnie, wiedząc, co wiesz o C i PHP, dlaczego nie zrobić to, co zwykle Używane cudzysłowy dla strun? Dlaczego nie chcesz tego robić? Tak? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Dokładnie. Ponieważ już używam cudzysłowy na drodze poza argumentem do funkcji PHP, Chciałbym po prostu mylić tłumacza. To nie będzie wiedział, czy te idą w parze? Czy te idą w parze? Czy te idą w parze? Tak więc, na przemian, a nie. Albo mogłem zrobić coś takiego, cytat lub lewy ukośnik odwrotny ukośnik cytat. Szczerze mówiąc, to po prostu zaczyna uzyskać bardzo nieczytelny i brzydkie. Ale to by osiągnąć ten sam wynik, jak również. Tak, gdybym miał wykonać to Zapytanie teraz zobaczmy, co się stanie. Mam zamiar iść do przodu i teraz raczej niż wykonanie kodu PHP, który to gdzie można grać w problemu ustawić siedem, Mam zamiar iść do PHP zamiast MyAdmin. A ja ręcznie dzieje , aby przejść do zakładki SQL, i pozwól mi przybliżyć interfejsu. I mam zamiar wkleić rzecz, po prostu wpisane. I kodowanie kolor ma zmienił trochę teraz, tylko dlatego, że formaty programów rzeczy trochę inaczej. Ale zauważ, że wszystko zrobiłem to mówiłem, wstawić do użytkowników. Mam określone, a następnie, w przecinkami oddzielone nawiasach lista dwa Pola, które chcę wstawić, i czasu mam dosłownie powiedział wartości a następnie inne paren, a następnie te dwie wartości Chcę plug-in, a teraz na dokładkę, Powiem średnik na końcu. Tak więc, nie jest C. Nie jest php. To jest teraz SQL, a ja wklejeniem w ten interfejs WWW, który jest po prostu się do mnie, pozwól, jak tylko kliknij przycisk Przejdź, wykonanie tej kwerendy w bazie danych działa wewnątrz CS50 IDE. Więc to jest dobre. Uwaga, powiedział jeden wiersz włożona, udał się super szybko, 0,0054 sekundy wstawić te dane. Tak, to brzmi całkiem zdrowe. Jest sformatowany mojej kwerendy dla mnie tutaj tylko po to, by go zobaczyć w rodzaju kolorami wersji. Ale teraz, gdy klikam Ludzie, zauważysz, że nawet choć jest dużo bałaganu na ekran, moja tabela ma teraz dwa rzędy. Więc, pozwól mi iść do przodu i zrobić kolejny. Zamiast tego, pozwól mi przejdź do zakładki SQL ponownie. I tym razem będę wstawiać coś takiego Rob i jego nazwa będzie Rob Bowden. Bowden. Załóżmy, kliknij przycisk Zapisz. Ups, a Go. Kliknij przycisk Przeglądaj, znowu, i teraz zauważyć, mam dwa wiersze. Tak, to jest tylko sposób bardziej złożony Sposób otwierania arkuszy kalkulacyjnych Google i po prostu wpisując wiersz do kolumny. Ale to, co jest kluczem jest to, że teraz mamy składni z którym pisanie kodu, tak aby ostatecznie mogliśmy rzeczywiście zrobić kilka i to. Przypomnijmy, obsługującym PHP zmienne globalne. Super Co jest w środku dolara znak podkreślenia GET w PHP? Przyjrzeliśmy w jednym lub dwa proste przykłady. A w PSet6, przypominam masz komentarzy Kropka PHP, który używa tej zmiennej. Co się dzieje w środku? Albo co to jest? Trochę głośniej. PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: To śnieg nasienie tablicy, która jest tylko fantazyjny sposób na powiedzenie Tablica ma par wartości klucza. A klawisze nie są numeryczne. Są słowa lub łańcuchy. A konkretnie, co są te pary wartość klucza? Skąd oni pochodzą? Przepraszam? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Nie? Gdzie te klucza pary wartości pochodzą? Powtórz? Jeszcze raz? Czy jestem jedynym, coś słuchu? [Śmiech] To prawda, tak? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Tak, pochodzą z łańcucha zapytania. Tak więc, jeśli do tyłu w czasie kiedy graliśmy z Google i mamy już do Google.com kreską wyszukiwarka znak zapytania q równa kotów, gdybym naciśnij Enter i jeśli Google zostały wprowadzone w PHP, Kod PHP, że Google napisał będzie miała dostęp do dolara podkreślenia dostać się do środka, z których Jest klucza o nazwie Q a wartość zwane koty, które może następnie wykorzystać użyty do wyszukiwania w rzeczywistego z. Tak więc, w rzeczywistości, co mam zamiar teraz zrobić, to wrócić do mojego kodu PHP że będziesz znów zobaczyć więcej w PSet7. I zamiast podłączania w ciężkich kodujących wartości, które nie wydaje się niczym bardzo dynamiczna strona internetowa, Mam zamiar dać wam teaser jaki jest twój rzeczywisty kod zrobi. Będzie można umieścić w dwóch znaki zapytania w ten sposób. Nie wiem, co nazwa użytkownika jest. Nie wiem, co się Nazwa będzie, ale wiem, mogę je dynamicznie. Tak więc, jeśli kod piszemy teraz jest kod działa na serwerach Google, lub jeśli jest to cześć kropka PHP, który pochodzi z PSet6, Zamierzam przejść do funkcja zapytania podobnie jak printf, dwa inne argumenty. GET, cytuję, koniec cytatu podając nazwę użytkownika, i GET, cytuję, koniec cytatu imię. A teraz, zauważył, co Ogólna struktura jest tutaj. Mam na lewo strony połączenia, funkcja ta nazywa kwerendy w PHP. I jeszcze jako pierwszy Argument, tylko ciąg tekstu. Ale to ciąg tekstu jest napisane w języku nazwie SQL. I szczerze mówiąc, nie jest to duży język. Jesteśmy tylko będziemy mówić o formalnie dziś, naprawdę. A następnie w problemu ustawić siedem, jest stosunkowo kilka cech, że jesteśmy zamierza wykorzystać. Znaki zapytania, choć myśli podłączyć wartość tu i podłączyć inną wartość tutaj. Oraz informacja, co mam pominąć z całego quote-- cholera it-- wokół cytatu oznacza to czas. Mam pominięte cytat Znaki wokół znakiem zapytania, Niestety, tym razem. Więc, co jest miłe o tym znak zapytania funkcja, która Dąży do wspierania PHP, Ruby i Python i inne języki, oznacza to po prostu wtyczkę w niektórych cenią tu i wiesz co? Dowiedzieć się, czy użyć apostrofy lub cudzysłowy. Nie przeszkadza mi z tymi, nieciekawe intelektualnie szczegóły. Ale upewnij się, że jest to prawidłowe tak, że mój kod jest ostatecznie operacyjne i bezpieczne, które będzie mieć znaczenie przed długo. Teraz, jak wiele argumentów w sumie, po prostu być jasne, jest funkcja podejmowanie zapytania? Każdy, kto chce głosować na więcej niż dwóch? Trzy? Jasne, czemu? Dlaczego trzy? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Dokładnie. Pierwsza część jest łańcuch. Drugim argumentem jest znak dolara podkreślenia GET wspornik nazwę użytkownika. I trzeci argument jest samo, ale tylko nazwa. Tak więc, innymi słowy, obecnie gdybym miał formularz internetowy że musiał pól tekstowych, jeden o nazwę użytkownika użytkownika, jeden na swoje nazwisko, po prostu jak można zobaczyć na stronie internetowej podczas rejestracji niektóre strony internetowej, to potęga jest kod na tylnym końcu, że faktycznie robi wprowadzenie teraz w bazie danych. Teraz natomiast, niech szybko do przodu. Załóżmy, że użytkownik jest teraz zalogowaniu i chcesz napisać kod PHP, który sprawdza, czy osoba, która jest po prostu zalogowany jest w rzeczywistości użytkownik, możesz używać dość prostą składnię. Można powiedzieć, SELECT, powiedzmy, gwiazda, gdzie gwiazdka oznacza wszystko. Nie wiem, co mam chcą, więc daj mi wszystkie kolumny z tabeli nazywa użytkownicy gdzie, i to jest miłe. Wybierz obsługuje co nazywa się predykat, który jest jak sposób zakwalifikowania co chcesz. Gdzie nazwa_użytkownika równa cytat, koniec cytatu Malan. Więc i tu, mam wbudowany wewnątrz argumentu do funkcji PHP, linii kodu SQL. I że kod SQL to Czas jest dosłownie dzieje aby szukać środki, koniec cytatu Malan. Teraz to nie jest wszystko, co użyteczne, więc mam zamiar pominąć, że i mam zamiar odłożyć Ta porada z Brady, i iść i plug-in zamiast znak tutaj pytanie. Tak, żeby była jasność, co Należy mój drugi argument być, jeśli ktoś po prostu zalogować się i ja Aby sprawdzić, czy on jest w rzeczywistości użytkownik? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Tak. Słyszę Znak dolara podkreślenia Get Quote, koniec cytatu nazwę użytkownika. I że należy powrócić do mnie żadnym z wierszy w mojej bazie danych które mają nazwę użytkownika Malan. Teraz mam nadzieję, mam zamiar wrócić zero, jeśli nigdy nie Malan tu był, lub jeden, jeśli ma. Nie powinienem wrócić dwa lub trzy lub cztery. Czemu? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Powiedziałem wyjątkowy, prawda? Prostego powodu. Bo powiedział to musi być unikalny, tak logicznie, można mieć tylko zero lub jedno Malans w tym szczególnym tabeli bazy danych. Teraz tak na marginesie, po prostu tak, że widziałem to, mimo że nadal używać GET i choć używane tylko PSet6 GET, z pewnością można mieć POST. I pamiętam, że post jest inny Technika składania informacji z formy, ale nie pokazuje się w adresie URL. To trochę bardziej bezpieczne pewnością dla rzeczy takie jak nazwy użytkowników i hasła, PSet7 który będzie w rzeczywistości wykorzystywane. Tak, zróbmy to w PHP MyAdmin i zobaczyć co się dzieje. Zamierzam przejść do zakładki MySQL. I zauważyć, że wartość domyślną PHP MyAdmin, po prostu staram się być pomocny, jest, aby wybrać gwiazdę od użytkowników, gdzie jeden. Cóż, jeden jest zawsze prawdziwe, więc ma to głupie skuteczne po prostu wybierz wszystko. Ale mam zamiar być trochę bardziej pedantyczny i ręcznie wpisz się SELECT gwiazda z użytkowników. Teraz technicznie, można podać nazwę tabelach. To rzadkie, że trzeba, ale zauważ, nie są Twoje zwykłe cytaty na klawiaturze amerykańskiej. Jest to tak zwany lewy apostrof, co jest zwykle w górnej lewej rogu klawiatury. Ale to rzadko, że będziesz faktycznie trzeba męczyć się z tym, tak, ja po prostu tak je pominąć. Więc teraz, pozwól mi iść do przodu i uderzył go. A ile wierszy powinienem dostać z powrotem, kiedy wybrać gwiazdę z użytkowników? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Liczba wierszy, pewnie. Ale ile w tym betonu historia teraz? Dwa, bo nie było mnie i nie było Rob. Tak więc, jeśli kliknij przycisk Przejdź, widzę wizualnie, że I dostaliśmy z powrotem, rzeczywiście, dwa wiersze. Jest dużo bałaganu na ekran, ale tylko widzę dwa rzędy. Natomiast, jeśli mogę to zrobić jeszcze raz i zrobić WYBIERZ gwiazda z użytkowników, gdzie nazwa_użytkownika równa się środki, koniec cytatu Malan, gdybym kliknij przycisk Przejdź, Ja tylko zamiar wrócić jeden wiersz. I wreszcie, jeśli to zrobię coś takiego, załóżmy, że nie obchodzi się wszystko, który jest rodzajem sensu teraz, bo nie ma tylko dwie kolumny. To nie tak, mam wyboru ogromna ilość danych. Załóżmy, że mam iść do przodu i należy wybierać nazwę od użytkowników, gdzie nazwa_użytkownika równa Malan, co jest ładne o SQL szczerze, jest to, że tak naprawdę nie co powiedzieć to zrobić. To dość zwięzłe, ale dosłownie po prostu powiedz, co chcesz zrobić. Wybierz nazwę od użytkowników, gdzie nazwa użytkownika równa Malan. I to naprawdę jest takie jednoznaczne. Więc teraz, gdybym uderzył Go, jak wielu wiersze mam zamiar wrócić? Jeden z nich, bo to po prostu Malan, miejmy nadzieję. Lub zero, jeśli nie jest on nie, ale maksymalnie. A ile kolumn będzie wrócę? Jak wiele kolumn? Tym razem, jestem po prostu aby jeden bo nie wybierz gwiazdę, która jest wszystko. Teraz jestem wybierając tylko nazwę, więc po prostu wrócić jedną kolumnę i jeden wiersz. I wygląda jakby odpowiednio śmieszne, po prostu patrząc bardzo mała tak. Więc, co się naprawdę dzieje? Kiedy wykonać SQL kwerendy przy użyciu wybierz, co dostajesz z powrotem z bazy danych jest jak tabeli tymczasowej z wierszy i kolumn, być może, ale pominąć niczego, co nie był właściwie wybrany przez Ciebie. Tak, to jak gdyby ktoś miał duże Arkusz kalkulacyjny wszystkich studentów zarejestrowany dla niektórych grupa uczniów, a ty mówisz, daj mi wszystkie student pierwszego roku, którzy już zarejestrowany dla naszej grupy studenckiej, co kolega w grupa uczniów może zrobić jest może po prostu wręczyć Ci cały arkusz kalkulacyjny. To tak, jakby mówiąc: wybierz gwiazdę. I jest to trochę irytujące, jeśli tylko chciał studentem pierwszego roku. I tak, jeśli zamiast tego powiedział: wybierz gwiazda z tabeli bazy danych gdzie rok wynosi cytat, koniec cytatu studentem pierwszego roku, to tak, jakby twój przyjaciel w grupie studentów dosłownie podświetlony i skopiowane tylko wiersze freshman, wklejać je do nowego Google Arkusz kalkulacyjny Excel lub plik, i podał cię z powrotem tylko plik wynikowy. To wszystko, co się dzieje na koncepcyjnie tutaj. Więc w końcu, co możemy zrobić, kilka bardzo fantazyjne rzeczy poprzez przechowywanie rzeczy jak nazwy użytkowników i hasła i tym podobne. Ale, jak się okazuje, mamy robić trochę inaczej niż to. To nie jest tak mądry, żeby tylko przechowywać nazwę użytkownika i hasło. Ktoś wcześniej, myślę, tu, zasugerował identyfikator. Teraz identyfikator może być jak Harvard ID lub Net ID Yale, ale to może być jeszcze prostsze w naszym przypadku bazy danych. I rzeczywiście, wspólna sprawa jest, aby mieć inną kolumnę. I zamierzam iść do przodu i edytować tabelę. A jeśli bawić z Ten interfejs dla PSet7, zobaczysz, że można sprawdzić ten przycisk tutaj i dodaj pola na początku tabeli. A teraz, jeśli kliknij przycisk Przejdź, to będzie dać mi jedną z tych form z wcześniej. Mam zamiar dodać pole o nazwie ID. I mam zamiar zrobić to typ numeryczny. Mam całą masę dla wartości liczbowych. Idę do wyboru INT i Nie martw się o zróżnicowanych rozmiarach. Nie mam do określenia długość lub wartość, bo to będzie 32 bity nie wiem co. Atrybuty, nie widzieliśmy wcześniej. Wszelkie odsetki w każdym z nich Opcje menu tym razem? Dla INT? Co proponujesz? Nie? Czy któryś z nich ma sens? Tak. Tak, bez znaku, prawda? Generalnie, jeśli mamy zamiar dać każdy unikalny numer, który gdzie ta historia jest dzieje, naprawdę tylko chcesz osoby do liczby jak zera i jeden i dwa i trzy i cztery. Nie potrzebuję do czynienia z liczb ujemnych. Wydaje mi się zbędnej złożoności. Chcę cztery miliardy możliwych wartości, nie cztery miliardy możliwych wartości, tak właśnie się podwoiła pojemność mojego INT. Tak na marginesie, jeśli chcesz odnosić to coś jak Facebook, powrotem w rodzaju mojego dnia, kiedy Facebook po raz pierwszy wyszedł, Wierzę, że to, co było używając w bazie danych MySQL do przechowywania użytkownika identyfikator, był tylko INT. Oczywiście, istnieje wiele prawdziwych ludzi na świecie. Jest wiele fałszywych Facebook Rachunki w świecie. I tak w końcu, Facebook przelało wielkość INT, A cztery miliardy wartość. Dlatego też, jeśli spojrzeć ok i nie ma stron internetowych że może powiedzieć, co Twój unikalny identyfikator jest. A jeśli nigdy nie wybrał nazwę użytkownika w Facebook, zobaczysz swój unikalny identyfikator. Myślę, że to profil kropka PHP znak zapytania ID równa coś. To jest coś jak duży INT, lub długo długo, jeśli chcesz, która jest wartością 64-bit lub coś porównywalne. Tak więc, nawet w świecie rzeczywistym nie są kwestie ostatecznie czasem znaczenia. I okazuje się tutaj, jeśli jestem dając wszystkich moich użytkowników unikatowy identyfikator, Chcę być bardzo wyraźne i minimalnie aby to pole wyjątkowy. Ale okazuje się, że jedna kawałek nomenklatury dzisiaj zbyt to jest klucz podstawowy. Jeśli projektowania bazy danych Stół i wiesz z góry że jedna z tych kolumn w tej tabeli powinna i będzie jednoznacznie identyfikują wiersze w tabeli, chcesz określić ją i powiedz do bazy danych, to jest mój klucz podstawowy. Nie może być duplikaty w innych dziedzinach, ale mówię to, że bazy danych jest moim podstawowym, najważniejszym moim polu, który jest gwarancją wyjątkowy. Teraz wydaje się to zbędne. Ja proponuje teraz, że mamy dodać, klikając przycisk Zapisz tutaj, called-- pola i idę iść do przodu i kliknij AI, wrócimy do że w chwili, Save. Proponuję teraz, że Moja tabela wygląda tak. Mam pole o nazwie ID INT, ZNAK nazywa się pole Nazwa użytkownika, pole VARCHAR o nazwie Nazwa, ale ID, jeśli jest to podstawowa, a zatem wyjątkowy, dlaczego po prostu tracić Czas wprowadzenia co efektywnie jest drugi unikalny pole o nazwie ID, który jest INT? Nazwa użytkownika, przypomnijmy, był już wyjątkowy, powiedzieliśmy. Więc po prostu logicznie, nie trzeba każde doświadczenie bazy danych do rozumu przez to, dlaczego Mogę wprowadziły INT jak mój unikalny identyfikator, jak również? Co this-- powiedzieć jeszcze raz? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Random dostęp jest łatwiejszy, dlaczego? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Tak, to jest tylko dostęp do numerów. Tak więc, jeśli myślisz, że to naprawdę jest stół, podobnie jak tablica, teraz mam unikalnych identyfikatorów że mogę skakać. A jeszcze lepiej, że jest to, że jak duży jest INT będzie ponownie? 32 bity lub cztery bajty. Jak duża jest moja nazwa użytkownika będzie? Maksymalnie? 16 bajtów. Tak więc, jeśli jesteś naprawdę dbanie o wykonanie kodu, że powrót do PSet5, wolisz szukać wartości czterech bajtów lub 16 Wartość bajtu, prawda? To naprawdę jest takie proste. Musisz zrobić cztery razy tyle pracy szukać nazwy użytkowników, ponieważ te 16 bajtów. Tak, trzeba dosłownie porównanie wszystkich 16 bajtów być pewien, tak, to jest nazwa chcę. Podczas gdy dla INT, można zrobić z zaledwie czterech bajtów. I tak na marginesie dla tych, zainteresowany sprzętu komputerowego, Okazuje się można zmieścić coś takiego int lub wartość 32-bitowa w coś zwany rejestr w komputerze CPU, co oznacza, że ​​jest super, super szybki, nawet w najniższym Poziom sprzętu komputera. Tak więc, nie tylko zalety dookoła. Więc, co to oznacza? W rzeczywistości, kiedy jesteś projektowaniu tabeli bazy danych, prawie cały czas idziesz nie mieć tylko dane Ci zależy, ale także coś w rodzaju unikalny identyfikator bo to będzie niech nam robić inne rzeczy. I niech potknąć jeden problem tutaj. Załóżmy, że użytkownicy nie mają tylko nazwy użytkownika i nazwy, ale mają też takie rzeczy jak miast oraz stany i kody pocztowe, co najmniej tutaj w USA. Tak, mam zamiar iść do przodu i po prostu szybko powiedzieć, daj mi jeszcze trzy kolumny na końcu tabeli. I to ma być Miasto, to będzie państwo, i to ma być pocztowy. Teraz typy Miasto, jakie dane powinno to być może? VARCHAR? Nie wiem, co się najdłuższa nazwa miasta jest. Gdzieś w Ameryce, tam Prawdopodobnie niektórzy absurdalnie długie słowo, więc chodźmy z 255, nieco historycznie lub arbitralnie. Państwo to, co chcesz zrobić? Osąd, prawda? Co może najbardziej wydajny? Ile znaków? Może tylko dwa, jeśli to możliwe uciec robi tylko, podobnych, MA w stanie Massachusetts, i tak dalej. Tak, mam zamiar iść wartość CHAR dwóch. Kod pocztowy jest interesująca. Jesteśmy tu w 02138, tak aby sugeruje, powinniśmy wykorzystać to, co? To jest INT, prawda? INT, INT, krótki? Krótki będzie działać. Nie? CHAR lub pięć, ale chcę wew. Dlaczego warto przesunąć na INT? Przekonaj mnie od tego. Co znajduje się w głupie o INT, mój pomysł? Tak. PUBLICZNOŚCI: Weź więcej pamięci. DAVID MALAN: Weź więcej pamięci. Cztery bajty, ale jesteś proponuje kod pocztowy w pięciu bajtów lub ktoś był jako CHAR, który czuje się jak co, to naprawdę nie jest przypadek. Cóż, historia zabawy. Lat temu, kiedy używałem Microsoft Outlook na mój adres e-mail, I w końcu chciałem, aby przełączyć się na Gmaila. I tak, ja eksportowane wszystkie moje kontaktów z programu Outlook jako plik CSV. Oddzielonych przecinkami wartości, które po prostu oznaczało, że Wszyscy moi znajomi mieli imiona i ostatni Nazwy i numery telefonów i kody pocztowe i to wszystko. A potem dokonał Błąd otwierania go Excel, który jest program arkusza kalkulacyjnego, który rozumie plików CSV, jak widzieliśmy. Ale potem, muszę uderzyć, jak, Polecenie lub Control S w jednym punkcie. I Excel podobno w czasie miał cechy, przez co dowolnym czasie widziałem wiele, to starał się być pomocny. A jeśli liczba ta rozpoczęła się zera, to po prostu się ich pozbyć. Dlaczego musisz prowadzi zer na liczb całkowitych? Są pozbawione sensu, matematycznie. Oni nie są bez znaczenia w systemie US Postal. Tak, mam już od lat, do dziś, wciąż mieć przyjaciół, że gdy rzadki przypadek, że potrzebuję kogoś to zajęcia te dni, Ja wciąż widzę, że mieć przyjaciela w Cambridge, Massachusetts, dwie tysiące sto trzydzieści ośmiu. I to jest irytujące, jeśli jesteś próbuje rozwiązać programowo wygenerowania koperty lub po prostu zanotować ją w dół. A to z tego powodu, Wybrałem zły typ danych. Tak, kocham swój pomysł. Użyjmy pola CHAR. Pięć znaków, z wyjątkiem istnieją podstawy rogu. Jeśli nadal wysyłać pocztę, czasem zip kody te dni, są one, jak plus cztery. Tak więc, musimy myślnik, a następnie musimy jeszcze cztery numery. Tak szczerze mówiąc, to mogło przejść na wiele różnych sposobów. Na razie mam zamiar utrzymać to proste, a ja jestem po prostu powiedzieć, że jest to pięć char, a my jesteśmy zamiar przejść całą myślnik oraz cztery. Ale są to rodzaje kompromisów. A może myślisz, że z Te same problemy wynikające z numerami telefonów lub innych dziedzinach. A teraz, to jest rzeczywiście głupi drogi zejść. Załóżmy, że zarówno Rob i ja i Hannah oraz Maria i [? Davon?] I Andy i inne na pracowników wszystkich żyć w Cambridge, Massachusetts, 02138. To rzeczywiście czuć się głupio, że jestem dodanie do mojego tabeli użytkowników, miasto, województwo, i zip. Czemu? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Powiedz jeszcze raz? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Oni zawsze zamiar iść razem, prawda? Gdy okazuje się, zwykliśmy myśleć tak było, dopóki nie wyczerpująco Przeszukałem całe USA, i okazuje się, że są pewne nieścisłości gdzie wiele miast ma to samo na zamek błyskawiczny, co jest dziwne. Ale, jeśli przewidują teraz, że 02138 jest zawsze Cambridge, Massachusetts, Dlaczego na świecie nie można przechowywać w baza danych Cambridge i MA i 02138 dla mnie i dla Hannah i Rob i dla [? Davon?] I dla innych, którzy żyją tutaj, w Cambridge, to całkowicie zbędne. Musimy uciec z zaledwie przechowywania co? Wystarczy kod pocztowy. Ale wtedy, jeśli będziemy przechowywać tylko kod pocztowy, chcę, chyba, na mojej stronie internetowej, aby wiedzieć, gdzie 02138 jest. Tak, potrzebuję innej tabeli. I to jest OK. W rzeczywistości jest to jeden z proces projektowania tabel projektowych że zrobisz w PSet7 oraz przy czym chcesz czynnik wspólne dane. Tak jak byliśmy faktoringu się wspólny kod i faktoringu się powszechne style z CSS tutaj też na bazie gdybym tylko potrzebujesz 02138 jednoznacznie określić czyjąś rodzinnym, nie przechowywać w Cambridge, na co cerować użytkownika w tabeli. Zamiast tego mają oddzielną tabelę o nazwie Zamki, które powinien mieć jakie kolumny? Prawdopodobnie pole ID, tylko dlatego, bo zasady mówimy teraz. Prawdopodobnie pole pocztowy na 02138. A potem pewnie jakie inne kolumny? Miasta i państwa, ale tylko jeden wiersz dla 02138, jeden wiersz do 02139, jeden wiersz do 90210. I to dosłownie wszystkie kody pocztowe znam. Więc teraz, co można zrobić? Stanowi to problem, ponieważ teraz mam dwie tabele. Tak więc, moi użytkownicy są głównie tutaj, ale ich informacje o stanie miasta tutaj. Więc, jak się okazuje z SQL, nie rzeczywiście sposób dołączyć informacje, i zobaczysz to w pset. Ale okazuje się, można zrobić coś takiego. WYBIERZ gwiazda z użytkowników, DOŁĄCZ zamki ON użytkowników dot zip równa zamki dot zip. Który jest trochę rozwlekły, co prawda, ale to po prostu Oznacza wybierz wszystko z Proces podejmowania mój tabeli użytkowników i mój stół zamki. Dołącz je na jednym pola mają w kolumnie. Tak, dosłownie robi coś tak, i daj mi nowa tabela tymczasowa to jest szerszy, który jest większy, który ma wszystkie z kolumny z obu z nich. A to, po prostu, byłoby Składnia robi coś takiego. Tak, jest to przyszłość, ale nie będzie być inne decyzje projektowe, które będziesz trzeba zrobić, nie tylko z indeksami ale również systemem do wyzwań. W rzeczywistości nie jest to wyzwanie w każdym projektowaniu baz danych przy czym czasami dwie osoby mogą chcieć Aby uzyskać dostęp do tych samych rzędów bazy stół. Tak, to jest coś, czego będziesz spotkać w PSet7 również. Ale myślałem, że patrzę na jednego Atak to możliwe w SQL. Jakie są niektóre z Problemy, które mogą się pojawić? Tak, to będzie można spotkać w PSet7. I możemy powiedzieć wprost, co kodowania rozwiązaniem tego problemu jest. Ale jeśli wziąć udział w zajęciach na poziomie wyższym, zwłaszcza w systemach operacyjnych idziesz na spotkanie kwestia atomowości, problem próbuje zrobić wiele rzeczy na raz bez przerwy. A ja myślałem, że wprowadzenie tego Pomysł na PSet7 w metaforze Dowiedziałem się, że w Margo Systemy operacyjne Seltzer w CS164 Klasa lat temu. Załóżmy, że masz jeden z tych akademiku lodówki w pokoju w akademiku lub domu, i masz prawdziwe zamiłowanie do mleka. I tak, wracasz do domu z zajęć jeden dzień, otwierasz lodówkę. O, cholera. Nie ma mleka w lodówce. Więc zamknąć lodówkę, zamknąć drzwi, zablokować akademiku, chodzić za rogiem CVS, stać w kolejce, i rozpocząć sprawdzanie jakiegoś mleka. I to będzie trochę potrwać, bo te cholerne własnej kasy Liczniki wziąć na zawsze i tak używać. Więc w międzyczasie, twój współlokator wróci do domu. On lub ona naprawdę lubi mleka, jak również. Przychodzą do pokoju w akademiku, otworzyć lodówkę, oh, cholernie go. Nie ma więcej mleka. Tak, on lub ona także idzie za rogiem. Ale teraz, ponieważ jest jak dwóch lub trzy lub cztery CVSes pobliżu, zdarzają się, aby przejść do jednego z różne nich na placu. A więc teraz, kilka minut później, oboje wrócić do domu i och, największym problemem zawsze. Teraz masz zbyt dużo mleka dlatego, że pójdzie kwaśny. I lubisz mleka, ale tak naprawdę nie lubi mleka. Więc teraz, to było drogie błąd, ponieważ oboje podjął decyzję w oparciu o wyżej stan jakiejś zmiennej, był w procesie zmieniane przez użytkownika, inicjatorem dostanie mleko. Więc, co jest chyba człowiekiem Rozwiązaniem tego problemu? PUBLICZNOŚCI: [niesłyszalne] DAVID MALAN: Zostaw notatkę, prawda? Zawsze należy zostawić notatkę, jeśli jesteś zaznajomieni z tego show. Tak, jest nas dwóch. Tak, zawsze zostawić notatkę, lub dosłownie zamknąć lodówkę z pewnego rodzaju kłódki lub coś w górę tak. Ale to rzeczywiście będzie Kluczowym problemem w projektowaniu baz danych, zwłaszcza, gdy może mieć wielu przeglądarek, wiele laptopów, wielu użytkowników, wszyscy starają się aktualizowanie informacji na raz. Szczególnie wrażliwe informacje jak informacje finansowe, przy czym w stanie handlu strona jak ty będziesz budować, co, jeśli chcesz sprawdzić, jak dużo pieniędzy masz, a następnie, jeśli masz wystarczająco dużo, kupić akcje? Ale co, jeśli ktoś, kto ma wspólne konto z tobą jest jednocześnie starając kupić trochę akcji? Tak, on lub ona jest sprawdzenie saldo konta, oboje wrócić tego samego odpowiedź, nie ma mleka. Albo oboje wrócić odpowiedzi, masz 100 $ na koncie. Oboje starają się podjąć decyzję do zakupu jednej akcji jakiejś firmy magazynie. A teraz, co się dzieje? Masz dwie akcje? Nie masz żadnych akcji? Problemy mogą pojawić się, jak to. Tak, to mamy do czynienia z tym. Ataki SQL injection, na szczęście, są czymś pomożemy Ci, ale są potwornie wspólne tych dni jeszcze. Tak więc, jest to tylko przykład. I żadnych gwarancji, że System Harvard PIN Opisywany szczególności atakiem. Próbowaliśmy. Ale wiesz, że my mieć pole takiego. I Net ID Yale ma podobny ekran patrząc w tych dniach. I okazuje się, że być może System PIN jest realizowany w PHP. A jeśli to were-- to not-- oni może mieć kod, który wygląda tak. Mają dwie zmienne. Daj mi login i hasło ze zmiennej globalnej Pisanie Super że rozmawialiśmy o tym wcześniej. Może Harvard ma zapytanie jak SELECT gwiazda z użytkowników gdzie nazwa_użytkownika jest równe i hasło dorównuje. I zauważ, że jestem po prostu podłączając go za pomocą Kędzierzawy notacja nawiasów od innych dni, co oznacza po prostu podłącz wartości tutaj. Ja nie używając znak zapytania technika. Nie mam w każdej chwili lub argumenty trzecich. Jestem po prostu dosłownie konstruowania ciąg siebie. Problemem jest jednak to, że jeśli ktoś lubi się scroob, co jest nawiązaniem do filmu, loguje się z czymś takim, a ja usunąć kropki które zwykle pokrywają się haseł, co jeśli on jest Szczególnie szkodliwy i jego hasło może to 12345, na filmie o nazwie "Kosmiczne jaja" ale krytycznie Typy A apostrof po pięciu, to dosłownie słowo lub w przestrzeni, a następnie cytat, koniec cytatu jeden równa się jeden cytat, ale zauważ on pominięty, co? On pominięte cytat z prawej a on pominięty cytat z lewej strony. Bo jeśli atakujący Domniemanie scroob w jest to, że ludzie, którzy napisali kod PHP nie były tak jasne, może po prostu niektóre pojedyncze cytaty po interpolacji zmiennej w nawiasach klamrowych? I tak może być, mógł rodzaju od ukończenia myśl do nich, ale w sposób, który będzie pozwolić mu włamał się do systemu PIN. Innymi słowy, załóżmy że jest to kod i teraz podłączyć co scroob wpisane. I to jest czerwony, bo to jest złe. A tekst podstawowy to co on wpisany, scroob może oszukać serwer Harvardu do konstruowania zapytań SQL Ciąg, który wygląda tak. Hasło wynosi 12345 lub jeden równa się jeden. Wynik, który, logicznie, jest to, że będzie to zalogować scroob w razie jego hasło 12345 lub jeśli jeden równa jeden, który jest oczywiście zawsze prawdziwe, co oznacza scroob zawsze dostaje się. I tak, aż do ustalenia To, co w wielu przypadkach byłoby napisać bardziej defensywnie. Aby użyć coś jak nasze Rzeczywista funkcja kwerendy, które zobaczysz w PSet7, gdzie podłączono coś jak znaki zapytania tutaj. A piękno Funkcja kwerendy, że dać ci to, że chroni przed ich Tak zwane ataki SQL injection, gdzie ktoś oszukiwanie swój kod do wstrzykując swój własny kod SQL. Bo to, co funkcji zapytania dajemy będzie faktycznie zrobić, jeśli używasz składni znak zapytania a drugiego i trzeciego parametru tutaj jest to, co udało się dodać do Wejście pod warunkiem, że użytkownik? Ci, odwrotny ukośnik cytuje. Tak, to ucieka jakiekolwiek potencjalnie niebezpiecznych znaków. Teraz to wygląda dziwnie, ale to nie jest zagrożone Ponieważ nie zmienić logikę więcej dlatego, że całe hasło teraz jeden cytat, który nie jest, w rzeczywistości, hasło scroob jest. Tak, nie było jakieś żarty o tym przez lata. Tak, to było zdjęcie zrobione jakiegoś maniaka w parkingu przy czym może wiedzieć, że niektóre miasta i stany spróbuj zeskanować swoją licencję Płyta do wystawienia rachunku lub aby ticket jeśli przejdziesz przez nie, jak, rzecz e-Z Przełęcz. Tak, domniemywa się, że osoba ta może ludzie piszący system E-Z Przełęczy nie były tak jasne, a może oni po prostu sklejone ciąg, tak, że on lub ona nie mogła złośliwie nie tylko wypełnić swoje myśli, ale w rzeczywistości wykonanie złe polecenie, które nie zostały jeszcze wymienione, ale można się domyślić. Że oprócz usunięcia i wstawiania i aktualizacji i wybierz, istnieje również kluczowe nazywa spadek, co dosłownie usuwa wszystko w bazie danych, która jest szczególnie złe. Możemy powiększyć to, czy jest to trochę trudne do zobaczenia. To teraz, jest znanym kreskówki to cudownie mądry teraz i zrozumiałe. [Śmiech] Tak, fajnie. Rodzaj geeking się. Tak więc te są zatem Ataki SQL injection. I są tak łatwe do uniknięcia przy użyciu prawo lub prawem kod biblioteki. A zobaczysz w PSet7, to Dlatego dajemy Ci funkcję zapytania. Tak, kilka teasery że myśleliśmy, że będziemy wam tu w naszym Pozostałe minut razem. Tak, jak pamiętam z tygodnia zera, mamy wprowadził te dwie żarówki, które są ładne, nie tylko dlatego, są one dość i są kolorowe, ale ponieważ wspierają one coś nazywa API aplikacja Interfejs programowania I w CS50 dotąd, mamy głównie koncentruje się na GET i POST, ale okazuje się, tam inne czasowniki HTTP, takich jak PUT. I rzeczywiście, jest to slajd z tygodnia zera przy czym jeśli napisać kod, który wysyła a la PSet6 żądanie HTTP, które wygląda tak z tym fragmencie tekstu na dole, który nazywany jest JSON, lub JavaScript Object Notation że będziemy rozmawiać o następnym tygodniu, można włączyć lub wyłączyć lub zmienić kolor światła, takich jak te. Tak więc, jeśli CS50 posiada oprócz niektórych z tych żarówek tutaj w New Haven jeśli chcesz pożyczyć ich projektów końcowych, także niektóre Microsoft Zespoły, które są jak zegarki, które można nosić na nadgarstku że podobnie ma API, dzięki czemu może napisać własne oprogramowanie dla nich. Mamy konto w Kod Apple iOS tak że jeśli Apple Oglądaj lub iPhone lub iPad lub iPod, można napisać kod, który faktycznie działa na nich. Mamy całą masę z Arduinos, które maleńkie komputery bez przypadków, w zasadzie, że można podłączyć przez USB, zwykle do własnego komputera Mac lub PC, napisać kod, który działa na nich fizyczne Urządzenia, które często mają czujniki na nich więc można wchodzić w interakcje z realnym światem. Mamy całą masę urządzeń Leap Motion, które są urządzenia USB dla komputerów Mac i Komputery, tu i ponownie, w New Haven. A jeśli go podłączyć do komputera Mac, rzeczywiście można kontrolować komputer pisząc oprogramowanie że poprzez wiązek podczerwieni, domyśla się, gdzie ludzkie ręce, nawet bez dotykania klawiatury. Myśleliśmy, że będziemy dzielić szybkie dostrzec w tym, na przykład. [MUZYKI] Tak, mamy całość kilka tych rzeczy, też nazywa Myo opaski które można umieścić na swoim przedramieniu i wtedy można kontrolować rzeczywisty Świat wirtualny świat lub tak. [MUZYKI] Albo, mamy też pewne Google Tektura, która jest dosłownie, jak, karton można umieścić na swojej twarz, ale slajdów w telefonie do niego tak, że można umieścić szklankę swoje Telefon bardzo blisko oczu. I Google Tektura jest bardzo tanie w $ $ 10 lub 20. I ma małe obiektywy że nieco poza przesunięciem obraz na ekranie dla człowieka oczy, aby dać poczucie głębi tak, że rzeczywiście mają 3D środowiska przed tobą. Mamy też trochę Samsung Ubiór, który jest to bardziej kosztowne wersję tego ale to może podobnie slajdów w Android i daje złudzenie of-- lub dać doświadczenie rzeczywistości wirtualnej. A w naszych dwóch ostatnich minut, myśleliśmy, że będziemy starać się to zrobić. Jeśli mogę wystawać co Colton ma tutaj tylko na zaostrzenie apetytu, pozwól mi iść dalej i rzucać się na dużym ekranie tutaj. Pozwól mi zabić światła. Colton, chcesz iść do przodu i umieścić na swojej komórce na chwilę i chodź do Środek sceny? I chcesz project-- to co Colton widzi. Teraz, Wi-Fi w tutaj jest nie tak silny dla tego urządzenia że jest bardzo atrakcyjne, ale Colton jest dosłownie w tym magicznym futurystycznym miejscu. On widzi tylko jedno zdjęcie. Widzisz jego lewego i prawego oka że jego mózg są szwy razem w trójwymiarowy środowiska na jego twarzy. On po prostu wybiera opcję menu tutaj. I znowu, on sobie ten zestaw słuchawkowy z telefonu Samsung na to, że to bezprzewodowo projekcji do naszego napowietrznych. Teraz jesteś na Marsie, jak sądzę? COLTON: Myślę, że tak. Nie jestem pewien, [niesłyszalne]. [Śmiech] DAVID MALAN: Okazuje się, Mars ma tych menu. COLTON: [niesłyszalne] jakieś fajne miejsca, jeśli chcemy iść to-- DAVID MALAN: Dokąd chcesz jechać? COLTON: [niesłyszalne] DAVID MALAN: I zobaczmy gdzie Colton zabiera nas teraz. COLTON: [niesłyszalne] DAVID MALAN: Tak, nie ma tak wielu różnych miejscach można zrobić samemu. Jest FAPIs poprzez które można Napisać gry i interakcji, które uruchomić, ostatecznie, na telefon. Więc tak naprawdę pisanie telefonu aplikację mobilną. Ale dzięki oprogramowaniu i możliwości graficzne, teraz Colton jest w tym maleńki domek. I na ryzyko przytłaczające się, Colton i będę trzymać się na a na koniec grupy tu dzisiaj jeśli chcesz przyjść i grać. I będziemy je przynieść powrót w przyszłym tygodniu, jak również. Bez ceregieli To wszystko na dzisiaj. Do zobaczenia w przyszłym tygodniu. [MUZYKA - Ragga Twins, "zły człowiek"]