1 00:00:00,000 --> 00:00:02,405 >> [MUSIC nagpe-play] 2 00:00:02,405 --> 00:00:10,439 3 00:00:10,439 --> 00:00:11,980 David MALAN: Ang lahat ng mga karapatan, ito ay CS50. 4 00:00:11,980 --> 00:00:13,740 Ito ay ang katapusan ng linggo alas-otso. 5 00:00:13,740 --> 00:00:15,887 At ngayon, sisimulan namin upang punan ang ilang mga piraso 6 00:00:15,887 --> 00:00:17,720 pagdating sa gusali mga bagay-bagay sa web. 7 00:00:17,720 --> 00:00:20,020 Kaya, isipin ang na sa Lunes gastusin namin ng maraming mas maraming oras 8 00:00:20,020 --> 00:00:22,530 sa PHP, na kung saan ay ang dynamic programming language na 9 00:00:22,530 --> 00:00:26,872 Hinahayaan amin output, bukod sa iba pang mga bagay-bagay, HTML at iba pang mga naturang nilalaman 10 00:00:26,872 --> 00:00:27,830 na makikita gusto naming makita. 11 00:00:27,830 --> 00:00:30,871 Ngunit kami ay hindi talagang tumingin sa kung paano kami ay pagpunta upang mag-imbak ng anumang impormasyon. 12 00:00:30,871 --> 00:00:34,477 Sa katunayan, halos lahat ng anumang ng mga na ang mga super kagiliw-giliw na mga website na binibisita mo ngayon 13 00:00:34,477 --> 00:00:36,560 may ilang mga uri ng database sa likod dulo, right? 14 00:00:36,560 --> 00:00:39,540 Tiyak na nag-iimbak ng Facebook maraming data tungkol sa ating lahat at mga tindahan ng Gmail ang lahat 15 00:00:39,540 --> 00:00:40,210 ng iyong mga email. 16 00:00:40,210 --> 00:00:44,150 >> At ito, maraming iba pang mga site ay hindi lamang static na nilalaman na nagbibigay-kaalaman. 17 00:00:44,150 --> 00:00:45,640 Ito ay talagang dynamic na sa ilang mga paraan. 18 00:00:45,640 --> 00:00:48,480 Magbigay ka ng input, ito update ang mga pahina para sa iba pang mga tao. 19 00:00:48,480 --> 00:00:50,620 Makakakuha ka ng mga mensahe, magpadala sa iyo ng mensahe, at iba pa. 20 00:00:50,620 --> 00:00:54,250 Kaya ngayon, masaya naming mas malapit sa ang underpinnings ng isang proyekto 21 00:00:54,250 --> 00:00:57,330 na makikita mo sumisid sa susunod linggo, CS50 Finance, na 22 00:00:57,330 --> 00:01:00,509 ay talagang pagpunta sa mayroon kang bumuo ng isang bagay na wala sa C, ngunit sa PHP. 23 00:01:00,509 --> 00:01:02,550 Ang isang website na mukhang isang maliit na bagay na tulad nito 24 00:01:02,550 --> 00:01:05,810 na nagbibigay-daan upang bumili at magbenta mga stock na talagang 25 00:01:05,810 --> 00:01:09,044 pagpunta sa gumuhit sa real time data stock mula sa Yahoo Finance. 26 00:01:09,044 --> 00:01:11,960 At kaya sa huli, ikaw ay magkakaroon ng ilusyon para sa iyong sarili at para sa mga gumagamit 27 00:01:11,960 --> 00:01:14,550 na ang tunay na ikaw ay bumibili at nagbebenta stock at pagkuha ng halos real time 28 00:01:14,550 --> 00:01:16,800 update, sa pamamahala ng isang portfolio, ang lahat ng na 29 00:01:16,800 --> 00:01:20,310 ay pagpunta sa nangangailangan ng pagkakaroon, sa huli, isang database ng mga gumagamit. 30 00:01:20,310 --> 00:01:23,330 >> Kaya, sa iyong sariling mga salita, lalo na kung ikaw ay hindi 31 00:01:23,330 --> 00:01:25,670 sobrang pamilyar sa computer science o mga database, kung ano 32 00:01:25,670 --> 00:01:30,790 alam mo ang isang database upang maging sa ngayon, sa nontechnical termino? 33 00:01:30,790 --> 00:01:32,300 Ano ito? 34 00:01:32,300 --> 00:01:36,882 Paano mo ilalarawan ang mga ito sa isang kasama sa kuwarto o kaibigan? 35 00:01:36,882 --> 00:01:40,100 >> Madla: [hindi marinig] impormasyon [hindi marinig] 36 00:01:40,100 --> 00:01:44,430 >> David MALAN: Kaya, ang isang listahan ng impormasyon, o isang store-- ng isang listahan ng impormasyon 37 00:01:44,430 --> 00:01:47,160 na maaari mong isaalang-imbak tungkol sa isang bagay, tulad ng isang user. 38 00:01:47,160 --> 00:01:50,190 At ano ang mga gumagamit ay may nauugnay sa mga ito? 39 00:01:50,190 --> 00:01:53,160 Kung ikaw ay isang user sa Facebook o Gmail, ano ang mga katangian 40 00:01:53,160 --> 00:01:54,940 na lahat tayo gumagamit ay may? 41 00:01:54,940 --> 00:01:58,530 Tulad ng, kung ano ang maaaring maging ang ilan sa mga hanay sa spreadsheet na kung saan namin 42 00:01:58,530 --> 00:01:59,390 Tinukoy sa nakaraan? 43 00:01:59,390 --> 00:02:01,140 Dahil muli, maaari mong tingin ng isang database 44 00:02:01,140 --> 00:02:05,810 talagang bilang fancy Excel file o Google Spreadsheet o Apple Numbers file. 45 00:02:05,810 --> 00:02:08,280 >> Kaya, ano ang tingin mo sa kapag sa tingin mo ng isang user? 46 00:02:08,280 --> 00:02:11,290 Ano ang mayroon sila? 47 00:02:11,290 --> 00:02:11,790 Ano yan? 48 00:02:11,790 --> 00:02:12,470 >> Madla: Ang isang pangalan. 49 00:02:12,470 --> 00:02:13,303 >> David MALAN: Isang pangalan. 50 00:02:13,303 --> 00:02:16,840 Kaya kung pangalan, tulad ng, David Malan ay magiging ang pangalan ng ilang mga user. 51 00:02:16,840 --> 00:02:17,980 Ano pa ang magkaroon ng isang user? 52 00:02:17,980 --> 00:02:18,770 >> Madla: Isang ID. 53 00:02:18,770 --> 00:02:19,561 >> David MALAN: Isang ID. 54 00:02:19,561 --> 00:02:23,320 Kaya, tulad ng isang numero ng ID, tulad ng iyong Harvard ID o ang iyong Yale Net ID o mga katulad. 55 00:02:23,320 --> 00:02:24,923 Ano pa ang maaaring magkaroon ng isang user? 56 00:02:24,923 --> 00:02:25,890 >> Madla: Password. 57 00:02:25,890 --> 00:02:29,240 >> David MALAN: Ang isang password, marahil ng isang address, marahil ng isang numero ng telepono, marahil 58 00:02:29,240 --> 00:02:30,050 ng isang email address. 59 00:02:30,050 --> 00:02:32,640 Kaya, may kumpol ng mga patlang at ang maaaring uri ng spiral ng control 60 00:02:32,640 --> 00:02:34,760 mabilis sa lalong madaling simulan mo realizing, oh, ni-imbak ito ipaalam 61 00:02:34,760 --> 00:02:36,190 at ni-imbak na ito at na ipaalam. 62 00:02:36,190 --> 00:02:37,657 >> Ngunit paano namin talagang gawin iyon? 63 00:02:37,657 --> 00:02:39,740 Kaya muli, ang kaisipan modelo na magkaroon ng para sa araw na ito bilang namin 64 00:02:39,740 --> 00:02:42,320 sumisid sa aktwal na SQL, Nakabalangkas na Query Wika, 65 00:02:42,320 --> 00:02:44,186 ay isang database na ganito ang hitsura. 66 00:02:44,186 --> 00:02:45,310 Ito ay mga hilera lamang at mga haligi. 67 00:02:45,310 --> 00:02:48,309 At maaari mong isipin Google Spreadsheets o anumang bilang ng iba pang mga program. 68 00:02:48,309 --> 00:02:52,130 Ngunit kung ano ang key tungkol sa MySQL, na kung saan ay ang database software na kami ay pagpunta upang gamitin, 69 00:02:52,130 --> 00:02:54,920 ang malayang lantaran available-- gumagamit Facebook 70 00:02:54,920 --> 00:02:59,200 ito at anumang bilang ng iba pang mga websites-- database ng mga tindahan ng mga bagay relationally. 71 00:02:59,200 --> 00:03:01,770 At isang pamanggit database ito ay nangangahulugan lamang na ang isa literal 72 00:03:01,770 --> 00:03:03,672 nag-iimbak ng data nito sa hanay at haligi. 73 00:03:03,672 --> 00:03:04,630 Ito ay kasing simple ng iyon. 74 00:03:04,630 --> 00:03:07,230 >> Kaya, kahit na isang bagay tulad ng Oracle na maaari kang magkaroon ng karaniwang naririnig ng 75 00:03:07,230 --> 00:03:08,271 ay isang pamanggit database. 76 00:03:08,271 --> 00:03:10,929 At sa ilalim ng hood, ito tindahan ng data sa mga hanay at haligi. 77 00:03:10,929 --> 00:03:12,970 At Oracle Sisingilin ka ng isang maraming pera upang gawin iyon, 78 00:03:12,970 --> 00:03:15,550 samantalang MySQL singil wala ka para sa pareho. 79 00:03:15,550 --> 00:03:18,790 Kaya, SQL ay pagpunta upang ibigay sa amin hindi bababa sa apat na mga operasyon. 80 00:03:18,790 --> 00:03:23,190 Ang kakayahan na piliin ang data, tulad ng read data, ipasok, tanggalin, at i-update ang data. 81 00:03:23,190 --> 00:03:25,525 Sa ibang salita, ang mga ito ay talaga ang apat na key operasyon 82 00:03:25,525 --> 00:03:28,950 na pagpunta sa-daan sa amin upang baguhin bagay-bagay sa mga hanay at haligi. 83 00:03:28,950 --> 00:03:33,250 >> Ang tool na gagamitin namin ngayon lalo na upang malaman ang SQL at upang i-play dito 84 00:03:33,250 --> 00:03:34,627 ay tinatawag na muli PHP MyAdmin. 85 00:03:34,627 --> 00:03:35,460 Ito ay based tool web. 86 00:03:35,460 --> 00:03:38,200 Kabuuang pagkakataon na ito ay nakasulat sa PHP. 87 00:03:38,200 --> 00:03:42,400 Ngunit ito ay pagpunta sa bigyan kami ng isang graphical user interface kaya na namin maaaring aktwal 88 00:03:42,400 --> 00:03:46,054 lumikha ng mga hanay at haligi at pagkatapos ay makipag-usap sa kanila sa pamamagitan ng code. 89 00:03:46,054 --> 00:03:47,970 Kaya, ngayon simulan upang ipaalam ano ang tingin ko ay lantaran 90 00:03:47,970 --> 00:03:51,000 uri ng masaya proseso ng gusali sa likod ng pagtatapos ng mga website, 91 00:03:51,000 --> 00:03:54,580 ang mga bahagi na hindi gumagamit makita, ngunit tiyak na ang pag-aalaga tungkol sa, 92 00:03:54,580 --> 00:03:56,170 dahil iyon sa halip data ng pagpunta. 93 00:03:56,170 --> 00:03:59,570 Kaya, katulad sa C at isang maliit na mas mababa tulad ng PHP, 94 00:03:59,570 --> 00:04:04,954 SQL, o sa isang database na sumusuporta sa SQL, ay may mga uri ng hindi bababa sa mga data 95 00:04:04,954 --> 00:04:05,870 at mga kumpol ng iba. 96 00:04:05,870 --> 00:04:08,107 Pansamantalang trabaho, VARCHAR, INT, BIGINT, Decimal, at DATETIME. 97 00:04:08,107 --> 00:04:09,940 At may isang buong grupo ng iba pang mga tampok, 98 00:04:09,940 --> 00:04:11,940 ngunit sabihin gawin ito sa pamamagitan ng ipaalam paraan ng aktwal na halimbawa. 99 00:04:11,940 --> 00:04:16,450 >> Pupunta ako sa pumunta sa CS50 IDE kung saan, nang maaga, ako naka-log in 100 00:04:16,450 --> 00:04:19,372 at iyong binisita ko rin ang isang URL para sa ang kasangkapan na tinatawag na PHP MyAdmin. 101 00:04:19,372 --> 00:04:22,580 At sa set problema pitong, sasabihin namin sa sa iyo nang eksakto kung paano makapunta sa interface na ito 102 00:04:22,580 --> 00:04:23,200 din. 103 00:04:23,200 --> 00:04:25,640 Sa itaas na kaliwang sulok, paunawa sinasabi nito magbigay ng panayam. 104 00:04:25,640 --> 00:04:27,610 At iyon ay nangangahulugan lamang na nang maaga, nilikha ko 105 00:04:27,610 --> 00:04:31,360 isang walang laman na database na tinatawag na lecture na ay wala pang mga spreadsheet sa loob nito. 106 00:04:31,360 --> 00:04:32,600 Walang mga hanay at haligi. 107 00:04:32,600 --> 00:04:34,308 Dahil ang unang bagay na namin ang pagpunta sa gawin 108 00:04:34,308 --> 00:04:37,100 ay magsisimula na lumikha ng isang talahanayan na ang pagpunta sa tindahan ng aming mga gumagamit. 109 00:04:37,100 --> 00:04:39,100 >> Kaya, literal higit sa dito sa kanan, ako 110 00:04:39,100 --> 00:04:42,070 pagpunta sa sabihin sa database Gusto ko ng isang talahanayan na tinatawag na mga gumagamit. 111 00:04:42,070 --> 00:04:44,845 Kaya, ito ay tulad ng mga file na ako nais na tindahan ng lahat ng aking mga data sa. 112 00:04:44,845 --> 00:04:45,720 At kung gaano karaming mga haligi? 113 00:04:45,720 --> 00:04:47,740 Well, panatilihin ito simple para sa ngayon. 114 00:04:47,740 --> 00:04:51,855 Gusto ko lang mag-imbak tulad ng isang username at isang pangalan para sa isang user. 115 00:04:51,855 --> 00:04:53,020 Sisimulan naming maliit. 116 00:04:53,020 --> 00:04:55,370 Kaya, gusto kong total dalawang haligi. 117 00:04:55,370 --> 00:04:57,360 At ako pagpunta sa magpatuloy at i-click ang Go. 118 00:04:57,360 --> 00:04:59,210 At pagkatapos ay, para sa mga haligi, kung ano ako pagpunta 119 00:04:59,210 --> 00:05:04,576 upang do-- kung ito internet cooperates-- lahat ng karapatan, 120 00:05:04,576 --> 00:05:05,950 kaya kami ay pagpunta sa subukan muli. 121 00:05:05,950 --> 00:05:09,180 Pupunta ako upang lumikha ng isang talahanayan na tinatawag na Mga user na may dalawang mga haligi, i-click ang Go, OK. 122 00:05:09,180 --> 00:05:10,520 Ngayon nakuha ito talagang mabilis namin. 123 00:05:10,520 --> 00:05:12,065 Salamat sa iyo, masyadong magaling. 124 00:05:12,065 --> 00:05:14,440 Lahat ng karapatan, kaya kung ano ang gusto namin mga hanay na ito ay tinatawag na? 125 00:05:14,440 --> 00:05:16,080 >> Kaya, ang isa ay pagpunta sa ay tinatawag Username. 126 00:05:16,080 --> 00:05:19,480 Kaya, ang lahat ng nakikita ko here-- at ang interface lantaran ang makakakuha ng isang maliit na pangit sa huli, 127 00:05:19,480 --> 00:05:21,270 sa sandaling ikaw simulan ang pag-type sa lahat ng data na ito. 128 00:05:21,270 --> 00:05:27,450 Ngunit kung ano ang magaling na uri ng paradoxically, ako ang paglikha ng mga hanay, 129 00:05:27,450 --> 00:05:29,977 ngunit ang mga tool ay kamangmangan inilatag ito sa mga hilera 130 00:05:29,977 --> 00:05:31,560 upang ang maaari kong i-configure ang mga hanay na ito. 131 00:05:31,560 --> 00:05:33,550 Kaya, may dalawang mga patlang doon sa ilalim ng Pangalan. 132 00:05:33,550 --> 00:05:36,180 At ang isa sa mga patlang na ito ako nais na tinatawag na Username, 133 00:05:36,180 --> 00:05:38,000 at ang iba pang mga field na gusto kong tumawag ng Pangalan. 134 00:05:38,000 --> 00:05:40,340 >> At ngayon kailangan kong piliin ang uri ng data para sa mga bagay na ito. 135 00:05:40,340 --> 00:05:42,330 Kaya, habang sa Excel at Google Spreadsheets, 136 00:05:42,330 --> 00:05:45,531 kung nais mo ang isang haligi, literal mo i-type lamang Pangalan o Username, pindutin ang Enter. 137 00:05:45,531 --> 00:05:48,030 Siguro mo itong gawing bold face para lamang sa kaliwanagan, ngunit na ito. 138 00:05:48,030 --> 00:05:50,140 Hindi mo tukuyin ang mga uri ng haligi. 139 00:05:50,140 --> 00:05:53,790 Ngayon sa Google Spreadsheets o Excel, ikaw Maaaring tukuyin kung paano ang data ay nai-render. 140 00:05:53,790 --> 00:05:58,120 Ikaw ay maaaring pumunta sa menu ng Format, at ikaw maaaring tukuyin ipakita ito tulad ng dollar sign, 141 00:05:58,120 --> 00:05:59,900 ipakita ito tulad ng isang lumulutang na halaga ng point. 142 00:05:59,900 --> 00:06:01,990 >> Kaya, ito ay katulad sa espiritu sa na kung ano ang hindi namin tungkol sa upang gawin, 143 00:06:01,990 --> 00:06:04,740 ngunit ito ay aktwal na pagpunta sa lakas ang data na maging isang tiyak na uri. 144 00:06:04,740 --> 00:06:07,750 Ngayon, kahit isang sandali na ang nakaraan ako sinabi may lamang ng ilang mga uri ng data, 145 00:06:07,750 --> 00:06:11,120 may tunay na isang buong maraming, at sila ay 146 00:06:11,120 --> 00:06:12,910 sa iba't ibang grado ng pagtitiyak. 147 00:06:12,910 --> 00:06:14,970 At bilang isang bukod, mo Maaari ring gawin magarbong mga bagay-bagay 148 00:06:14,970 --> 00:06:17,520 tulad geometries storage sa loob ng isang database. 149 00:06:17,520 --> 00:06:19,250 Maaari mong itabi ang mga bagay-bagay tulad ng mga coordinate sa GPS 150 00:06:19,250 --> 00:06:22,420 at talagang mahanap, mathematically, puntos na malapit sa iba. 151 00:06:22,420 --> 00:06:24,128 Ngunit kami ay pagpunta sa panatilihin ito sobrang simple 152 00:06:24,128 --> 00:06:26,800 at pumunta sa dito, ang lahat ng mga ang tinatawag na uri string. 153 00:06:26,800 --> 00:06:29,240 >> Kaya, narito ang isang listahan ng isang buong grupo ng mga opsyon. 154 00:06:29,240 --> 00:06:32,740 Pansamantalang trabaho, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. 155 00:06:32,740 --> 00:06:34,110 At ito ay uri ng napakalaki. 156 00:06:34,110 --> 00:06:37,610 At sa kasamaang palad, medyo paradoxically sa C, 157 00:06:37,610 --> 00:06:40,120 isang pansamantalang trabaho ay hindi talagang isang pansamantalang trabaho. 158 00:06:40,120 --> 00:06:44,170 Kung tinukoy mo sa isang database na i-type ang iyong data ay pansamantalang trabaho, 159 00:06:44,170 --> 00:06:47,390 na nangangahulugan na oo, ito ay isang Pansamantalang trabaho, ngunit ito ay isa o higit pang mga karakter. 160 00:06:47,390 --> 00:06:49,630 At kailangan mong tukuyin kung gaano karaming karakter na gusto mo. 161 00:06:49,630 --> 00:06:51,636 Kaya, ano ang isang tipikal haba para sa isang username? 162 00:06:51,636 --> 00:06:52,760 Kadalasan ay may hangganan? 163 00:06:52,760 --> 00:06:53,920 >> Madla: [hindi marinig] 164 00:06:53,920 --> 00:06:55,050 >> David MALAN: 16 siguro? 165 00:06:55,050 --> 00:06:55,990 Parang ganun. 166 00:06:55,990 --> 00:06:57,948 Alam mo, pabalik sa araw, ginamit ito upang maging walo. 167 00:06:57,948 --> 00:07:00,289 Minsan ito ay 16, kung minsan ito ay mas higit na. 168 00:07:00,289 --> 00:07:02,080 At ito, ito ay hindi gumagana ibig sabihin bigyan ako ng isa char. 169 00:07:02,080 --> 00:07:04,730 Ang ibig sabihin nito ko kailangang tiyakin ang haba ng field, 170 00:07:04,730 --> 00:07:07,402 at ngayon maaari kong sabihin isang bagay tulad ng 16. 171 00:07:07,402 --> 00:07:08,610 At doon ay isang kalakalan off dito. 172 00:07:08,610 --> 00:07:11,360 Kaya, kami ay makikita sa ilang sandali na ito ay nangangahulugan ng isa, 173 00:07:11,360 --> 00:07:14,620 bawat username ay kailangang 16 character. 174 00:07:14,620 --> 00:07:18,720 Ngunit maghintay ng isang minuto, M-A-L-A-N. Kung iyon aking username at gumagamit ako ng limang lamang, 175 00:07:18,720 --> 00:07:23,070 kung ano ang nais mong imungkahi na ang database upang gawin para sa iba pang 11 na mga character na 176 00:07:23,070 --> 00:07:24,471 Nakareserba ko na espasyo para sa? 177 00:07:24,471 --> 00:07:25,220 Ano ang gagawin mo? 178 00:07:25,220 --> 00:07:26,480 >> Madla: [hindi marinig] 179 00:07:26,480 --> 00:07:27,160 >> David MALAN: Oo, lamang gumawa ng mga ito ang lahat ng null. 180 00:07:27,160 --> 00:07:28,290 Gumawa ng mga ito na mga puwang. 181 00:07:28,290 --> 00:07:30,816 Ngunit marahil ay null, kaya ang isang pulutong ng backslash zero. 182 00:07:30,816 --> 00:07:33,190 Kaya, sa isang banda, na namin ngayon ginawa sigurado na ang aking username 183 00:07:33,190 --> 00:07:34,780 ay maaaring maging hindi hihigit sa 16 character. 184 00:07:34,780 --> 00:07:37,590 At tingnan ang bahagi ng na na kung ako ay isang tunay na matagal na pangalan 185 00:07:37,590 --> 00:07:39,940 o nais ng isang tunay na mahaba username tulad ng ilan sa inyo 186 00:07:39,940 --> 00:07:44,840 ay maaaring magkaroon ng isang lalaki na sa kolehiyo o sa Yale.edu, hindi ka maaaring magkaroon ng isa. 187 00:07:44,840 --> 00:07:47,177 At kaya sa katunayan, kung na sa iyo kailanman nakarehistro para sa isang website 188 00:07:47,177 --> 00:07:49,385 at kumuha ka yelled sa sinasabi iyong password ay masyadong mahaba 189 00:07:49,385 --> 00:07:52,710 o ang iyong username ay masyadong mahaba, ito ay dahil lang sa isang programmer, kapag 190 00:07:52,710 --> 00:07:55,500 pag-configure ng kanyang database, nagpasya na ang patlang na ito ay 191 00:07:55,500 --> 00:07:57,150 na hindi na kaysa sa haba. 192 00:07:57,150 --> 00:08:00,580 >> Lahat ng karapatan, kaya kung ano kung magpatuloy namin sa pangalan? 193 00:08:00,580 --> 00:08:05,240 Gaano katagal ang dapat isang Pangalan ng tipikal na tao ang dapat? 194 00:08:05,240 --> 00:08:07,492 Gaano karaming mga character, 16? 195 00:08:07,492 --> 00:08:09,450 Ako sa paghula ng dati namin makahanap ng isang tao sa kuwartong ito 196 00:08:09,450 --> 00:08:13,210 kung saan sa pamamagitan ng kanyang unang plus huling pangalan ay mas mahaba kaysa sa 16 mga character. 197 00:08:13,210 --> 00:08:14,850 Kaya, ano ang mas mahusay kaysa sa na, 17? 198 00:08:14,850 --> 00:08:17,040 18? 199 00:08:17,040 --> 00:08:18,830 25? 200 00:08:18,830 --> 00:08:20,350 Mas malaki? 201 00:08:20,350 --> 00:08:20,980 30? 202 00:08:20,980 --> 00:08:21,855 >> Madla: [hindi marinig] 203 00:08:21,855 --> 00:08:23,700 David MALAN: 5,000, oh aking Diyos. 204 00:08:23,700 --> 00:08:26,309 Kaya, na maaring isang disenteng itaas na nakagapos, ay dapat namin sabihin. 205 00:08:26,309 --> 00:08:28,350 At dito namin uri ng may upang gumawa ng isang paghatol na tawag. 206 00:08:28,350 --> 00:08:30,400 Tulad ng, hindi na tamang sagot dito. 207 00:08:30,400 --> 00:08:32,740 Walang-hanggan ay hindi lubos na posible, dahil hindi namin kalaunan 208 00:08:32,740 --> 00:08:34,781 pagpunta sa have-- hindi namin pagpunta sa maubusan ng memory. 209 00:08:34,781 --> 00:08:36,909 Kaya, kami ay gumawa ng isang paghatol call sa ilang mga punto. 210 00:08:36,909 --> 00:08:41,010 >> Napaka-karaniwang ay, halimbawa, upang use-- at ipaalam sa akin tukuyin char dito 211 00:08:41,010 --> 00:08:46,050 bilang before-- 255 ay literal ang mataas na limitasyon sa database na ito software 212 00:08:46,050 --> 00:08:46,700 Taong nakalipas. 213 00:08:46,700 --> 00:08:48,575 At ito, ang isang pulutong ng mga tao Gusto lamang sabihin, fine. 214 00:08:48,575 --> 00:08:49,420 255 ay ang limitasyon. 215 00:08:49,420 --> 00:08:50,620 Gamitin lang ang maximum Hayaan. 216 00:08:50,620 --> 00:08:51,870 At ito ay medyo katawa-tawa. 217 00:08:51,870 --> 00:08:55,060 Tulad ng, kung nagta-type ka ng isang tao pangalan para sa 200 plus na mga character, 218 00:08:55,060 --> 00:08:56,140 na ang isang maliit na walang katotohanan. 219 00:08:56,140 --> 00:08:59,624 >> Subalit, tandaan na ASCII ay hindi ang tanging sistema para sa mga character. 220 00:08:59,624 --> 00:09:01,540 At ito, lalo na sa isang pulutong ng mga Asian na mga wika 221 00:09:01,540 --> 00:09:04,248 kung saan may mga character ay hindi natin ipahayag sa keyboard tulad ng aking US 222 00:09:04,248 --> 00:09:08,209 keyboard, ilang mga character talaga tumagal ng hanggang 16 bits sa halip ng walong bits. 223 00:09:08,209 --> 00:09:10,250 At ito, ito ang tunay na ay hindi lahat na hindi makatwiran 224 00:09:10,250 --> 00:09:12,250 na kailangan namin ng higit pang space kung gusto naming upang magkasya 225 00:09:12,250 --> 00:09:16,252 mas malaking mga character kaysa sa tunay US Centric mga ko na tended upang talakayin. 226 00:09:16,252 --> 00:09:17,460 Kaya, kailangan namin ng ilang upper bound. 227 00:09:17,460 --> 00:09:21,470 Hindi ko alam kung ano ang pinakamahusay na isa ay, ngunit 255 ay karaniwang isang karaniwang isa. 228 00:09:21,470 --> 00:09:22,700 25 nararamdaman mababa. 229 00:09:22,700 --> 00:09:23,857 16, 32 pakiramdam mababa. 230 00:09:23,857 --> 00:09:25,690 Gusto ko magkamali sa gilid ng isang bagay na mas mataas. 231 00:09:25,690 --> 00:09:27,330 Subalit mayroong isang kalakalan off, gaya ng lagi. 232 00:09:27,330 --> 00:09:31,902 Ano ang, marahil, halata trade off ng mapagtipid 255 na karakter 233 00:09:31,902 --> 00:09:33,360 para sa lahat ng pangalan sa aking database? 234 00:09:33,360 --> 00:09:34,230 >> Madla: [hindi marinig] 235 00:09:34,230 --> 00:09:34,510 >> David MALAN: Ano iyon? 236 00:09:34,510 --> 00:09:35,430 >> Madla: [hindi marinig] 237 00:09:35,430 --> 00:09:37,138 >> David MALAN: Ito ay isang maraming memorya, di ba? 238 00:09:37,138 --> 00:09:42,280 M-A-L-A-N. Ako ay nasayang lamang 250 mga character upang i-imbak lang ang aking pangalan 239 00:09:42,280 --> 00:09:46,000 defensively, sa kaso ng isang tao sa klase ay may isang tunay na matagal na pangalan. 240 00:09:46,000 --> 00:09:47,940 Na tila tulad ng isang hindi tumpak tradeoff. 241 00:09:47,940 --> 00:09:52,040 >> Kaya, ito ay lumiliko out na SQL, database na ito ng wika, 242 00:09:52,040 --> 00:09:55,480 tunay na sumusuporta sa isang bagay tinatawag VARCHAR, o Variable char. 243 00:09:55,480 --> 00:09:59,390 At ito ay uri ng magaling sa na ito ay nagbibigay-daan sa iyo upang tukuyin hindi isang nakapirming 244 00:09:59,390 --> 00:10:01,900 width, ngunit sa halip, ang isang variable na lapad. 245 00:10:01,900 --> 00:10:05,060 At higit na partikular, ang isang maximum na lapad ng field. 246 00:10:05,060 --> 00:10:08,901 Kaya, ito ay nangangahulugan na ang isang pangalan na maaari na hindi hihigit sa 250 mga character, 247 00:10:08,901 --> 00:10:10,150 ngunit ito ay tiyak na magiging mas kaunti. 248 00:10:10,150 --> 00:10:11,733 At ang mga database ay magiging matalino. 249 00:10:11,733 --> 00:10:14,860 Kung alam mong ilagay sa M-A-L-A-N, lamang ito ay pagpunta upang gamitin ang limang, 250 00:10:14,860 --> 00:10:18,120 siguro anim bytes para tulad ng isang trailing null character, 251 00:10:18,120 --> 00:10:23,330 at hindi gastusin ng isang karagdagang 249 o 250 bytes kung hindi kinakailangan. 252 00:10:23,330 --> 00:10:27,380 >> Kaya, ito ay tila tulad ng dapat kong Sinimulan sa kuwentong ito. 253 00:10:27,380 --> 00:10:29,140 Ngunit may palaging isang tradeoff. 254 00:10:29,140 --> 00:10:33,024 Kaya, sa isang banda, ang isang username na hindi ko na tinukoy na hard code sa 16, 255 00:10:33,024 --> 00:10:34,940 at marahil na ay hindi ang karapatan na tawag, marahil ito 256 00:10:34,940 --> 00:10:40,040 ay, ngunit bakit hindi gamitin Varchars para sa lahat? 257 00:10:40,040 --> 00:10:42,020 >> Ito ay umiiral para sa isang kadahilanan. 258 00:10:42,020 --> 00:10:46,200 Bakit hindi gamitin varchars para sa bawat field ang haba hindi mo alam nang maaga 259 00:10:46,200 --> 00:10:48,180 kung ito tila na maging isang mahusay na bagay, di ba? 260 00:10:48,180 --> 00:10:50,482 Gamitin lamang ang mas maraming espasyo bilang kailangan mo ng hanggang sa ang limitasyon na ito? 261 00:10:50,482 --> 00:10:51,271 >> Madla: Mas mabagal. 262 00:10:51,271 --> 00:10:52,146 David MALAN: Speller? 263 00:10:52,146 --> 00:10:53,120 Madla: Ginagawang mas mabagal? 264 00:10:53,120 --> 00:10:53,970 David MALAN: Oh, ito ay mas mabagal. 265 00:10:53,970 --> 00:10:55,720 Good, na halos palaging ang sagot, lantaran. 266 00:10:55,720 --> 00:10:56,520 Tulad ng, kung ano ang mga tradeoff? 267 00:10:56,520 --> 00:10:58,570 Ito ay alinman sa may bayad na higit pang espasyo o mas maraming oras ang mga gastos. 268 00:10:58,570 --> 00:11:00,111 Kaya, sa kasong ito, maaaring ito ay mas mabagal. 269 00:11:00,111 --> 00:11:00,920 Bakit? 270 00:11:00,920 --> 00:11:05,830 >> Madla: [hindi marinig] pagtukoy [hindi marinig]. 271 00:11:05,830 --> 00:11:06,640 >> David MALAN: Magandang. 272 00:11:06,640 --> 00:11:09,670 Kaya, maaari mong isipin ang mula sa kahit na PSED5, paglalaro kasama ang iyong diskarte 273 00:11:09,670 --> 00:11:12,750 sa diksyunaryo, kung mayroon ka na magtalaga ng memory dynamic o panatilihin 274 00:11:12,750 --> 00:11:14,630 lumalaking isang buffer, na aktwal na maaaring maging mabagal. 275 00:11:14,630 --> 00:11:16,963 Kung mayroon kang tumawag sa malloc sa ilalim ng hood at baka 276 00:11:16,963 --> 00:11:19,610 na kung ano ang ginagawa MySQL, kaya tiyak na maaaring ang kaso. 277 00:11:19,610 --> 00:11:22,430 At kung sa tingin mo na paraan bumalik sa PSet-- o kahit 278 00:11:22,430 --> 00:11:26,340 dalawang linggo, kapag kami gumawa ng mga bagay tulad ng binary paghahanap o kahit linear paghahanap, 279 00:11:26,340 --> 00:11:30,690 isa sa mga magagandang bagay tungkol sa bawat salita sa isang database o bawat salita sa isang haligi 280 00:11:30,690 --> 00:11:33,690 pagiging eksakto ang parehong haba, kahit kung ang isang buong grupo ng mga character 281 00:11:33,690 --> 00:11:37,390 ay blangko, ay na maaari mong gamitin ang random access sa iyong data, i-right? 282 00:11:37,390 --> 00:11:40,310 >> Kung alam mo na ang bawat salita ay 16 character ang layo, 283 00:11:40,310 --> 00:11:46,460 maaari mong gamitin ang pointer aritmetika, para sa magsalita, at pumunta sa amin 16, 32, 48, 64, 284 00:11:46,460 --> 00:11:49,589 at maaari mo lamang tumalon agad gamit ang arithmetic 285 00:11:49,589 --> 00:11:51,130 sa alinman sa mga salitang ito sa iyong database. 286 00:11:51,130 --> 00:11:54,280 Sapagkat kung ito ay isang VARCHAR, ano ang gagawin mo sa halip ay may sa gawin? 287 00:11:54,280 --> 00:11:55,960 >> [PHONE tugtog] 288 00:11:55,960 --> 00:11:58,680 >> Kung ito ay isang VARCHAR, ikaw hindi maaaring gumamit ng random access. 289 00:11:58,680 --> 00:12:01,341 Ano ang kailangan upang tumingin para sa o gawin? 290 00:12:01,341 --> 00:12:01,840 Oo? 291 00:12:01,840 --> 00:12:03,240 >> Madla: [hindi marinig] 292 00:12:03,240 --> 00:12:04,310 >> David MALAN: Hanapin sa pamamagitan ng whole-- trace 293 00:12:04,310 --> 00:12:06,518 sa pamamagitan ng buong listahan naghahanap ng kung ano, malamang? 294 00:12:06,518 --> 00:12:08,356 Anong uri ng mga espesyal na halaga? 295 00:12:08,356 --> 00:12:09,230 Madla: [hindi marinig] 296 00:12:09,230 --> 00:12:11,105 David MALAN: Naghahanap para sa mga null terminators 297 00:12:11,105 --> 00:12:13,637 na maghiwalay ang paghihiwalay ng mga salita. 298 00:12:13,637 --> 00:12:15,720 Kaya muli, isang tradeoff, at walang tamang sagot. 299 00:12:15,720 --> 00:12:18,380 Ngunit ito ay kung saan, lalo na kapag nakakuha ng iyong mga gumagamit na maging maraming 300 00:12:18,380 --> 00:12:21,700 at ang iyong pag-load sa iyong server, ang bilang ng mga tao gamit ang mataas na ito ay makakakuha ng, 301 00:12:21,700 --> 00:12:23,650 ang mga ito ay aktwal na nontrivial desisyon. 302 00:12:23,650 --> 00:12:26,640 Kaya, maaari naming mag-iwan ang mga ito bilang na ito, ngunit ni mag-scroll pababa sa ibabaw sa kanan ipaalam 303 00:12:26,640 --> 00:12:27,332 dito. 304 00:12:27,332 --> 00:12:30,290 Ngayon, may isang pares ng mga haligi kung saan mayroon kaming upang gumawa ng isang paghatol na tawag. 305 00:12:30,290 --> 00:12:35,170 Ba magkaroon ng kahulugan upang payagan ang isang gumagamit pangalan, username ng isang user o ng isang user 306 00:12:35,170 --> 00:12:36,370 pangalan na, upang maging null? 307 00:12:36,370 --> 00:12:37,610 Iyon ay, lamang blangko. 308 00:12:37,610 --> 00:12:40,360 Nararamdaman ng isang maliit na walang saysay, kaya hindi ako hindi pagpunta upang suriin ang mga kahon. 309 00:12:40,360 --> 00:12:42,670 Ngunit ito ay lumiliko out sa isang database, maaari mong sabihin, 310 00:12:42,670 --> 00:12:44,620 ang isang tao ay maaaring opsyonal na ito ay may halaga. 311 00:12:44,620 --> 00:12:47,180 Ang hanay na ito ay walang sa tunay na maging doon. 312 00:12:47,180 --> 00:12:48,570 >> Ngayon, may drop down na menu. 313 00:12:48,570 --> 00:12:50,810 At napansin pa rin ako sa unang hilera doon, 314 00:12:50,810 --> 00:12:52,520 kaya ako pinag-uusapan username ngayon. 315 00:12:52,520 --> 00:12:56,290 At ito ay lumiliko out na ang isang database, hindi katulad ng isang simple lamang spreadsheet, 316 00:12:56,290 --> 00:12:58,520 may malakas na tampok na tinatawag na index. 317 00:12:58,520 --> 00:13:02,600 At isang index ay isang paraan ng pagsabi ng database in advance na ako ng mga tao 318 00:13:02,600 --> 00:13:03,900 am mas madunong kaysa sa iyo. 319 00:13:03,900 --> 00:13:10,430 >> Alam ko kung anong mga uri ng mga query, piliin o ipasok o tanggalin o i-update, 320 00:13:10,430 --> 00:13:13,182 na ang aking code ay pagpunta sa dulo up paggawa na ito sa database. 321 00:13:13,182 --> 00:13:14,390 Gusto kong basahin ng maraming data. 322 00:13:14,390 --> 00:13:15,681 Gusto kong ipasok ang isang pulutong ng data. 323 00:13:15,681 --> 00:13:17,530 Gusto ko na patuloy na tanggalin ang isang pulutong ng mga data. 324 00:13:17,530 --> 00:13:21,520 Kung alam ko na ako pagpunta sa maging pag-access ng isang patlang tulad ng Username ng isang pulutong, 325 00:13:21,520 --> 00:13:24,770 Maaari ko bang preemptively sabihin ang database, alam ko higit pa sa iyo, 326 00:13:24,770 --> 00:13:29,220 at gusto kong mag-utos na dapat sa iyo index patlang na ito. 327 00:13:29,220 --> 00:13:33,200 Saan pag-index ng isang patlang o isang haligi ay nangangahulugan na ang database ng maaga 328 00:13:33,200 --> 00:13:37,040 dapat humiram ng ilang mga ideya mula sa, tulad ng, apat na linggo at limang at anim mula sa CS50 329 00:13:37,040 --> 00:13:39,240 at ang tunay na bumuo ng up isang bagay tulad ng isang binary paghahanap 330 00:13:39,240 --> 00:13:41,560 puno o isang bagay karaniwang tinatawag na isang B puno 331 00:13:41,560 --> 00:13:43,410 na iyong nais na malaman sa isang klase tulad ng CS124 332 00:13:43,410 --> 00:13:46,710 sa Harvard, ang isang algorithm class, o anumang bilang ng iba pang mga lugar. 333 00:13:46,710 --> 00:13:49,570 >> Ang database at ang smart mga tao na ipinatupad ito 334 00:13:49,570 --> 00:13:53,880 ay malaman kung paano mag-imbak na talaan ng impormasyon 335 00:13:53,880 --> 00:13:57,061 sa memory upang ang mga paghahanap at mga iba pang mga operasyon ay napakabilis na. 336 00:13:57,061 --> 00:13:58,060 Hindi mo na kailangang gawin ito. 337 00:13:58,060 --> 00:14:00,640 Hindi mo na kailangang ipatupad linear paghahanap o binary search 338 00:14:00,640 --> 00:14:03,300 o sumanib uri-uriin o seleksyon uri, alinman sa mga iyon. 339 00:14:03,300 --> 00:14:06,590 Ang database ay ito para sa iyo kung sabihin mo sa ito preemptively sa index na ito field. 340 00:14:06,590 --> 00:14:09,100 >> At maaari mong makita ang masyadong, may ilang mga iba pang mga katangian 341 00:14:09,100 --> 00:14:11,010 maaari naming sabihin ang database upang ipatupad. 342 00:14:11,010 --> 00:14:16,431 Ano ang maaaring ibig sabihin kung pinili ko Natatanging na ito mula sa menu, intuitively lamang? 343 00:14:16,431 --> 00:14:16,930 Oo? 344 00:14:16,930 --> 00:14:17,889 >> Madla: [hindi marinig] 345 00:14:17,889 --> 00:14:19,930 David MALAN: Oo, ang username ay dapat na kakaiba. 346 00:14:19,930 --> 00:14:23,330 Ito ba ay isang magandang bagay o isang masamang bagay para sa isang database, para sa isang website na may mga gumagamit? 347 00:14:23,330 --> 00:14:24,965 Dapat username ay natatangi? 348 00:14:24,965 --> 00:14:25,880 Oo, marahil. 349 00:14:25,880 --> 00:14:27,800 Kung iyon ang kung ano ang field na ginagamit namin upang mag-log in, 350 00:14:27,800 --> 00:14:31,867 hindi mo talaga gustong mga tao sa pagkakaroon ang parehong pakiramdam o ang parehong username. 351 00:14:31,867 --> 00:14:33,700 Kaya, maaari kaming magkaroon ng database ipatupad na kaya 352 00:14:33,700 --> 00:14:37,880 na ngayon sa aking PHP code o anumang wika, Hindi ko na kailangang, halimbawa, suriin 353 00:14:37,880 --> 00:14:41,490 kinakailangang gumagana ang username umiiral bago ko ipaalam sa ibang rehistro? 354 00:14:41,490 --> 00:14:46,690 Ang database ay hindi nagpapahintulot sa dalawang tao na may pangalang David o Malans magrehistro sa kasong ito. 355 00:14:46,690 --> 00:14:50,030 >> At bilang isang bukod, kahit na ito Hinahayaan lamang menu kang pumili ng isa, 356 00:14:50,030 --> 00:14:54,550 isang natatanging index ay isang bagay na index para sa sobrang mabilis na pagganap, 357 00:14:54,550 --> 00:14:56,100 kundi pati na rin nagpapatupad ito natatangi. 358 00:14:56,100 --> 00:14:58,850 At kami ay bumalik sa kung ano ang dalawang iba pang ibig sabihin sa sandali lamang. 359 00:14:58,850 --> 00:15:00,930 Samantala, kung pumunta ako sa aking pangalawang hilera, na 360 00:15:00,930 --> 00:15:06,230 ay ang pangalan ng user, dapat ko bang tukuyin ang na dapat na natatangi ang pangalan? 361 00:15:06,230 --> 00:15:09,550 Hindi, dahil maaari mong tiyak have-- walang dalawang David 362 00:15:09,550 --> 00:15:11,050 Malans sa kuwartong ito, malamang. 363 00:15:11,050 --> 00:15:14,290 Ngunit kung pinili namin ang ibang pangalan, maaari naming tiyak na magkaroon ng banggaan. 364 00:15:14,290 --> 00:15:16,130 >> Isipin bumalik sa hash talahanayan at ang gusto. 365 00:15:16,130 --> 00:15:18,604 Kaya, kami ay tiyak na hindi nais upang gawin ang mga patlang ng pangalan na kakaiba. 366 00:15:18,604 --> 00:15:21,270 Kaya, lamang kami ay pagpunta sa iwanan na ang bilang gitling, gitling, gitling, wala. 367 00:15:21,270 --> 00:15:22,660 At ako pagpunta sa iwan lahat ng iba pa na nag-iisa. 368 00:15:22,660 --> 00:15:25,035 Sa katunayan, karamihan sa mga patlang na ito hindi namin ay may sa pag-aalaga tungkol. 369 00:15:25,035 --> 00:15:27,830 At kapag handa na akong i-save ito, kung ang internet ay nakikipagtulungan, 370 00:15:27,830 --> 00:15:35,032 I-click ang I-save, at tunay, tunay, tunay dahan-dahan ay ang database nai-save. 371 00:15:35,032 --> 00:15:37,240 At ngayon ako pabalik sa ito interface, na tinatanggap na, 372 00:15:37,240 --> 00:15:38,680 ay napakalaki sa unang tingin. 373 00:15:38,680 --> 00:15:42,450 Ngunit ang lahat ng ako ng pagpunta sa gawin ay i-click ang sa gumagamit ng salita sa kaliwang tuktok. 374 00:15:42,450 --> 00:15:47,630 Pupunta ako sa pumunta dito, i-click ang Ang mga gumagamit, at sa pamamagitan ng default, ito 375 00:15:47,630 --> 00:15:50,180 ay naisakatuparan ng ilang SQL, ngunit higit pa sa na sa isang sandali. 376 00:15:50,180 --> 00:15:52,654 Narito ang isang buod lamang ng kung ano ang ko. 377 00:15:52,654 --> 00:15:55,320 At huwag mag-alala na nakikita mo banggitin ng mga Latin at Swedish dito. 378 00:15:55,320 --> 00:16:00,490 Iyon ang mga default na lang ang setting, dahil MySQL orihinal, 379 00:16:00,490 --> 00:16:04,000 o PHP MyAdmin, isa sa dalawang mga nangyari na nakasulat sa pamamagitan ng ilang Swedish tao. 380 00:16:04,000 --> 00:16:06,100 Ngunit ito ay hindi kaugnay sa aming kaso dito. 381 00:16:06,100 --> 00:16:08,280 >> Lahat ng karapatan, kaya kung bakit ito kawili-wili ang lahat? 382 00:16:08,280 --> 00:16:13,050 Ito ay lumiliko out, maaari ko bang ipasok data sa isang database sa pamamagitan ng pagsulat code. 383 00:16:13,050 --> 00:16:15,940 At ako ay sige, at sa aking file dito, ako 384 00:16:15,940 --> 00:16:19,000 pagpunta sa sige at magpanggap tulad ito ay wired sa na database, na kung saan 385 00:16:19,000 --> 00:16:23,040 ito ay hindi sa sandaling ito, ngunit ito ay maging kapag kami makakuha sa hanay ng problema pitong. 386 00:16:23,040 --> 00:16:25,640 At ako pagpunta sa magpatuloy at magpatakbo ng isang function na tinatawag na query, 387 00:16:25,640 --> 00:16:28,730 na kung saan kami ay magbibigay sa iyo sa problema itakda pitong ni distribution code, na 388 00:16:28,730 --> 00:16:31,490 tumatagal ng hindi bababa sa isang argument, na kung saan ay lamang ng isang string. 389 00:16:31,490 --> 00:16:33,460 Ang isang string ng SQL code. 390 00:16:33,460 --> 00:16:36,700 Kaya, ikaw ay tungkol sa upang malaman kung paano isulat nakabalangkas Query Language. 391 00:16:36,700 --> 00:16:41,270 >> Kung gusto ko upang magsingit ng isang bagong hilera sa aking database dahil ang isang tao ay nagsumite 392 00:16:41,270 --> 00:16:47,600 isang form sa aking code, Gusto ko ng literal isulat maisingit gumagamit ng mga sumusunod na 393 00:16:47,600 --> 00:16:52,800 patlang: username, comma, pangalan, ang mga halaga, 394 00:16:52,800 --> 00:16:57,480 at ngayon ang kailangan ko upang ipasok isang bagay tulad ng Malan, at quote, 395 00:16:57,480 --> 00:17:01,490 magpanipi 'David Malan.' At ngayon kahit na para sa mga pamilyar sa SQL, 396 00:17:01,490 --> 00:17:07,830 bakit ako ay gumagamit ng single quotes sa loob ng mga ito green string? 397 00:17:07,830 --> 00:17:10,790 398 00:17:10,790 --> 00:17:13,040 Kung ano ang maaaring maging dito ang dahilan? 399 00:17:13,040 --> 00:17:14,609 >> Pansinin ako co-mingling dalawang wika. 400 00:17:14,609 --> 00:17:18,099 Query ay isang function na PHP, ngunit ito ay tumatagal ng isang argumento. 401 00:17:18,099 --> 00:17:21,740 At na argument ay upang mismo ay nakasulat sa ibang wika na tinatawag na 402 00:17:21,740 --> 00:17:23,500 SQL, nakabalangkas na Query Wika. 403 00:17:23,500 --> 00:17:27,940 Kaya, ang lahat ng bagay na ako may lamang naka-highlight dito 404 00:17:27,940 --> 00:17:30,380 ay wikang ito na tinatawag na SQL. 405 00:17:30,380 --> 00:17:36,290 Kaya, ano ang single quote, tulad ng isang mabilis katinuan suriin? 406 00:17:36,290 --> 00:17:37,324 Sige lang. 407 00:17:37,324 --> 00:17:37,990 Ang mga ito ay mga string. 408 00:17:37,990 --> 00:17:41,590 So, quote, magpanipi Malan at quote, magpanipi David Malan ay mga string. 409 00:17:41,590 --> 00:17:45,210 At lamang iniisip intuitively ngayon, pag-alam kung ano ang iyong malaman tungkol sa C at PHP, 410 00:17:45,210 --> 00:17:50,220 bakit hindi ko gawin ito, na kung saan ako ay karaniwang ginamit na double quotes para sa mga string? 411 00:17:50,220 --> 00:17:52,310 Bakit hindi gusto ko bang gawin iyon? 412 00:17:52,310 --> 00:17:52,810 Oo? 413 00:17:52,810 --> 00:17:53,685 >> Madla: [hindi marinig] 414 00:17:53,685 --> 00:17:56,695 415 00:17:56,695 --> 00:17:57,570 David MALAN: Eksakto. 416 00:17:57,570 --> 00:17:59,653 Dahil gumagamit na ako ng double quotes sa paraan 417 00:17:59,653 --> 00:18:01,929 sa labas ng argument sa function na PHP, 418 00:18:01,929 --> 00:18:03,470 Gusto ko lang malito ang interpreter. 419 00:18:03,470 --> 00:18:04,860 Hindi ito alam, ang mga ito pumunta nang sabay? 420 00:18:04,860 --> 00:18:05,735 Huwag ang mga pumunta nang sabay? 421 00:18:05,735 --> 00:18:06,810 Huwag ang mga pumunta nang sabay? 422 00:18:06,810 --> 00:18:08,070 Kaya, Ako kahaliling halip. 423 00:18:08,070 --> 00:18:11,784 >> O kaya kong gawin ang isang bagay na tulad nito, backslash quote o backslash quote. 424 00:18:11,784 --> 00:18:14,200 Lantaran, na lamang ay nagsisimula sa makakuha ng tunay na hindi mabasa at pangit. 425 00:18:14,200 --> 00:18:16,790 Ngunit na nais makamit ang parehong resulta pati na rin. 426 00:18:16,790 --> 00:18:19,760 >> Kaya, kung ako ay upang maipatupad ito Query sa ngayon, sabihin makita kung ano ang mangyayari. 427 00:18:19,760 --> 00:18:22,740 Pupunta ako sa magpatuloy ngayon at sa halip kaysa execute ang code sa PHP, na kung saan 428 00:18:22,740 --> 00:18:24,610 ay kung saan mo i-play sa hanay ng problema pitong, 429 00:18:24,610 --> 00:18:27,200 Pupunta ako sa halip na pumunta sa PHP MyAdmin. 430 00:18:27,200 --> 00:18:29,770 At mano-mano ako pupunta upang pumunta sa tab na SQL, 431 00:18:29,770 --> 00:18:31,580 at hayaan mo akong mag-zoom in sa interface. 432 00:18:31,580 --> 00:18:34,007 At ako pagpunta sa i-paste sa mga bagay ko lang type. 433 00:18:34,007 --> 00:18:36,090 At ang kulay coding ay nagbago nang kaunti ngayon, 434 00:18:36,090 --> 00:18:38,750 lamang dahil ang mga format ng programa mga bagay-bagay ng kaunti naiiba. 435 00:18:38,750 --> 00:18:41,960 Ngunit mapansin na ang lahat ng aking nagawa ay sinabi ko na, ipasok sa mga gumagamit. 436 00:18:41,960 --> 00:18:45,790 Ko na tinukoy, at pagkatapos, sa isang comma pinaghiwalay parenthesized list ang dalawang 437 00:18:45,790 --> 00:18:48,850 mga patlang na nais kong ipasok, at pagkatapos ay literal kong sinasabi na mga halaga 438 00:18:48,850 --> 00:18:51,510 sinusundan ng isa pang paren, at pagkatapos ay ang dalawang mga halaga 439 00:18:51,510 --> 00:18:53,520 Gusto kong mag-plug-in, at ngayon para sa mabuting pamamaraan, 440 00:18:53,520 --> 00:18:55,010 Kailangan ko bang ilagay ang isang semicolon sa dulo. 441 00:18:55,010 --> 00:18:56,570 Kaya, hindi ito ang C. Ito ay hindi PHP. 442 00:18:56,570 --> 00:18:59,970 Ito na ngayon ang SQL, at ako ng idikit ito sa ito web based interface na 443 00:18:59,970 --> 00:19:02,710 lamang ang pagpunta upang ipaalam sa akin, sa lalong madaling ko i-click Go, 444 00:19:02,710 --> 00:19:08,060 execute sa query na ito sa database tumatakbo sa loob ng CS50 IDE. 445 00:19:08,060 --> 00:19:09,470 >> Kaya ito ay mabuti. 446 00:19:09,470 --> 00:19:12,520 Pansinin na sinabi ng isang hilera nakapasok, nagpunta sobrang mabilis, 447 00:19:12,520 --> 00:19:15,190 0.0054 segundo upang ipasok ang data na iyon. 448 00:19:15,190 --> 00:19:16,610 Kaya, na ang tunog medyo malusog. 449 00:19:16,610 --> 00:19:19,350 Ito reformat ang aking query para sa akin dito upang makita ang mga ito lamang 450 00:19:19,350 --> 00:19:21,730 sa uri ng kulay code na bersyon. 451 00:19:21,730 --> 00:19:24,540 Ngunit ngayon kung nag-click ako Mag-browse, mapapansin na, kahit 452 00:19:24,540 --> 00:19:29,070 kahit na may isang pulutong ng mga kalat ng mga basura sa screen, ang aking mga talahanayan ay mayroon na ngayong dalawang mga hanay. 453 00:19:29,070 --> 00:19:30,700 >> Kaya, hayaan mo akong magpatuloy at gawin ang isa pang. 454 00:19:30,700 --> 00:19:33,760 Sa halip na ito, ipaalam sa akin pumunta sa tab na SQL muli. 455 00:19:33,760 --> 00:19:40,723 At oras na ito kukunin ko na ipasok ang isang bagay tulad Rob at ang kanyang pangalan ay Rob Bowden. 456 00:19:40,723 --> 00:19:42,330 Bowden. 457 00:19:42,330 --> 00:19:44,040 Ni i-click ang I-save Hayaan. 458 00:19:44,040 --> 00:19:46,140 Oops, sa halip Go. 459 00:19:46,140 --> 00:19:48,890 >> I-click muli-browse, at paunawa ngayon ay mayroon akong dalawang mga hanay. 460 00:19:48,890 --> 00:19:52,390 Kaya, ito ay lamang ng isang paraan ng mas kumplikadong paraan ng pagbubukas up ang Google Spreadsheets 461 00:19:52,390 --> 00:19:54,010 at pag-type lamang ng isang hilera sa isang haligi. 462 00:19:54,010 --> 00:19:57,070 Ngunit kung ano ang key ay na na namin ngayon ang syntax 463 00:19:57,070 --> 00:20:00,220 na kung saan upang isulat ang code sa gayon ay sa huli, maaaring namin talagang 464 00:20:00,220 --> 00:20:01,790 gawin ang ilang at ito. 465 00:20:01,790 --> 00:20:05,380 Alalahanin na suporta PHP sobrang pangkalahatang variable. 466 00:20:05,380 --> 00:20:08,415 >> Ano ang nasa loob ng dollar mag-sign underscore GET sa PHP? 467 00:20:08,415 --> 00:20:10,290 Namin kinuha ng isang pagtingin sa isa o dalawang simpleng halimbawa. 468 00:20:10,290 --> 00:20:15,640 At sa PSet6, pagpapabalik ikaw kumusta dot PHP na kung saan ito ay gumagamit ng variable. 469 00:20:15,640 --> 00:20:17,870 Ano ang napupunta sa doon? 470 00:20:17,870 --> 00:20:21,015 O ano ito? 471 00:20:21,015 --> 00:20:22,522 Ang isang maliit na louder. 472 00:20:22,522 --> 00:20:23,790 >> Madla: [hindi marinig] 473 00:20:23,790 --> 00:20:25,030 >> David MALAN: Ito ay isang snow binhi ng array, na kung saan 474 00:20:25,030 --> 00:20:27,714 ay lamang ng isang magarbong paraan ng sinasabi ng array na may pangunahing mga pares ng halaga. 475 00:20:27,714 --> 00:20:28,880 At ang mga susi ay hindi numeric. 476 00:20:28,880 --> 00:20:30,420 Ang mga ito ay mga salita o mga string. 477 00:20:30,420 --> 00:20:32,750 At partikular, kung ano ay ang mga pangunahing mga pares ng halaga? 478 00:20:32,750 --> 00:20:35,110 Saan sila nanggaling? 479 00:20:35,110 --> 00:20:35,620 Paumanhin? 480 00:20:35,620 --> 00:20:36,994 >> Madla: [hindi marinig] 481 00:20:36,994 --> 00:20:37,660 David MALAN: Hindi? 482 00:20:37,660 --> 00:20:40,700 Saan ang mga key pares ng halaga mula sa darating? 483 00:20:40,700 --> 00:20:42,490 Sabihin muli? 484 00:20:42,490 --> 00:20:44,610 Muli? 485 00:20:44,610 --> 00:20:46,472 Ako ang isa lamang sa pagdinig ng isang bagay? 486 00:20:46,472 --> 00:20:47,810 >> [Tawa] 487 00:20:47,810 --> 00:20:49,042 >> Iyan ay karapatan, yes? 488 00:20:49,042 --> 00:20:50,435 >> Madla: [hindi marinig] 489 00:20:50,435 --> 00:20:52,560 David MALAN: Oo, ang mga ito nanggaling mula sa query string. 490 00:20:52,560 --> 00:20:55,380 Kaya, kung rewind sa iyo sa oras na kapag kami nag-play sa Google 491 00:20:55,380 --> 00:20:59,600 at kami ay wala na slash Google.com search question mark q katumbas pusa, 492 00:20:59,600 --> 00:21:03,550 kung ako ay upang pindutin ang Enter at kung Google ay ipinatupad sa PHP, 493 00:21:03,550 --> 00:21:07,017 PHP code na isinulat Google ay may access sa dollar sign 494 00:21:07,017 --> 00:21:11,600 salungguhit GET loob ng kung saan ay isang key na tinatawag na Q at isang halaga 495 00:21:11,600 --> 00:21:17,680 tinatawag cats na maaaring pagkatapos itong gamitin na ginamit upang gawin ang isang aktwal na paghahanap sa. 496 00:21:17,680 --> 00:21:20,860 >> Kaya, sa katunayan, kung ano ako ng pagpunta sa gawin ngayon ay bumalik sa aking code sa PHP 497 00:21:20,860 --> 00:21:23,140 na makikita mo ulit makita pa sa PSet7. 498 00:21:23,140 --> 00:21:25,440 At sa halip na i-plug sa hard-code na mga halaga na 499 00:21:25,440 --> 00:21:27,630 ay hindi mukhang tulad ng isang very dynamic website, 500 00:21:27,630 --> 00:21:30,680 Pupunta ako upang bigyan ka ng isang teaser ng ano ang gagawin sa iyong aktwal na code. 501 00:21:30,680 --> 00:21:32,854 Gusto mong ilagay sa dalawang marks tulad ng tanong na ito. 502 00:21:32,854 --> 00:21:34,270 Hindi ko alam kung ano ang username. 503 00:21:34,270 --> 00:21:37,390 Hindi ko alam kung ano ang pangalan ay magiging, 504 00:21:37,390 --> 00:21:39,470 ngunit ko alam kaya ko makuha ang mga ito dynamic. 505 00:21:39,470 --> 00:21:43,420 >> Kaya, kung ang code sumusulat kami ngayon ay ang code na tumatakbo sa mga server ng Google, 506 00:21:43,420 --> 00:21:46,940 o kung ito kumusta ang dot PHP, na kung saan ay dumating na may PSet6, 507 00:21:46,940 --> 00:21:48,650 Pupunta ako sa pumasa sa ang function query 508 00:21:48,650 --> 00:21:51,450 tulad ng printf, dalawang iba pang mga argumento. 509 00:21:51,450 --> 00:21:57,120 GET, quote, magpanipi username, at GET, quote, magpanipi name. 510 00:21:57,120 --> 00:22:00,720 At ngayon, pansinin kung ano ang mga pangkalahatang istraktura ay dito. 511 00:22:00,720 --> 00:22:03,320 Mayroon akong sa kaliwa bahagi ng kamay ang tawag, 512 00:22:03,320 --> 00:22:05,480 mga function na ito na tinatawag na query sa PHP. 513 00:22:05,480 --> 00:22:08,160 Mayroon pa akong mga bilang unang argument, isang string lang ng text. 514 00:22:08,160 --> 00:22:11,000 >> Ngunit na string ng teksto ay nakasulat sa isang wika na tinatawag na SQL. 515 00:22:11,000 --> 00:22:12,616 At lantaran, ito ay hindi isang malaking wika. 516 00:22:12,616 --> 00:22:14,990 Kami ay pagpunta lamang upang makipag-usap tungkol ito pormal na ngayon, tunay. 517 00:22:14,990 --> 00:22:17,031 At pagkatapos ay sa hanay ng problema pitong, may relatibong 518 00:22:17,031 --> 00:22:18,800 ilang mga tampok na hindi namin pagpunta sa pagkilos. 519 00:22:18,800 --> 00:22:22,530 Ang mga tandang pananong, bagaman, ang ibig sabihin ng plug in ang halaga dito at plug sa ibang halaga 520 00:22:22,530 --> 00:22:23,130 dito. 521 00:22:23,130 --> 00:22:26,010 At pansinin, na tinanggal ko kung ano ang mula sa buong quote-- sumpain 522 00:22:26,010 --> 00:22:30,470 it-- buong quotation minamarkahan ang oras na ito. 523 00:22:30,470 --> 00:22:34,930 Tinanggal ko na ang quotation marka sa paligid ng tandang pananong, 524 00:22:34,930 --> 00:22:36,410 Paumanhin, oras na ito sa paligid. 525 00:22:36,410 --> 00:22:38,870 >> Kaya, kung ano ang magaling tungkol sa mga ito tanong tampok mark na 526 00:22:38,870 --> 00:22:42,830 PHP ay may gawi na suportahan, Ruby at Sawa at iba pang mga wika, 527 00:22:42,830 --> 00:22:45,730 ito ay nangangahulugan lamang plug sa ilang Pinahahalagahan dito at alam mo kung ano? 528 00:22:45,730 --> 00:22:48,300 Sa kang malaman kung gamitin single quotes o double quotes. 529 00:22:48,300 --> 00:22:50,966 Huwag mag-abala sa akin ng mga intellectually hindi kawili-wili sa mga detalye. 530 00:22:50,966 --> 00:22:53,780 Subalit, siguraduhin na ito ay tama upang ang aking code sa huli ay 531 00:22:53,780 --> 00:22:57,010 pagpapatakbo at ligtas, na kung saan ay magkakaroon ng kahulugan bago ang haba. 532 00:22:57,010 --> 00:23:00,460 >> Ngayon, ilan arguments kabuuang, para lamang maging malinaw, ay ang function pagkuha query? 533 00:23:00,460 --> 00:23:05,240 534 00:23:05,240 --> 00:23:07,581 Sinuman nais na bumoto para sa higit sa dalawa? 535 00:23:07,581 --> 00:23:08,080 Three? 536 00:23:08,080 --> 00:23:10,001 Oo naman, bakit? 537 00:23:10,001 --> 00:23:10,920 Bakit tatlo? 538 00:23:10,920 --> 00:23:12,305 >> Madla: [hindi marinig] 539 00:23:12,305 --> 00:23:13,180 David MALAN: Eksakto. 540 00:23:13,180 --> 00:23:14,610 Ang unang bahagi ay ang string. 541 00:23:14,610 --> 00:23:18,640 Ang pangalawang argumento ay dollar sign salungguhit GET username bracket. 542 00:23:18,640 --> 00:23:21,950 At ang ikatlong argument ay ang parehong bagay, ngunit lamang ang pangalan. 543 00:23:21,950 --> 00:23:24,590 Kaya sa ibang salita, ngayon kung ako ay isang web form 544 00:23:24,590 --> 00:23:27,149 na nagkaroon na patlang ng teksto, isa para sa username ng gumagamit, 545 00:23:27,149 --> 00:23:29,690 isa para sa kanyang pangalan, makatarungan tulad ng gusto mong makita sa isang website 546 00:23:29,690 --> 00:23:32,120 kapag ikaw ay magparehistro para sa ilang website, ito lakas 547 00:23:32,120 --> 00:23:35,450 maging ang code sa likod dulo na talagang gumagana ang insertion ngayon 548 00:23:35,450 --> 00:23:37,220 papunta sa database. 549 00:23:37,220 --> 00:23:40,870 >> Ngayon sa pamamagitan ng kaibahan, sabihin fast forward. 550 00:23:40,870 --> 00:23:43,840 Ipagpalagay na ang isang user ay ngayon pag-log in at nais mong 551 00:23:43,840 --> 00:23:48,860 na isulat ang code sa PHP na tseke kung ang tao na lang ang naka-log in 552 00:23:48,860 --> 00:23:52,250 ay talagang isang user, maaari mong gamitin medyo simple syntax. 553 00:23:52,250 --> 00:23:55,832 Maaari mong sabihin SELECT, sabihin natin lagyan ng star, kung saan star lahat-lahat. 554 00:23:55,832 --> 00:23:57,540 Hindi ko alam kung ano ang aking gusto, para lang bigyan ako 555 00:23:57,540 --> 00:24:01,585 ang lahat ng mga hanay mula sa talahanayan tinatawag na mga user kung saan, at ito ay napakabuti. 556 00:24:01,585 --> 00:24:03,710 Pumili ng sinusuportahan kung ano ang tinatawag na isang tambalan, na kung saan ay 557 00:24:03,710 --> 00:24:06,630 tulad ng isang paraan ng pag-qualify kung ano ang iyong gusto. 558 00:24:06,630 --> 00:24:10,590 Saan katumbas username quote, magpanipi Malan. 559 00:24:10,590 --> 00:24:13,680 Kaya dito rin, na naka-embed ko sa loob ng mga argument 560 00:24:13,680 --> 00:24:16,110 sa isang function na PHP, isang linya ng SQL code. 561 00:24:16,110 --> 00:24:18,680 At na SQL code na ito oras ay literal pagpunta 562 00:24:18,680 --> 00:24:21,790 upang maghanap para sa quote, magpanipi Malan. 563 00:24:21,790 --> 00:24:24,420 >> Ngayon na ang hindi lahat na kapaki-pakinabang, kaya ako pagpunta upang laktawan na 564 00:24:24,420 --> 00:24:28,650 at ako pagpunta upang ilagay ang layo ang tip na ito mula sa Brady, at pumunta 565 00:24:28,650 --> 00:24:30,990 at mga plug-in sa halip isang tandang pananong dito. 566 00:24:30,990 --> 00:24:33,290 Kaya, upang maging malinaw, kung ano dapat ang aking pangalawang argumento 567 00:24:33,290 --> 00:24:37,480 na kung ang isang tao ay naka-log lamang sa at ako nais na suriin kung siya ay talagang 568 00:24:37,480 --> 00:24:39,265 ang isang user? 569 00:24:39,265 --> 00:24:40,140 Madla: [hindi marinig] 570 00:24:40,140 --> 00:24:40,890 David MALAN: Oo. 571 00:24:40,890 --> 00:24:44,120 Ako marinig sign underscore dollar GET quote, magpanipi username. 572 00:24:44,120 --> 00:24:50,040 At iyon ay dapat na bumalik sa akin alinman sa mga hilera sa aking mga database 573 00:24:50,040 --> 00:24:51,986 na magkaroon ng isang username ng Malan. 574 00:24:51,986 --> 00:24:54,860 Ngayon sana, ako pagpunta upang makakuha ng bumalik zero kung Malan ni hindi pa dito, 575 00:24:54,860 --> 00:24:56,290 o isa kung siya ay may. 576 00:24:56,290 --> 00:24:59,026 Hindi ko dapat makabalik dalawa o tatlo o apat. 577 00:24:59,026 --> 00:24:59,526 Bakit? 578 00:24:59,526 --> 00:25:00,220 >> Madla: [hindi marinig] 579 00:25:00,220 --> 00:25:01,120 >> David MALAN: Aking sinabi natatangi, di ba? 580 00:25:01,120 --> 00:25:01,750 Simple dahilan. 581 00:25:01,750 --> 00:25:04,030 Dahil sinabi ko ito ay nakuha na maging natatangi, lohikal lamang, 582 00:25:04,030 --> 00:25:07,940 maaari ka lamang magkaroon ng zero o isa Malans sa mga partikular na database table. 583 00:25:07,940 --> 00:25:10,965 Ngayon bilang isang tabi, kaya lang na iyong nakita ito, kahit na panatilihing ako gamit GET 584 00:25:10,965 --> 00:25:14,350 at kahit na PSet6 ginagamit lamang GET, maaari mong tiyak na magkaroon ng POST. 585 00:25:14,350 --> 00:25:17,212 At isipin na Post ay isa pang pamamaraan para sa pagsusumite ng impormasyon 586 00:25:17,212 --> 00:25:19,170 mula sa isang form, ngunit ito ay hindi magpapakita sa URL. 587 00:25:19,170 --> 00:25:22,690 Ito ay isang maliit na mas ligtas na tiyak para sa mga bagay tulad ng mga username at password, 588 00:25:22,690 --> 00:25:25,210 saan PSet7 ay, sa katunayan, may kasangkot. 589 00:25:25,210 --> 00:25:28,130 >> Kaya, sabihin gawin ito sa PHP ipaalam MyAdmin at makita kung ano ang mangyayari. 590 00:25:28,130 --> 00:25:30,020 Pupunta ako sa pumunta sa tab MySQL. 591 00:25:30,020 --> 00:25:34,450 At mapansin na ang default na halaga para sa PHP MyAdmin, lamang na subukan upang maging kapaki-pakinabang, 592 00:25:34,450 --> 00:25:37,050 ay upang piliin ang mga bituin mula sa mga gumagamit na kung saan ang isa. 593 00:25:37,050 --> 00:25:39,430 Well, ang isa ay laging totoo, kaya ito ay ang mga uto-epektibong 594 00:25:39,430 --> 00:25:40,400 ng piliin lamang ang lahat. 595 00:25:40,400 --> 00:25:42,691 Ngunit ako pagpunta sa maging isang maliit na higit pedantic at mano-manong 596 00:25:42,691 --> 00:25:45,920 i-type ang SELECT star FROM gumagamit. 597 00:25:45,920 --> 00:25:48,294 >> Ngayon technically, maaari mong quote ang pangalan ng talahanayan. 598 00:25:48,294 --> 00:25:50,460 Ito ay bihira na mayroon ka na, ngunit napansin ang mga ito ay hindi 599 00:25:50,460 --> 00:25:52,240 iyong normal na mga quote sa US keyboard. 600 00:25:52,240 --> 00:25:54,760 Ito ay ang tinatawag na backtick, na ay karaniwang sa itaas na kaliwang kamay 601 00:25:54,760 --> 00:25:56,000 sulok ng iyong keyboard. 602 00:25:56,000 --> 00:25:58,500 Ngunit ito ay bihira na makikita mo ang tunay na kailangan sa pag-abala sa mga iyon, 603 00:25:58,500 --> 00:25:59,950 kaya kukunin ko na lang ligtaan pa din. 604 00:25:59,950 --> 00:26:02,280 Kaya ngayon, hayaan mo akong magpatuloy at pindutin ang pumunta. 605 00:26:02,280 --> 00:26:06,616 At kung gaano karaming mga hilera ang dapat kong makuha bumalik kapag ako ay piliin star mula sa mga gumagamit? 606 00:26:06,616 --> 00:26:08,407 >> Madla: [hindi marinig] 607 00:26:08,407 --> 00:26:09,990 David MALAN: Ang bilang ng mga hilera, sigurado. 608 00:26:09,990 --> 00:26:12,390 Ngunit kung gaano karaming sa kongkreto kuwento ngayon? 609 00:26:12,390 --> 00:26:14,640 Two, dahil nagkaroon sa akin at nagkaroon ng Rob. 610 00:26:14,640 --> 00:26:19,370 Kaya, kung nag-click ako Go, nakikita ko ang biswal na Nakuha ko na sa likod, sa katunayan, dalawang mga hanay. 611 00:26:19,370 --> 00:26:22,060 May isang pulutong ng mga kalat ng mga basura sa mga screen, ngunit lamang nakikita ko ang dalawang mga hilera. 612 00:26:22,060 --> 00:26:28,580 Sa pamamagitan ng kaibahan, kung gagawin ko ito muli at gawin SELECT star FROM mga gumagamit, na kung saan ang username 613 00:26:28,580 --> 00:26:31,840 ay katumbas ng quote, magpanipi Malan, ngayon kung ako mag-click Go, 614 00:26:31,840 --> 00:26:33,970 Lamang ako ng pagpunta upang makabalik sa isang hilera. 615 00:26:33,970 --> 00:26:36,499 At sa wakas, kung gagawin ko bagay na tulad nito, ipagpalagay 616 00:26:36,499 --> 00:26:38,290 na hindi ko pag-aalaga tungkol sa pagkuha ng lahat ng bagay, 617 00:26:38,290 --> 00:26:41,020 na kung saan ay uri ng walang kahulugan ngayon, dahil mayroong lamang ng dalawang mga hanay. 618 00:26:41,020 --> 00:26:43,103 Ito ay hindi tulad ako ng pagpili isang malaking halaga ng data. 619 00:26:43,103 --> 00:26:46,720 Ipagpalagay ko sige at huwag PUMILI pangalan MULA 620 00:26:46,720 --> 00:26:51,990 gumagamit, kung saan username katumbas Malan, kung ano ang magaling tungkol sa SQL totoo lang, 621 00:26:51,990 --> 00:26:54,290 ay na ito ay talagang lamang ano sabihin mo ito gagawin. 622 00:26:54,290 --> 00:26:57,550 Ito ay medyo maikli at malinaw, ngunit ikaw ay literal sabihin lamang nito kung ano ang gusto mong gawin. 623 00:26:57,550 --> 00:27:01,130 Piliin ang pangalan mula sa mga gumagamit na kung saan ang ang username katumbas Malan. 624 00:27:01,130 --> 00:27:03,440 At ito ay tunay na malinaw. 625 00:27:03,440 --> 00:27:08,410 Kaya, ngayon kung ako pindutin Go, kung gaano karaming hilera ako pagpunta upang makabalik? 626 00:27:08,410 --> 00:27:10,770 One, dahil ito lang ang Malan, sana. 627 00:27:10,770 --> 00:27:13,100 O zero kung siya ay hindi doon, ngunit isa maximally. 628 00:27:13,100 --> 00:27:17,610 >> At kung gaano karaming mga haligi ang makukuha ko? 629 00:27:17,610 --> 00:27:18,450 Gaano karaming mga haligi? 630 00:27:18,450 --> 00:27:20,658 Oras na ito, ako lamang ang pagpunta upang makakuha ng isa dahil ako ay hindi 631 00:27:20,658 --> 00:27:22,380 piliin star, na kung saan ay ang lahat. 632 00:27:22,380 --> 00:27:27,900 Ngayon ako ng pagpili ng pangalan lamang, kaya ko lamang makabalik isang hanay at isang hilera. 633 00:27:27,900 --> 00:27:31,730 At mukhang uri ng naaangkop walang katotohanan, just looking super 634 00:27:31,730 --> 00:27:33,060 maliit na tulad nito. 635 00:27:33,060 --> 00:27:34,290 Kaya, kung ano talaga ang nangyayari? 636 00:27:34,290 --> 00:27:36,890 Kapag execute ka ng isang SQL query gamit piliin, 637 00:27:36,890 --> 00:27:38,700 kung ano ang nakukuha pabalik mula sa database 638 00:27:38,700 --> 00:27:42,970 ay tulad ng isang pansamantalang table sa mga hanay at haligi, siguro, 639 00:27:42,970 --> 00:27:46,260 ngunit na ligtaan anumang bagay na ay hindi tunay na pinili mo. 640 00:27:46,260 --> 00:27:49,010 Kaya, ito ay tulad ng kapag ang isang tao ay nagkaroon ng isang malaking spreadsheet ng lahat ng mga mag-aaral 641 00:27:49,010 --> 00:27:51,610 nakarehistro para sa ilang grupo ng estudyante, at sabihin mo, 642 00:27:51,610 --> 00:27:55,097 bigyan ako ang lahat ng mga freshman na na nakarehistro para sa aming mga grupo ng estudyante, kung ano ang 643 00:27:55,097 --> 00:27:56,930 ang iyong mga kasamahan sa maaaring gawin sa grupo ng estudyante 644 00:27:56,930 --> 00:27:58,430 ay hindi na nila lamang ng kamay mo ang buong spreadsheet. 645 00:27:58,430 --> 00:27:59,742 Iyan ay tulad ng sinasabi piliin star. 646 00:27:59,742 --> 00:28:02,200 At ito ay isang maliit na nakakainis kung Nais mo lamang ang mga freshman. 647 00:28:02,200 --> 00:28:05,640 At kaya, kung ikaw sa halip ay nagsabi, piliin ang star mula sa database ng mesa 648 00:28:05,640 --> 00:28:08,470 na kung saan ang taong katumbas quote, magpanipi freshman, 649 00:28:08,470 --> 00:28:10,810 ito ay parang iyong kaibigan sa mag-aaral ng grupo 650 00:28:10,810 --> 00:28:13,770 literal na naka-highlight at kinopya lamang ang mga hilera freshman, 651 00:28:13,770 --> 00:28:16,780 ilagay ang mga ito sa isang bagong Google Spreadsheet o isang Excel file, 652 00:28:16,780 --> 00:28:18,860 at kamay mo sa likod ng nagreresulta file lamang. 653 00:28:18,860 --> 00:28:21,710 Iyan na ang lahat na nangyayari on conceptually dito. 654 00:28:21,710 --> 00:28:23,920 >> Kaya sa katapusan, maaari naming gawin ilang medyo fancy bagay 655 00:28:23,920 --> 00:28:26,560 sa pamamagitan ng pag-iimbak ng mga bagay tulad ng mga username at mga password at mga katulad. 656 00:28:26,560 --> 00:28:30,310 Ngunit, ito ay lumiliko out, na dapat nating gawin isang maliit na naiiba kaysa ito. 657 00:28:30,310 --> 00:28:34,750 Ito ay hindi na smart upang lamang tindahan ng isang username at password. 658 00:28:34,750 --> 00:28:37,790 May isang tao na mas maaga, sa palagay ko down dito, iminungkahi ng isang ID. 659 00:28:37,790 --> 00:28:40,787 Ngayon ng isang ID ay maaaring tulad ng isang Harvard ID o Net ID Yale, 660 00:28:40,787 --> 00:28:42,870 ngunit ito ay maaaring maging kahit na mas simple sa aming kaso database. 661 00:28:42,870 --> 00:28:45,120 At sa katunayan, ang mga karaniwang kaso ay ang magkaroon ng isa pang hanay. 662 00:28:45,120 --> 00:28:46,953 At ako pagpunta upang pumunta magpatuloy at i-edit ang aking table. 663 00:28:46,953 --> 00:28:49,521 At kung i-play mo sa paligid na may interface na ito para sa PSet7, 664 00:28:49,521 --> 00:28:51,770 makikita mo na maaari mong suriin ang ang pindutang ito dito at magdagdag 665 00:28:51,770 --> 00:28:53,750 isang patlang sa simula ng table. 666 00:28:53,750 --> 00:28:56,720 At ngayon, kung nag-click ako Go, ito ay pagpunta upang bigyan ako ng isa sa mga form 667 00:28:56,720 --> 00:28:57,600 mula sa mas maaga. 668 00:28:57,600 --> 00:29:00,170 Pupunta ako upang magdagdag ng isang patlang na tinatawag na ID. 669 00:29:00,170 --> 00:29:03,070 At ako pagpunta sa gawin ito ng isang numero na uri. 670 00:29:03,070 --> 00:29:05,362 >> Mayroon akong isang buong grupo ng mga halaga para sa numerics. 671 00:29:05,362 --> 00:29:08,677 Lamang ako ng pagpunta sa pumili ng isang int at mag-alala tungkol sa mga disparate sukat. 672 00:29:08,677 --> 00:29:10,510 Hindi ko na kailangang tukuyin ang isang haba o ng isang halaga, 673 00:29:10,510 --> 00:29:13,710 dahil ito ay magiging 32 piraso kahit na ano. 674 00:29:13,710 --> 00:29:16,070 Katangian, hindi namin nakita bago. 675 00:29:16,070 --> 00:29:18,410 Anumang interes sa alinman sa mga ito mga pagpipilian sa menu ng oras na ito? 676 00:29:18,410 --> 00:29:21,890 677 00:29:21,890 --> 00:29:23,745 Para sa isang int? 678 00:29:23,745 --> 00:29:24,620 Ano ang ginawa ninyong imungkahi? 679 00:29:24,620 --> 00:29:27,350 680 00:29:27,350 --> 00:29:28,445 Hindi? 681 00:29:28,445 --> 00:29:29,570 Gawin ang anuman sa mga ito gumawa ng kahulugan? 682 00:29:29,570 --> 00:29:30,536 Oo. 683 00:29:30,536 --> 00:29:31,900 Oo, unsigned, di ba? 684 00:29:31,900 --> 00:29:35,930 >> Sa pangkalahatan, kung kami ay pagpunta sa magbibigay lahat ng tao ng isang natatanging numero, na kung saan 685 00:29:35,930 --> 00:29:38,200 ay kung saan ang kwentong ito ay tuloy, ko talagang gusto lamang 686 00:29:38,200 --> 00:29:41,919 isang tao na magkaroon ng bilang tulad ng zero at isa at dalawa at tatlo at apat. 687 00:29:41,919 --> 00:29:43,710 Hindi ko na kailangan upang harapin ang may negatibong numero. 688 00:29:43,710 --> 00:29:45,210 Ito lamang tila tulad ng labis-labis na kumplikado. 689 00:29:45,210 --> 00:29:48,470 Gusto ko ng apat na bilyong mga posibleng halaga, Hindi apat na bilyong mga posibleng halaga, 690 00:29:48,470 --> 00:29:50,699 kaya lang nadoble ko ang kapasidad ng aking INT. 691 00:29:50,699 --> 00:29:53,490 Bilang isang tabi, kung gusto mong may kaugnayan ito sa isang bagay tulad ng Facebook, 692 00:29:53,490 --> 00:29:56,190 bumalik sa mga uri ng mga araw ng aking pagka Facebook unang dumating out, 693 00:29:56,190 --> 00:29:59,510 Naniniwala ako kung ano sila ay gamit sa kanilang MySQL database 694 00:29:59,510 --> 00:30:02,856 upang mag-imbak ng isang user identifier, ay lamang ng isang int. 695 00:30:02,856 --> 00:30:05,230 Ngunit siyempre, mayroong isang pulutong ng mga tunay na tao sa mundo. 696 00:30:05,230 --> 00:30:07,438 May isang pulutong ng mga pekeng Facebook mga account sa buong mundo. 697 00:30:07,438 --> 00:30:11,701 At kaya sa huli, umapaw Facebook ang laki ng isang int, isang apat na bilyong 698 00:30:11,701 --> 00:30:12,200 value. 699 00:30:12,200 --> 00:30:15,032 Kaya naman, kung titingnan mo paligid at may mga website 700 00:30:15,032 --> 00:30:16,740 na maaaring sabihin sa iyo kung ano ang ang iyong mga natatanging ID ay. 701 00:30:16,740 --> 00:30:19,781 At kung hindi mo na pumili ng isang username sa Facebook, makikita mo ang iyong mga natatanging ID. 702 00:30:19,781 --> 00:30:23,080 Sa tingin ko ito ang profile dot PHP ay katumbas ng tandang pananong ID ng isang bagay. 703 00:30:23,080 --> 00:30:27,210 Na ngayon ang isang bagay tulad ng isang malaking INT, o isang matagal na matagal na kung ikaw ay, 704 00:30:27,210 --> 00:30:29,700 kung saan ay isang 64-bit na halaga o isang bagay na maihahambing. 705 00:30:29,700 --> 00:30:33,620 >> Kaya, kahit na sa tunay na mundo ang mga mga isyu sa huli minsan mahalaga. 706 00:30:33,620 --> 00:30:37,600 At ito ay lumiliko out dito, kung hindi ako pagbibigay ng lahat ng aking mga gumagamit ng isang natatanging ID, 707 00:30:37,600 --> 00:30:41,750 Gusto kong maging tahasang super at minimally gumawa patlang na ito natatanging. 708 00:30:41,750 --> 00:30:44,750 Ngunit ito ay lumiliko out may isa piraso ng katawagan ngayon masyadong 709 00:30:44,750 --> 00:30:46,470 na ang isang pangunahing key. 710 00:30:46,470 --> 00:30:49,800 Kung ikaw ay pagdisenyo ng isang database table at alam mo nang maaga 711 00:30:49,800 --> 00:30:55,580 na isa sa mga haligi sa talahanayan na at dapat ay natatanging kilalanin hilera 712 00:30:55,580 --> 00:30:58,500 sa talahanayan, na nais mong tukuyin ito at sabihin sa mga database, 713 00:30:58,500 --> 00:31:00,250 ito ang aking pangunahing key. 714 00:31:00,250 --> 00:31:02,110 Maaaring may mga duplicate sa iba pang mga patlang, 715 00:31:02,110 --> 00:31:06,330 ngunit ako na nagsasabi sa mga database na ito ay ang aking primary, ang aking pinaka-mahalagang field, 716 00:31:06,330 --> 00:31:08,420 na garantisadong upang maging kakaiba. 717 00:31:08,420 --> 00:31:09,660 >> Ngayon, ito ay tila kalabisan. 718 00:31:09,660 --> 00:31:13,830 Ako ngayon minumungkahi na tayo magdagdag ng, sa pamamagitan ng pag-click ang I-save dito, 719 00:31:13,830 --> 00:31:17,210 isang patlang called-- at pupuntahan ko sige at i-click ang AI, 720 00:31:17,210 --> 00:31:19,720 kami ay bumalik sa na sa isang sandali, Save. 721 00:31:19,720 --> 00:31:22,540 Ako ipanukala ngayon na Tumingin aking mesa tulad nito. 722 00:31:22,540 --> 00:31:26,305 Mayroon akong isang field INT tinatawag ID, isang patlang char tinatawag Username, 723 00:31:26,305 --> 00:31:31,100 isang patlang VARCHAR tinatawag Name, ngunit ID, kung ito ay pangunahing at samakatuwid natatangi, 724 00:31:31,100 --> 00:31:33,760 bakit nag-aaksaya ko lang time na nagpapakilala kung ano 725 00:31:33,760 --> 00:31:39,140 mabisa ay isang pangalawang natatanging patlang na tinatawag na ID na ang isang int? 726 00:31:39,140 --> 00:31:41,980 >> Username, pagpapabalik, ay na natatangi, sinabi namin. 727 00:31:41,980 --> 00:31:45,350 Kaya lohikal lamang, hindi mo na kailangan anumang karanasan database na dahilan 728 00:31:45,350 --> 00:31:47,570 sa pamamagitan na ito, kung bakit Maaari ba akong magkaroon ipinakilala 729 00:31:47,570 --> 00:31:50,065 isang int bilang aking natatanging identifier pati na rin? 730 00:31:50,065 --> 00:31:52,740 731 00:31:52,740 --> 00:31:53,930 Ano kaya ang this-- sabihin muli? 732 00:31:53,930 --> 00:31:55,580 >> Madla: [hindi marinig] 733 00:31:55,580 --> 00:31:59,534 >> David MALAN: Random access ay mas madali, bakit? 734 00:31:59,534 --> 00:32:00,410 >> Madla: [hindi marinig] 735 00:32:00,410 --> 00:32:02,367 David MALAN: Oo, ito ay pag-access lamang ng mga numero. 736 00:32:02,367 --> 00:32:04,750 Kaya, kung sa tingin mo ng mga ito ay tunay na ay isang table, tulad ng isang array, 737 00:32:04,750 --> 00:32:07,690 ngayon ay mayroon akong mga natatanging tagatukoy na maaari kong tumalon sa paligid. 738 00:32:07,690 --> 00:32:11,520 At mas mahusay kaysa sa na ay pa rin na gaano kalaki ang isang int pagpunta sa maging muli? 739 00:32:11,520 --> 00:32:14,450 740 00:32:14,450 --> 00:32:15,800 32 bits o apat na bytes. 741 00:32:15,800 --> 00:32:17,750 >> Gaano kalaki pagpunta ay ang aking username upang maging? 742 00:32:17,750 --> 00:32:20,310 743 00:32:20,310 --> 00:32:21,990 Maximally? 744 00:32:21,990 --> 00:32:22,880 16 bytes. 745 00:32:22,880 --> 00:32:26,080 >> Kaya, kung kayo ay tunay na pag-aalaga tungkol ang pagganap ng iyong code, 746 00:32:26,080 --> 00:32:31,390 sa tingin bumalik sa PSet5, ang gusto ninyo maghanap para sa isang halaga na apat byte o isang 16 747 00:32:31,390 --> 00:32:32,240 byte halaga, di ba? 748 00:32:32,240 --> 00:32:33,810 Talagang ito ay isang pagpapasok na. 749 00:32:33,810 --> 00:32:38,060 Kailangan mong gawin ang apat na beses ng mas maraming trabaho upang maghanap para sa mga username dahil sa mga 750 00:32:38,060 --> 00:32:38,830 mga 16 bytes. 751 00:32:38,830 --> 00:32:41,320 Kaya, kailangan mong literal ihambing ang lahat ng 16 bytes upang maging 752 00:32:41,320 --> 00:32:43,140 bang oo, ito ay username na gusto ko. 753 00:32:43,140 --> 00:32:46,610 Sapagkat para sa isang int, maaari mong gawin ito sa bytes apat lang. 754 00:32:46,610 --> 00:32:49,212 >> At bilang isang bukod para sa mga interesado sa computer hardware, 755 00:32:49,212 --> 00:32:52,420 ito ay lumiliko out na maaari mong magkasya sa isang bagay tulad isang int o isang 32-bit na halaga sa isang bagay 756 00:32:52,420 --> 00:32:55,330 tinatawag na isang magrehistro sa isang computer CPU, na nangangahulugan na ito ay sobrang, 757 00:32:55,330 --> 00:32:58,400 sobrang mabilis, kahit na sa pinakamababang antas ng hardware ng computer. 758 00:32:58,400 --> 00:33:00,530 So, may lamang mga pakinabang sa buong paligid. 759 00:33:00,530 --> 00:33:01,530 Kaya, ano ang ibig sabihin nito? 760 00:33:01,530 --> 00:33:04,850 Sa katunayan, kapag ikaw ay pagdisenyo ng isang database table, halos lahat ng oras 761 00:33:04,850 --> 00:33:07,170 ikaw ay pagpunta sa may hindi lamang ang data na mahalaga sa iyo, 762 00:33:07,170 --> 00:33:09,280 kundi pati na rin ang isang bagay tulad isang natatanging identifier 763 00:33:09,280 --> 00:33:11,280 dahil ito ay pagpunta sa ipaalam sa amin gawin ang iba pang mga bagay. 764 00:33:11,280 --> 00:33:13,160 At ni trip sa ibabaw ng isa problema dito. 765 00:33:13,160 --> 00:33:15,990 >> Ipagpalagay na ang mga gumagamit ay may hindi mga username at mga pangalan lamang, 766 00:33:15,990 --> 00:33:19,540 ngunit mayroon din silang mga bagay-bagay tulad ng mga lungsod at mga estado at zip code, hindi bababa sa 767 00:33:19,540 --> 00:33:20,432 dito sa US. 768 00:33:20,432 --> 00:33:22,390 Kaya, ako pagpunta sa sige at mabilis lang sabihin, 769 00:33:22,390 --> 00:33:26,180 bigyan mo ako ng tatlong higit pang mga haligi sa dulo ng table. 770 00:33:26,180 --> 00:33:28,900 At ito ay magiging City, ito ay magiging Estado, 771 00:33:28,900 --> 00:33:30,400 at ito ay magiging Zip. 772 00:33:30,400 --> 00:33:32,710 >> Ngayon uri City, kung ano ang data dapat na ito, marahil? 773 00:33:32,710 --> 00:33:35,460 774 00:33:35,460 --> 00:33:35,989 VARCHAR? 775 00:33:35,989 --> 00:33:37,780 Hindi ko alam kung ano ang pinakamahabang School pangalan ay. 776 00:33:37,780 --> 00:33:40,571 Sa isang lugar sa America, may marahil ilang ridiculously mahabang salita, 777 00:33:40,571 --> 00:33:43,605 kaya pumunta lamang kay 255 ipaalam, medyo kasaysayan o nagkataon. 778 00:33:43,605 --> 00:33:44,730 Estado, ano ang gusto mong gawin? 779 00:33:44,730 --> 00:33:48,380 780 00:33:48,380 --> 00:33:50,367 Parusa call, di ba? 781 00:33:50,367 --> 00:33:51,700 Ano ang marahil ang pinaka-mahusay? 782 00:33:51,700 --> 00:33:53,500 Gaano karaming mga character? 783 00:33:53,500 --> 00:33:55,950 Siguro ay dalawa lamang, kung kaya namin lumayo sa paggawa lamang, 784 00:33:55,950 --> 00:33:58,250 tulad ng, MA para sa Massachusetts at iba pa. 785 00:33:58,250 --> 00:34:00,520 Kaya, ako pagpunta sa pumunta sa isang pansamantalang trabaho na halaga ng dalawang. 786 00:34:00,520 --> 00:34:03,080 >> Zip code ay isang nakawiwiling isa. 787 00:34:03,080 --> 00:34:06,679 Nandito kami sa 02138, upang Iminumungkahi namin ay dapat gamitin kung ano? 788 00:34:06,679 --> 00:34:07,470 Ito ay isang int, i-right? 789 00:34:07,470 --> 00:34:10,030 790 00:34:10,030 --> 00:34:12,800 Int, int, maikling? 791 00:34:12,800 --> 00:34:14,521 Maikling gumagana. 792 00:34:14,521 --> 00:34:15,020 Hindi? 793 00:34:15,020 --> 00:34:18,920 794 00:34:18,920 --> 00:34:20,870 Pansamantalang trabaho o limang, ngunit ko gusto ng isang int. 795 00:34:20,870 --> 00:34:23,710 Bakit uurong sa isang int? 796 00:34:23,710 --> 00:34:26,820 Akitin mo ako sa mga ito. 797 00:34:26,820 --> 00:34:29,210 Ano ang tangang tungkol sa isang int, ang aking mga ideya? 798 00:34:29,210 --> 00:34:29,871 Oo. 799 00:34:29,871 --> 00:34:31,199 >> Madla: Dumaan up ng mas maraming memory. 800 00:34:31,199 --> 00:34:32,909 >> David MALAN: Dumaan up ng mas maraming memory. 801 00:34:32,909 --> 00:34:35,310 Apat bytes, ngunit ikaw ay pagpapanukala ng isang zip code 802 00:34:35,310 --> 00:34:39,000 bilang ng limang bytes o ang isang tao ay bilang isang pansamantalang trabaho, na nararamdaman ko eh, iyan ay hindi tunay 803 00:34:39,000 --> 00:34:39,620 ang kaso. 804 00:34:39,620 --> 00:34:40,489 >> Well, masaya na kuwento. 805 00:34:40,489 --> 00:34:43,179 Taon na ang nakaraan, kapag ginamit ko upang gamitin Microsoft Outlook para sa aking mga email, 806 00:34:43,179 --> 00:34:45,150 Huli ko nais upang lumipat sa Gmail. 807 00:34:45,150 --> 00:34:48,949 At ito, nai-export ang lahat ng aking mga contact mula sa Outlook bilang isang CSV file. 808 00:34:48,949 --> 00:34:50,699 Comma separated values, na lang ako sinadya 809 00:34:50,699 --> 00:34:54,060 nagkaroon ng lahat ng aking mga pangalan ng mga kaibigan at mga huling mga pangalan at numero ng telepono at zip code 810 00:34:54,060 --> 00:34:54,747 at ang lahat ng iyon. 811 00:34:54,747 --> 00:34:56,580 At pagkatapos ay ako na ginawa ang pagkakamali ng pagbubukas ito 812 00:34:56,580 --> 00:34:58,640 sa Excel, na isang spreadsheet program na 813 00:34:58,640 --> 00:35:00,289 nauunawaan CSV file bilang nasaksihan namin. 814 00:35:00,289 --> 00:35:03,080 Ngunit pagkatapos, ako ay dapat na magkaroon ng hit, tulad ng, Command o Control S sa isang punto. 815 00:35:03,080 --> 00:35:06,250 At Excel tila sa oras ay nagkaroon ng isang tampok na kung saan anumang oras na ito 816 00:35:06,250 --> 00:35:08,100 Nakita ng isang numero, sinubukan ito upang maging kapaki-pakinabang. 817 00:35:08,100 --> 00:35:11,610 At kung number na nagsimula sa zero, ito ay lamang mapupuksa ang mga ito. 818 00:35:11,610 --> 00:35:13,420 Bakit kailangan mo ng nangungunang zero sa integer? 819 00:35:13,420 --> 00:35:15,140 Ang mga ito ay walang kahulugan, mathematically. 820 00:35:15,140 --> 00:35:17,530 Hindi ito mga walang kahulugan sa US Postal system. 821 00:35:17,530 --> 00:35:19,954 Kaya, ako ay para sa taon, sa araw na ito, ako pa rin 822 00:35:19,954 --> 00:35:22,370 may mga kaibigan na kapag ang bihirang kaso na kailangan ko ng isang tao 823 00:35:22,370 --> 00:35:24,078 tugunan ang mga araw, Kukunin ko pa rin makita na ako 824 00:35:24,078 --> 00:35:26,767 magkaroon ng isang kaibigan sa Cambridge, Massachusetts, 2138. 825 00:35:26,767 --> 00:35:29,350 At ito ay nakakainis na kung ikaw ay sinusubukan na ayusin ng programming 826 00:35:29,350 --> 00:35:30,975 bumuo envelopes o lista lang ito pababa. 827 00:35:30,975 --> 00:35:33,599 At iyon ay dahil sa mga kadahilanang ito, Pinili ko ang maling uri ng data. 828 00:35:33,599 --> 00:35:34,490 Kaya, ang pag-ibig ko ang iyong mga ideya. 829 00:35:34,490 --> 00:35:35,650 Gamitin natin ang isang patlang char Hayaan. 830 00:35:35,650 --> 00:35:38,340 Limang letra, maliban mayroong isang sulok kaso. 831 00:35:38,340 --> 00:35:42,220 Kung ikaw pa rin magpadala ng mail, minsan zip code ng mga araw na ito, 832 00:35:42,220 --> 00:35:45,360 na ang mga ito, tulad ng, kasama ang apat. 833 00:35:45,360 --> 00:35:48,200 Kaya, kailangan namin ng isang gitling at pagkatapos ay kailangan namin ng apat na higit pang mga numero. 834 00:35:48,200 --> 00:35:50,330 Kaya upang maging matapat, ito ay maaaring pumunta maraming iba't ibang paraan. 835 00:35:50,330 --> 00:35:52,371 >> Para sa ngayon, ako pagpunta sa panatilihin ito lamang ay simple at ako 836 00:35:52,371 --> 00:35:54,780 pagpunta sa sabihin na ito ay isang limang char halaga at hindi namin 837 00:35:54,780 --> 00:35:56,739 pagpunta upang laktawan ang buong dash plus apat. 838 00:35:56,739 --> 00:35:58,280 Ngunit ito ay ang mga uri ng mga tradeoffs. 839 00:35:58,280 --> 00:36:00,196 At maaari mong isipin ang parehong mga problema na sanhi 840 00:36:00,196 --> 00:36:01,860 na may mga numero ng telepono o iba pang mga patlang. 841 00:36:01,860 --> 00:36:04,350 >> At ngayon, ito ay tunay na isang mangmang kalsada upang pumunta down. 842 00:36:04,350 --> 00:36:08,000 Ipagpalagay parehong Rob at ako at Hannah at Maria at [? Davon?] At Andy 843 00:36:08,000 --> 00:36:12,820 at ang iba sa mga tauhan ng lahat ng nakatira sa Cambridge, Massachusetts, 02138. 844 00:36:12,820 --> 00:36:17,970 Ito ang tunay na pakiramdam tangang na ako pagdaragdag sa aking mga gumagamit ng talahanayan, lungsod, estado, 845 00:36:17,970 --> 00:36:18,630 at zip. 846 00:36:18,630 --> 00:36:20,980 Bakit? 847 00:36:20,980 --> 00:36:21,960 >> Madla: [hindi marinig] 848 00:36:21,960 --> 00:36:22,918 >> David MALAN: Sabihing muli? 849 00:36:22,918 --> 00:36:24,310 Madla: [hindi marinig] 850 00:36:24,310 --> 00:36:25,850 >> David MALAN: Sila ay palaging pagpunta sa pumunta magkasama, di ba? 851 00:36:25,850 --> 00:36:28,660 Kapag ito ay lumiliko out, ginamit namin sa tingin ito ay ang kaso hanggang sa kami exhaustively 852 00:36:28,660 --> 00:36:30,570 naghanap ang buong US, at lumiliko out na mayroong 853 00:36:30,570 --> 00:36:32,653 ang ilang mga hindi pagkakapare-pareho kung saan magkaroon ng maramihang mga bayan 854 00:36:32,653 --> 00:36:35,060 parehong zip, na kung saan ay kakaiba. 855 00:36:35,060 --> 00:36:40,580 Subalit, kung kami itakda para sa ngayon na ang 02138 ay palaging Cambridge, Massachusetts, 856 00:36:40,580 --> 00:36:44,910 bakit sa mundo ay iniimbak mo sa iyong database Cambridge at MA at 02138 857 00:36:44,910 --> 00:36:49,357 para sa akin at para sa Hannah at para sa looban at para [? Davon?] At para sa iba na nakatira 858 00:36:49,357 --> 00:36:51,190 dito sa Cambridge, ito ay ganap na ganap na maulit. 859 00:36:51,190 --> 00:36:54,480 >> Dapat nating lumayo sa pamamagitan lamang ng pag-iimbak ng kung ano? 860 00:36:54,480 --> 00:36:55,610 Basta ang zip code. 861 00:36:55,610 --> 00:36:58,660 Ngunit pagkatapos, kung store lang namin ang zip code, ko nais, marahil, 862 00:36:58,660 --> 00:37:02,160 para sa aking website upang malaman kung saan 02138 ay. 863 00:37:02,160 --> 00:37:03,910 Kaya, kailangan ko ng isa pang table. 864 00:37:03,910 --> 00:37:04,697 At iyon ang OK. 865 00:37:04,697 --> 00:37:07,530 At sa katunayan, ito ay isa sa mga disenyo ng mga proseso ng pagdisenyo ng mga talahanayan 866 00:37:07,530 --> 00:37:11,472 na kailangan mong gawin sa PSet7 pati kung saan Gusto mong i-factor out karaniwang data. 867 00:37:11,472 --> 00:37:14,430 Tulad na lamang ng nai factoring out namin karaniwang code at factoring out karaniwang 868 00:37:14,430 --> 00:37:17,380 estilo mula sa CSS, dito masyadong sa database, 869 00:37:17,380 --> 00:37:21,180 kung kailangan ko lamang 02138 na natatanging makilala hometown ng isang tao, 870 00:37:21,180 --> 00:37:25,020 hindi nag-iimbak Cambridge, Mass para sa bawat darn user sa iyong talahanayan. 871 00:37:25,020 --> 00:37:29,770 >> Sa halip, magkaroon ng isang hiwalay na talahanayan na tinatawag na Zips na dapat magkaroon ng kung ano ang mga haligi? 872 00:37:29,770 --> 00:37:33,490 Marahil ng isang patlang ng ID, dahil lamang, para sa ang mga prinsipyo namin pinag-uusapan tungkol sa ngayon. 873 00:37:33,490 --> 00:37:35,720 Malamang na isang zip na larangan para sa 02138. 874 00:37:35,720 --> 00:37:38,400 At pagkatapos ay marahil kung ano ang iba pang mga hanay? 875 00:37:38,400 --> 00:37:42,950 City at ng estado, ngunit may isa lamang hilera para sa 02138, isang hilera para sa 02139, 876 00:37:42,950 --> 00:37:44,772 isang hilera para sa 90210. 877 00:37:44,772 --> 00:37:46,730 At iyon ay literal lahat ng mga zip code ng alam ko. 878 00:37:46,730 --> 00:37:49,012 >> Kaya ngayon, kung ano ang maaari mong gawin? 879 00:37:49,012 --> 00:37:51,220 Ito ay may problema, dahil ngayon Mayroon akong dalawang mga talahanayan. 880 00:37:51,220 --> 00:37:54,660 Kaya, ang aking mga user ay halos sa paglipas dito, ngunit ang impormasyon lungsod estado ng kanilang ay 881 00:37:54,660 --> 00:37:55,390 dito. 882 00:37:55,390 --> 00:37:58,635 Kaya, ito ay lumiliko out sa SQL, may talagang isang paraan upang sumali sa impormasyon, 883 00:37:58,635 --> 00:38:00,470 at makikita mo ito sa pset. 884 00:38:00,470 --> 00:38:03,000 >> Ngunit ito ay lumiliko out maaari mong gawin ang isang bagay tulad nito. 885 00:38:03,000 --> 00:38:10,501 SELECT star FROM gumagamit, SUMALI zips ON gumagamit dot zip katumbas zips dot zip. 886 00:38:10,501 --> 00:38:13,360 Aling ay isang maliit na labis sa mga salita, tinatanggap na, ngunit ito lamang 887 00:38:13,360 --> 00:38:17,590 nangangahulugan piliin ang lahat mula sa proseso ng pagkuha ng aking mga gumagamit ng talahanayan 888 00:38:17,590 --> 00:38:19,580 at ang aking mga talahanayan zips. 889 00:38:19,580 --> 00:38:22,120 Sumali sa mga ito sa isang field na mayroon sila sa column. 890 00:38:22,120 --> 00:38:24,780 Kaya, literal paggawa ng isang bagay tulad nito, at bigyan ako pabalik 891 00:38:24,780 --> 00:38:27,360 ng isang bagong pansamantalang talahanayan iyon ang mas malawak, na ang mas malaki, 892 00:38:27,360 --> 00:38:29,450 na mayroon ng lahat ng mga hanay mula sa pareho ng mga ito. 893 00:38:29,450 --> 00:38:33,510 At iyon, medyo simple, ang magiging syntax para sa paggawa ng isang bagay na katulad nito. 894 00:38:33,510 --> 00:38:35,540 >> Kaya, mayroong ito nang mas maaga, ngunit may pagpunta 895 00:38:35,540 --> 00:38:38,950 maging iba pang mga disenyo ng mga desisyon bibigyan ka may sa gumawa, hindi lamang sa mga ini-index 896 00:38:38,950 --> 00:38:40,550 kundi pati na rin ang tumatakbo sa mga hamon. 897 00:38:40,550 --> 00:38:43,360 Sa katunayan, may isang hamon sa anumang disenyo database 898 00:38:43,360 --> 00:38:47,930 kung saan minsan maaaring gusto ng dalawang tao upang ma-access ang parehong mga hanay ng database 899 00:38:47,930 --> 00:38:48,530 table. 900 00:38:48,530 --> 00:38:51,450 Kaya, ito ay isang bagay na bibigyan namin ng magkasalubong sa PSet7 rin. 901 00:38:51,450 --> 00:38:54,686 >> Ngunit naisip ko na gusto kong tumingin sa isa pag-atake na posible sa SQL. 902 00:38:54,686 --> 00:38:56,560 Ano ang ilan sa mga mga problema na maaaring lumabas dahil? 903 00:38:56,560 --> 00:38:58,170 Kaya, ikaw ay magkasalubong ito sa PSet7. 904 00:38:58,170 --> 00:39:01,874 At sinabi namin sa inyo nang labag sa batas kung ano ang coding na solusyon para sa problema na ito ay. 905 00:39:01,874 --> 00:39:04,790 Ngunit kung ikaw ay kumuha ng isang mas mataas na antas ng klase, lalo na sa mga operating system, 906 00:39:04,790 --> 00:39:06,950 ikaw ay pagpunta sa magkasalubong isang isyu ng atomicity, 907 00:39:06,950 --> 00:39:10,080 ang problema ng sinusubukan mong gawin maramihang mga bagay nang sabay-sabay 908 00:39:10,080 --> 00:39:11,000 nang walang sagabal. 909 00:39:11,000 --> 00:39:14,560 >> At naisip ko na gusto kong ipakilala ito ideya para PSet7 sa isang talinghaga 910 00:39:14,560 --> 00:39:18,160 na natutunan ko sa aking sarili sa Margo CS164 operating systems Seltzer ni 911 00:39:18,160 --> 00:39:18,990 klase ng mga taon na nakalipas. 912 00:39:18,990 --> 00:39:22,230 Ipagpalagay na mayroon kang isa sa mga dorm fridges sa iyong dorm room o bahay, 913 00:39:22,230 --> 00:39:24,474 at ikaw ay isang tunay na malaking para sa gatas. 914 00:39:24,474 --> 00:39:27,140 At ito, ikaw ay dumating mula sa mga klase isang araw, buksan mo ang refrigerator. 915 00:39:27,140 --> 00:39:27,620 Oh, mapapahamak ang mga ito. 916 00:39:27,620 --> 00:39:28,870 Walang gatas sa refrigerator. 917 00:39:28,870 --> 00:39:32,470 Kaya, ikaw ay isara ang refrigerator, i-lock ang pinto, lock ang iyong dorm, 918 00:39:32,470 --> 00:39:34,770 paglalakad sa paligid ng sulok sa CVS, kumuha sa linya, 919 00:39:34,770 --> 00:39:36,312 at simulan ang check out para sa ilang mga gatas. 920 00:39:36,312 --> 00:39:38,978 At ito ay pagpunta sa tumagal ng ilang panahon, dahil ang mga sumpain sarili checkout 921 00:39:38,978 --> 00:39:40,570 counter tumagal magpakailanman upang gamitin pa rin. 922 00:39:40,570 --> 00:39:41,950 Kaya naman pagdating sa bahay ng iyong mga kasama sa kuwarto. 923 00:39:41,950 --> 00:39:43,470 Siya o talagang may gusto siya gatas rin. 924 00:39:43,470 --> 00:39:45,520 Sila dumating sa dorm room, buksan ang refrigerator, oh, darn ito. 925 00:39:45,520 --> 00:39:46,490 Walang mas maraming gatas. 926 00:39:46,490 --> 00:39:49,040 >> Kaya, siya rin ay napupunta sa paligid ng sulok. 927 00:39:49,040 --> 00:39:51,670 Ngunit ngayon, dahil doon ay tulad ng dalawang o tatlo o apat CVSes malapit, 928 00:39:51,670 --> 00:39:53,800 nangyayari ang mga ito upang pumunta sa isa sa mga iba't-ibang mga sa square. 929 00:39:53,800 --> 00:39:55,830 At kaya ngayon, ng ilang minuto mamaya, pareho ng sa iyo 930 00:39:55,830 --> 00:39:58,060 umuwi at ugh, pinakamasama problema man. 931 00:39:58,060 --> 00:40:00,967 Ngayon ay mayroon ka ng masyadong maraming gatas dahil ito ay pagpunta upang pumunta maasim. 932 00:40:00,967 --> 00:40:03,050 At gusto mo ng gatas, ngunit ikaw hindi mo talaga gusto gatas. 933 00:40:03,050 --> 00:40:06,730 >> Kaya ngayon, ito ay isang mamahaling pagkakamali dahil pareho ng sa iyo 934 00:40:06,730 --> 00:40:09,870 ginawa ng isang desisyon batay sa estado ng ilang mga variable na 935 00:40:09,870 --> 00:40:12,660 ay nasa proseso ng ay binago sa pamamagitan ng sa iyo, 936 00:40:12,660 --> 00:40:14,560 ang initiator ng pagpunta upang makakuha ng gatas. 937 00:40:14,560 --> 00:40:17,785 Kaya, ano ay marahil isang tao solusyon sa problemang ito? 938 00:40:17,785 --> 00:40:18,660 Madla: [hindi marinig] 939 00:40:18,660 --> 00:40:19,430 David MALAN: Mag-iwan ng tala, tama? 940 00:40:19,430 --> 00:40:21,850 Palaging mag-iwan ng isang tala, kung ikaw ay pamilyar na ipakita. 941 00:40:21,850 --> 00:40:23,100 Oo, may mga dalawa sa amin. 942 00:40:23,100 --> 00:40:25,940 Kaya, palaging mag-iwan ng isang tala, o literal i-lock ang refrigerator 943 00:40:25,940 --> 00:40:28,602 na may ilang mga uri ng padlock o isang bagay sa ibabaw ng tuktok na tulad ng. 944 00:40:28,602 --> 00:40:31,310 Ngunit na ang aktwal na pagpunta sa maging key problema sa database ng disenyo, 945 00:40:31,310 --> 00:40:34,710 lalo na kapag maaari kang magkaroon ng maraming mga browser, ang maramihang mga laptop, 946 00:40:34,710 --> 00:40:37,450 maramihang mga gumagamit sa lahat ng sinusubukan mong i-update ang impormasyon sa isang beses. 947 00:40:37,450 --> 00:40:40,590 Lalo na ang sensitibong impormasyon tulad pinansyal na impormasyon, 948 00:40:40,590 --> 00:40:43,350 kung saan may stock na kalakalan website tulad ng makikita mo na gusali, 949 00:40:43,350 --> 00:40:47,270 ano kung nais mong suriin kung gaano karaming pera mayroon ka at pagkatapos ay kung ikaw ay may sapat na, 950 00:40:47,270 --> 00:40:48,490 bumili ng ilang mga stock? 951 00:40:48,490 --> 00:40:50,899 >> Ngunit paano kung may ibang tao na may isang pinagsamang account sa iyo 952 00:40:50,899 --> 00:40:52,690 ay sabay-sabay na sinusubukan bumili ng ilang mga stock? 953 00:40:52,690 --> 00:40:55,190 Kaya, siya ay pagsuri sa balanse sa account, pareho ng sa iyo 954 00:40:55,190 --> 00:40:57,540 makabalik sa parehong Ang sagot, walang gatas. 955 00:40:57,540 --> 00:41:00,580 O pareho kayong bumalik ang sagot, Mayroon ka ng $ 100 sa account. 956 00:41:00,580 --> 00:41:04,680 Pareho kayong subukan upang gawin ang mga desisyon upang bumili ng isa share ng ilang mga stock kumpanya. 957 00:41:04,680 --> 00:41:06,130 >> At ngayon, ano ang mangyayari? 958 00:41:06,130 --> 00:41:07,140 Mayroon kang dalawang mga namamahagi? 959 00:41:07,140 --> 00:41:08,420 Ikaw ay walang mga namamahagi? 960 00:41:08,420 --> 00:41:10,320 Problema mo na maaaring lumabas. 961 00:41:10,320 --> 00:41:11,755 Kaya, makikita nakatagpo namin iyon. 962 00:41:11,755 --> 00:41:14,630 SQL iniksyon atake, thankfully, ay isang bagay na kami ay makakatulong sa iyo ng, 963 00:41:14,630 --> 00:41:17,430 ngunit ang mga ito ay atrociously karaniwang mga araw pa rin. 964 00:41:17,430 --> 00:41:18,680 Kaya, ito ay isang halimbawa lamang. 965 00:41:18,680 --> 00:41:21,290 Gumawa ako nang walang pag-angkin na Harvard PIN sistema ay 966 00:41:21,290 --> 00:41:23,130 mahina laban sa mga ito partikular na pag-atake. 967 00:41:23,130 --> 00:41:24,160 Sinubukan naming. 968 00:41:24,160 --> 00:41:26,120 Subalit, alam mo na kami magkaroon ng isang patlang tulad nito. 969 00:41:26,120 --> 00:41:29,620 At Net ID Yale ay may isang katulad na naghahanap screen na mga araw. 970 00:41:29,620 --> 00:41:33,190 At ito ay lumiliko out, na siguro ang PIN sistema ay ipinatupad sa PHP. 971 00:41:33,190 --> 00:41:37,050 >> At kung were-- ito ito ay not-- sila ay maaaring magkaroon ng code na mukhang ganito. 972 00:41:37,050 --> 00:41:38,210 Sila ay may dalawang variable. 973 00:41:38,210 --> 00:41:42,495 Bigyan mo ako ng username at password mula sa mga post sobrang global variable 974 00:41:42,495 --> 00:41:43,970 na usapan natin ang tungkol sa mas maaga. 975 00:41:43,970 --> 00:41:47,310 Siguro Harvard ay may isang query tulad SELECT star FROM gumagamit 976 00:41:47,310 --> 00:41:50,005 kung saan username katumbas na at katumbas password na iyon. 977 00:41:50,005 --> 00:41:51,880 At pansinin na lang ako i-plug ang mga ito sa paggamit ng 978 00:41:51,880 --> 00:41:55,050 ang kulot suhay pagtatanda mula sa iba pang mga araw, na kung saan ay nangangahulugan lamang plug sa ang halaga 979 00:41:55,050 --> 00:41:55,550 dito. 980 00:41:55,550 --> 00:41:57,449 Hindi ko gamit ang tandang pananong pamamaraan. 981 00:41:57,449 --> 00:41:59,240 Hindi ko ay may anumang pangalawang o pangatlong argumento. 982 00:41:59,240 --> 00:42:02,350 Ako ay literal lamang paggawa sa mga string ng aking sarili. 983 00:42:02,350 --> 00:42:04,930 >> Ang problema, bagaman, ay na kung ang isang tao ay tulad ng isang scroob, 984 00:42:04,930 --> 00:42:09,020 kung saan ay isang reference sa isang film, nagla-log in sa isang bagay na tulad nito, 985 00:42:09,020 --> 00:42:11,250 at inalis ko na ang mga tuldok na karaniwang cover up 986 00:42:11,250 --> 00:42:14,370 mga password, kung ano kung siya ay lalo na malisyosong 987 00:42:14,370 --> 00:42:18,860 at ang kanyang mga password na siguro ay 12345, bawat ang pelikula na tinatawag na "Spaceballs," 988 00:42:18,860 --> 00:42:21,970 ngunit siya uri critically isang single quote pagkatapos ng limang, 989 00:42:21,970 --> 00:42:24,790 pagkatapos ay literal ang mga salita o sa puwang, at pagkatapos quote, 990 00:42:24,790 --> 00:42:29,160 magpanipi isa ay katumbas ng quote ng isa, ngunit mapansin siya ay tinanggal na ano? 991 00:42:29,160 --> 00:42:32,700 Siya ay tinanggal na ang quote sa kanan at siya ay tinanggal na ang quote sa kaliwa. 992 00:42:32,700 --> 00:42:35,170 >> Dahil kung attacker na ito aakala scroob ni 993 00:42:35,170 --> 00:42:38,160 ay na ang mga tao na sinulat ang code na ito PHP ay hindi kaya maliwanag, 994 00:42:38,160 --> 00:42:42,990 baka mayroon lamang silang ilang mga single quotes sa paligid ng agaw 995 00:42:42,990 --> 00:42:45,210 ng isang variable sa curly braces? 996 00:42:45,210 --> 00:42:48,620 At kaya siguro, maaaring siya uri ng makumpleto ang kanilang pag-iisip 997 00:42:48,620 --> 00:42:53,290 para sa kanila, ngunit sa isang paraan na ang nangyayari upang ipaalam sa kanya hacked sa PIN system. 998 00:42:53,290 --> 00:42:55,310 Sa ibang salita, ipagpalagay na ito ay ang code 999 00:42:55,310 --> 00:42:57,140 at kami plug ngayon sa kung ano scroob type. 1000 00:42:57,140 --> 00:42:58,770 At ito ay pula, dahil ito ay masama. 1001 00:42:58,770 --> 00:43:01,310 >> At ang kalakip na teksto ay kung ano siya nai-type sa, 1002 00:43:01,310 --> 00:43:05,510 scroob maaaring linlangin server Harvard ni sa paggawa sa isang SQL query 1003 00:43:05,510 --> 00:43:07,440 string na ganito ang hitsura. 1004 00:43:07,440 --> 00:43:11,760 Ay katumbas ng Password 12345 o isa ay katumbas ng isa. 1005 00:43:11,760 --> 00:43:14,820 Ang resulta ng kung saan, lohikal, ay na ito ay mag-log scroob 1006 00:43:14,820 --> 00:43:18,360 sa kung ang kanyang password ay 12345 o kung ang isa ay katumbas ng 1007 00:43:18,360 --> 00:43:22,660 isa, na kung saan ay siyempre palaging totoo, na nangangahulugan scroob laging nakakakuha in. 1008 00:43:22,660 --> 00:43:26,060 >> At ito, ang mga paraan upang ayusin ito, tulad ng sa isang pulutong ng mga kaso, 1009 00:43:26,060 --> 00:43:28,140 ay sumulat ng mas defensively. 1010 00:43:28,140 --> 00:43:30,390 Upang gamitin ang isang bagay tulad ng ating aktwal na query function, na kung saan 1011 00:43:30,390 --> 00:43:33,980 makikita mo sa PSet7, kung saan kami plug in isang bagay tulad ng tanong nagmamarka dito. 1012 00:43:33,980 --> 00:43:35,980 At ang kagandahan ng query function na tayo 1013 00:43:35,980 --> 00:43:40,010 magbibigay sa iyo ay ito ipinagtatanggol laban sa mga pag-atake sa tinatawag iniksyon SQL, kung saan 1014 00:43:40,010 --> 00:43:44,260 ang isang tao ay tricking ang iyong code sa injecting kanyang sariling SQL code. 1015 00:43:44,260 --> 00:43:47,380 Dahil kung ano ang function query bigyan namin sa inyo ay talagang gawin, 1016 00:43:47,380 --> 00:43:51,270 kung gagamitin mo ang question mark syntax at isang pangalawang at ang ikatlong argument dito, 1017 00:43:51,270 --> 00:43:54,590 ay kung ano ang ginawa ito idagdag sa input na ibinigay sa user? 1018 00:43:54,590 --> 00:43:56,060 Ang mga backslash quotes. 1019 00:43:56,060 --> 00:43:58,590 >> Kaya, ito escapes anumang maaring mapanganib na mga character. 1020 00:43:58,590 --> 00:44:01,000 Mukhang ito kakaiba ngayon, ngunit ito ay hindi madaling matukso 1021 00:44:01,000 --> 00:44:03,260 dahil ito ay hindi baguhin ang logic anymore 1022 00:44:03,260 --> 00:44:06,470 dahil na buo password ay ngayon ng isang solong quote na hindi, 1023 00:44:06,470 --> 00:44:07,596 sa katunayan, password scroob ni. 1024 00:44:07,596 --> 00:44:09,845 Kaya, mayroong nangyaring ng ilang mga jokes tungkol sa mga ito sa paglipas ng mga taon. 1025 00:44:09,845 --> 00:44:12,570 Kaya, ito ay kinuha ng isang larawan ng ilang mga geek sa isang paradahan 1026 00:44:12,570 --> 00:44:16,620 kung saan maaari mong malaman na ang ilang mga lungsod at estado subukan na i-scan ang iyong lisensya 1027 00:44:16,620 --> 00:44:19,460 plate upang singilin ka o upang ticket mo kung ikaw ay pupunta sa pamamagitan nang walang, tulad ng, 1028 00:44:19,460 --> 00:44:20,660 ang E-Z Pass bagay. 1029 00:44:20,660 --> 00:44:24,490 Kaya, ang taong ito ituring na siguro ang mga tao sa pagsulat ng mga E-Z Pass sistema 1030 00:44:24,490 --> 00:44:28,240 ay hindi kaya maliwanag, at marahil sila lamang concatenated-sama ng isang string, 1031 00:44:28,240 --> 00:44:32,190 upang hindi siya maaaring maliciously hindi lamang makumpleto ang kanilang pag-iisip, 1032 00:44:32,190 --> 00:44:35,150 pero sa totoo magsagawa ng isang masamang command, na kung saan hindi pa kami nabanggit, 1033 00:44:35,150 --> 00:44:36,380 ngunit maaari mong marahil hulaan. 1034 00:44:36,380 --> 00:44:39,820 Na bukod sa tanggalin at ipasok at i-update at piliin, 1035 00:44:39,820 --> 00:44:43,370 mayroong isang keyword drop tinatawag din na, na literal na tinatanggal ang lahat ng bagay 1036 00:44:43,370 --> 00:44:45,300 sa database, na kung saan ay partikular na masamang. 1037 00:44:45,300 --> 00:44:48,760 >> Maaari naming mag-zoom in sa mga ito kung ito ay isang maliit na matigas na makita. 1038 00:44:48,760 --> 00:44:52,300 Ito, ngayon, ay isang sikat na cartoon iyan ay kamangha-mangha matalino ngayon 1039 00:44:52,300 --> 00:44:53,145 at maliwanag. 1040 00:44:53,145 --> 00:45:00,880 1041 00:45:00,880 --> 00:45:04,750 >> [Tawa] 1042 00:45:04,750 --> 00:45:05,910 >> Oo, cool. 1043 00:45:05,910 --> 00:45:06,800 Uri ng geeking out. 1044 00:45:06,800 --> 00:45:08,800 Kaya ang mga ito, pagkatapos, ay Atake ng iniksyon SQL. 1045 00:45:08,800 --> 00:45:13,050 At ang mga ito upang madaling upang maiwasan sa pamamagitan ng paggamit kanan code o ang karapatan ng mga aklatan. 1046 00:45:13,050 --> 00:45:15,947 At makikita mo sa PSet7, na ang kung bakit namin sa iyo ang mga function na query. 1047 00:45:15,947 --> 00:45:17,780 Kaya, isang pares ng mga teaser na naisip namin gusto namin 1048 00:45:17,780 --> 00:45:19,930 bigyan ka dito sa aming natitirang minuto magkasama. 1049 00:45:19,930 --> 00:45:24,030 Kaya, tandaan mo mula sa linggo zero, tayo ipinakilala ang dalawang mga bombilya ng ilaw na 1050 00:45:24,030 --> 00:45:26,610 ay nice, hindi lamang dahil ang mga ito ay kaakit-akit at buhay na buhay, 1051 00:45:26,610 --> 00:45:29,450 pero dahil sila ay sumusuporta sa isang bagay tinatawag na isang API, isang Application 1052 00:45:29,450 --> 00:45:31,980 Programming Interface At sa CS50 kaya sa ngayon, hindi namin 1053 00:45:31,980 --> 00:45:34,440 halos nakatutok sa GET at POST, ngunit ito ay lumiliko out 1054 00:45:34,440 --> 00:45:37,390 mayroong iba pang mga HTTP mga pandiwa tulad PUT. 1055 00:45:37,390 --> 00:45:39,430 >> At sa katunayan, ito ay isang slide mula sa linggo zero 1056 00:45:39,430 --> 00:45:44,930 kung saan kung sumulat ka ng code na nagpapadala a la PSet6 isang HTTP na kahilingan na 1057 00:45:44,930 --> 00:45:49,647 ganito ang hitsura nito na may ganitong bahagi ng teksto sa ibaba, na kung saan ay tinatawag na JSON, 1058 00:45:49,647 --> 00:45:52,230 o JavaScript Bagay pagtatanda na makikita namin makipag-usap tungkol sa susunod na linggo, 1059 00:45:52,230 --> 00:45:57,030 maaari mong i-on o i-off o pagbabago ang kulay ng ilaw tulad ng mga iyon. 1060 00:45:57,030 --> 00:46:00,480 Kaya kung CS50 ay mayroon ding bilang karagdagan sa ilang ng mga bombilya ng ilaw dito sa New Haven 1061 00:46:00,480 --> 00:46:02,480 kung nais mong humiram mga ito para sa huling proyekto, 1062 00:46:02,480 --> 00:46:04,370 ilang din Microsoft Mga banda, na kung saan ay tulad ng 1063 00:46:04,370 --> 00:46:07,619 relo na magsuot ka sa paligid ng iyong pulso na parehas ay may isang API upang ikaw 1064 00:46:07,619 --> 00:46:10,040 maaaring isulat ang iyong sariling mga software para sa kanila. 1065 00:46:10,040 --> 00:46:12,490 >> Kami ay may isang account na may IOS code ng Apple kaya 1066 00:46:12,490 --> 00:46:15,510 na kung mayroon kang isang Apple Watch o isang iPhone o isang iPad o iPod, 1067 00:46:15,510 --> 00:46:17,707 Maaari mong isulat ang code na aktwal na tumatakbo sa mga iyon. 1068 00:46:17,707 --> 00:46:19,540 Mayroon kaming isang buong grupo ng Arduinos, na kung saan ay 1069 00:46:19,540 --> 00:46:22,010 maliit na maliit maliit na mga computer walang kaso, mahalagang, 1070 00:46:22,010 --> 00:46:25,240 na maaari mong kumonekta sa pamamagitan ng USB, kadalasan sa iyong sariling Mac o PC, 1071 00:46:25,240 --> 00:46:28,810 isulat ang code na tumatakbo sa mga pisikal na aparato na madalas ay may mga sensor sa mga ito 1072 00:46:28,810 --> 00:46:30,790 upang maaari mong makipag-ugnay sa tunay na mundo. 1073 00:46:30,790 --> 00:46:32,860 Mayroon kaming isang buong grupo ng mga aparato Leap Motion, 1074 00:46:32,860 --> 00:46:36,500 na kung saan ay USB device para sa mga Mac at PCs, dito at muli, sa New Haven. 1075 00:46:36,500 --> 00:46:40,080 At kapag ikinonekta mo ito sa iyong Mac, Maaari mong aktwal na kontrolin ang iyong computer 1076 00:46:40,080 --> 00:46:42,550 sa pamamagitan ng pagsusulat ng software na sa pamamagitan ng infrared beam, 1077 00:46:42,550 --> 00:46:46,360 mga numero kung saan ang iyong mga kamay ng tao ay, kahit na walang pagpindot sa iyong keyboard. 1078 00:46:46,360 --> 00:46:49,135 Naisip naming ibahagi ang isang mabilis na sulyap sa ito, halimbawa. 1079 00:46:49,135 --> 00:46:51,428 >> [MUSIC nagpe-play] 1080 00:46:51,428 --> 00:47:55,840 1081 00:47:55,840 --> 00:47:57,590 Kaya, kami ay isang buong grupo ng mga bagay na ito, 1082 00:47:57,590 --> 00:48:01,040 masyadong, na tinatawag Myo braso banda na kung saan inilagay mo sa ibabaw ng iyong mga bisig 1083 00:48:01,040 --> 00:48:04,595 at pagkatapos ay maaari mong kontrolin ang mga tunay na mundo o virtual na mundo na katulad nito. 1084 00:48:04,595 --> 00:48:06,471 >> [MUSIC nagpe-play] 1085 00:48:06,471 --> 00:49:17,580 1086 00:49:17,580 --> 00:49:20,920 O kaya naman, kami din ay may ilang mga Google Karton, na kung saan ay literal, gaya ng, 1087 00:49:20,920 --> 00:49:24,841 isang karton na kahon na maaari mong ilagay sa iyong mukha, ngunit slide sa iyong telepono sa ito 1088 00:49:24,841 --> 00:49:27,590 sa gayon ay ikaw ay ilagay ang baso ng iyong phone talagang malapit sa iyong mga mata. 1089 00:49:27,590 --> 00:49:30,190 And Google karton ay medyo mura sa $ 10 o $ 20. 1090 00:49:30,190 --> 00:49:32,230 At ito ay may maliit na lenses na bahagyang off shift 1091 00:49:32,230 --> 00:49:35,900 ang imahe sa screen para sa iyong mga tao mata upang bigyan ka ng isang pakiramdam ng pagkakaroon ng malalim 1092 00:49:35,900 --> 00:49:39,550 upang ang iyong aktwal na may isang 3D kapaligiran sa harap mo. 1093 00:49:39,550 --> 00:49:42,927 Mayroon din kaming ilang Samsung Gear, na ay ang mas mahal na bersyon ng mga ito, 1094 00:49:42,927 --> 00:49:46,010 ngunit na parehas maaari slide sa isang Android phone at magbigay sa iyo ng maling akala 1095 00:49:46,010 --> 00:49:48,309 of-- o magbigay ng karanasan ng virtual katotohanan. 1096 00:49:48,309 --> 00:49:50,850 At sa aming huling dalawang minuto, naisip namin na gusto naming subukan upang gawin ito. 1097 00:49:50,850 --> 00:49:55,250 Kung ang maaari kong proyekto kung ano ay Colton dito lamang sa paghahasa iyong gana sa pagkain, 1098 00:49:55,250 --> 00:49:58,442 hayaan mo akong magpatuloy at itapon up sa malaking screen dito. 1099 00:49:58,442 --> 00:49:59,400 Hayaan akong patayin ang mga ilaw. 1100 00:49:59,400 --> 00:50:02,290 Colton, mo nais na sige at ilagay sa iyong cell para sa isang sandali 1101 00:50:02,290 --> 00:50:05,171 at dumating sa higit sa gitna ng entablado? 1102 00:50:05,171 --> 00:50:07,420 At ang gusto mong project-- ito ay kung ano ang nakikita Colton. 1103 00:50:07,420 --> 00:50:10,560 >> Ngayon, ang Wi-Fi sa mga dito ay hindi kaya malakas para sa aparatong ito 1104 00:50:10,560 --> 00:50:13,870 na ito ay sobrang nag-uutos, ngunit Colton ay literal 1105 00:50:13,870 --> 00:50:15,710 sa mahiwagang futuristic lugar. 1106 00:50:15,710 --> 00:50:16,796 Siya lamang ang nakikita ng isang imahe. 1107 00:50:16,796 --> 00:50:19,920 Nakikita mo ang kanyang kaliwa at kanang mata na ang kanyang mga utak ay stitching magkasama 1108 00:50:19,920 --> 00:50:22,260 sa isang tatlong dimensional kapaligiran sa kanyang mukha. 1109 00:50:22,260 --> 00:50:24,319 Lang ang napiling siya ng isang opsyon sa menu dito. 1110 00:50:24,319 --> 00:50:27,360 At kaya muli, siya ang may suot ang headset na ito may Samsung phone sa mga ito na 1111 00:50:27,360 --> 00:50:29,080 wireless project sa aming overhead. 1112 00:50:29,080 --> 00:50:30,349 Ngayon, nag-on Mars, sa tingin ko? 1113 00:50:30,349 --> 00:50:31,140 COLTON: tingin ko ito. 1114 00:50:31,140 --> 00:50:32,181 Hindi ako sigurado [hindi marinig]. 1115 00:50:32,181 --> 00:50:34,250 [Tawa] 1116 00:50:34,250 --> 00:50:36,374 >> David MALAN: Ino-out Mars ay may mga menu. 1117 00:50:36,374 --> 00:50:41,590 >> COLTON: [hindi marinig] ang ilang mga cool lugar kung gusto naming pumunta to-- 1118 00:50:41,590 --> 00:50:43,330 >> David MALAN: Saan mo gusto naming pumunta? 1119 00:50:43,330 --> 00:50:45,837 >> COLTON: [hindi marinig] 1120 00:50:45,837 --> 00:50:48,170 David MALAN: Tingnan natin At hayaang kung saan Colton ni pagkuha sa amin ngayon. 1121 00:50:48,170 --> 00:50:48,961 COLTON: [hindi marinig] 1122 00:50:48,961 --> 00:50:52,830 1123 00:50:52,830 --> 00:50:56,380 >> David MALAN: Kaya, mayroong maraming mga iba't-ibang mga lugar na maaari mong gawin sa iyong sarili. 1124 00:50:56,380 --> 00:51:00,590 May FAPIs pamamagitan ng na maaari mong magsulat ng mga laro o mga pakikipag-ugnayan na 1125 00:51:00,590 --> 00:51:01,950 tumakbo, sa huli, sa telepono. 1126 00:51:01,950 --> 00:51:03,908 Kaya, kayo ay talagang lamang pagsulat ng isang mobile phone app. 1127 00:51:03,908 --> 00:51:06,380 Ngunit salamat sa software at ang mga kakayahan graphics, 1128 00:51:06,380 --> 00:51:08,765 ngayon Colton ay nasa ito maliit na maliit maliit na maliit na bahay. 1129 00:51:08,765 --> 00:51:10,515 At sa panganib ng tinatalo ang ating sarili, 1130 00:51:10,515 --> 00:51:13,330 Colton at ko makikita stick sa paligid para habang sa dulo ng klase dito ngayon 1131 00:51:13,330 --> 00:51:14,300 kung nais mong magkaroon ng at i-play. 1132 00:51:14,300 --> 00:51:16,350 At kami ay dalhin ang mga ito bumalik sa susunod na linggo pati na rin. 1133 00:51:16,350 --> 00:51:18,420 Wala nang paliguy-ligoy na ito para sa araw na ito. 1134 00:51:18,420 --> 00:51:21,990 Kami ay makikita mo sa susunod na linggo. 1135 00:51:21,990 --> 00:51:24,140 >> [MUSIC - RAGGA TWINS, "BAD MAN"] 1136 00:51:24,140 --> 00:55:23,146