⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000001.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
The&nbsp;bulk&nbsp;of&nbsp;this&nbsp;function's&nbsp;work&nbsp;is&nbsp;performed&nbsp;by&nbsp;other&nbsp;functions.&nbsp;This&nbsp;is&nbsp;because&nbsp;other&nbsp;parts&nbsp;of&nbsp;the&nbsp;CGI&nbsp;program&nbsp;have&nbsp;similar&nbsp;needs&nbsp;so&nbsp;it&nbsp;is&nbsp;efficient&nbsp;to&nbsp;factor&nbsp;the&nbsp;common&nbsp;code&nbsp;into&nbsp;shared&nbsp;functions.&nbsp;The&nbsp;first&nbsp;such&nbsp;function&nbsp;is&nbsp;find_last_student,&nbsp;which&nbsp;&nbsp;<BR>examined&nbsp;the&nbsp;form&nbsp;data&nbsp;and&nbsp;returns&nbsp;a&nbsp;list&nbsp;of&nbsp;the&nbsp;form&nbsp;numbers--the&nbsp;form&nbsp;numbers&nbsp;are&nbsp;not&nbsp;related&nbsp;to&nbsp;the&nbsp;ID&nbsp;numbers&nbsp;in&nbsp;the&nbsp;database--of&nbsp;each&nbsp;student&nbsp;entered&nbsp;by&nbsp;the&nbsp;user.&nbsp;This&nbsp;is&nbsp;necessary&nbsp;because,&nbsp;as&nbsp;mentioned&nbsp;earlier,&nbsp;the&nbsp;previous&nbsp;form&nbsp;is&nbsp;dynamically&nbsp;&nbsp;<BR>generated&nbsp;and&nbsp;there&nbsp;is&nbsp;no&nbsp;way&nbsp;to&nbsp;immediately&nbsp;know&nbsp;how&nbsp;many&nbsp;students&nbsp;are&nbsp;included.&nbsp;<BR>&nbsp;<BR>sub&nbsp;find_last_student&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;@params&nbsp;=&nbsp;param;&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;@list&nbsp;=&nbsp;();&nbsp;<BR>&nbsp;&nbsp;&nbsp;foreach&nbsp;(@params)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;if&nbsp;not&nbsp;param($_);&nbsp;#&nbsp;Skip&nbsp;any&nbsp;'empty'&nbsp;fields&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(/^(first|middle|last|ext)(\d+)/)&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$num&nbsp;=&nbsp;$2;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(not&nbsp;grep(/^$num$/,@list))&nbsp;{&nbsp;push(@list,$num);&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;@list&nbsp;=&nbsp;sort&nbsp;{&nbsp;$a&nbsp;&lt;=&gt;&nbsp;$b}&nbsp;@list;&nbsp;<BR>&nbsp;&nbsp;&nbsp;return&nbsp;@list;&nbsp;<BR>}&nbsp;<BR>Note&nbsp;that&nbsp;the&nbsp;function&nbsp;returns&nbsp;all&nbsp;of&nbsp;the&nbsp;numbers,&nbsp;not&nbsp;just&nbsp;the&nbsp;last&nbsp;number--which&nbsp;would&nbsp;presumably&nbsp;be&nbsp;the&nbsp;number&nbsp;of&nbsp;students&nbsp;entered.&nbsp;Even&nbsp;though&nbsp;the&nbsp;previous&nbsp;form&nbsp;printed&nbsp;out&nbsp;the&nbsp;number&nbsp;of&nbsp;entries&nbsp;the&nbsp;user&nbsp;requested,&nbsp;there&nbsp;is&nbsp;no&nbsp;guarantee&nbsp;that&nbsp;the&nbsp;&nbsp;<BR>user&nbsp;filled&nbsp;all&nbsp;of&nbsp;them&nbsp;out.&nbsp;He&nbsp;or&nbsp;she&nbsp;may&nbsp;have&nbsp;missed&nbsp;or&nbsp;skipped&nbsp;a&nbsp;row,&nbsp;which&nbsp;would&nbsp;not&nbsp;be&nbsp;included&nbsp;with&nbsp;the&nbsp;form&nbsp;data.&nbsp;Therefore,&nbsp;it&nbsp;is&nbsp;necessary&nbsp;to&nbsp;find&nbsp;out&nbsp;each&nbsp;number&nbsp;that&nbsp;was&nbsp;entered.&nbsp;The&nbsp;output&nbsp;of&nbsp;this&nbsp;function&nbsp;is&nbsp;then&nbsp;sent&nbsp;to&nbsp;the&nbsp;next&nbsp;&quot;helper&quot;&nbsp;&nbsp;<BR>function:&nbsp;find_matching_students,&nbsp;as&nbsp;shown&nbsp;in&nbsp;the&nbsp;following:&nbsp;<BR>&nbsp;<BR>sub&nbsp;find_matching_students&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;@list&nbsp;=&nbsp;@_;&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;($i,@students,@notstudents);&nbsp;<BR>&nbsp;&nbsp;&nbsp;@students&nbsp;=&nbsp;();&nbsp;<BR>&nbsp;&nbsp;&nbsp;@notstudents&nbsp;=&nbsp;();&nbsp;<BR>&nbsp;&nbsp;&nbsp;if&nbsp;(@list)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;$i&nbsp;(@list)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;@query&nbsp;=&nbsp;();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Build&nbsp;a&nbsp;query&nbsp;that&nbsp;looks&nbsp;for&nbsp;a&nbsp;specific&nbsp;student.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$query&nbsp;=&nbsp;&quot;select&nbsp;id,&nbsp;subjects&nbsp;from&nbsp;student&nbsp;where&nbsp;&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;('first','middle','last','ext')&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(param(&quot;$_$i&quot;))&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$temp&nbsp;=&nbsp;param(&quot;$_$i&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Single&nbsp;quotes&nbsp;are&nbsp;the&nbsp;field&nbsp;delimiters&nbsp;for&nbsp;mSQL&nbsp;(and&nbsp;MySQL),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;so&nbsp;they&nbsp;must&nbsp;be&nbsp;preceded&nbsp;with&nbsp;the&nbsp;escape&nbsp;character&nbsp;&quot;\&quot;,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;which&nbsp;is&nbsp;escaped&nbsp;itself&nbsp;so&nbsp;that&nbsp;it&nbsp;is&nbsp;interpreted&nbsp;literally.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$temp&nbsp;=~&nbsp;s/'/\\'/g;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(@query,&quot;$_&nbsp;=&nbsp;'$temp'&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$query&nbsp;.=&nbsp;join(&quot;&nbsp;and&nbsp;&quot;,@query);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Send&nbsp;the&nbsp;query&nbsp;to&nbsp;the&nbsp;database.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$out&nbsp;=&nbsp;$dbh-&gt;query($query);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;If&nbsp;the&nbsp;database&nbsp;doesn't&nbsp;return&nbsp;anything,&nbsp;add&nbsp;the&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;student&nbsp;to&nbsp;the&nbsp;@notstudents&nbsp;array.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(not&nbsp;$out-&gt;numrows)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(@notstudents,[&nbsp;param(&quot;first$i&quot;),&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param(&quot;middle$i&quot;),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param(&quot;last$i&quot;),&nbsp;param(&quot;ext$i&quot;)&nbsp;]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Otherwise&nbsp;add&nbsp;the&nbsp;student&nbsp;to&nbsp;the&nbsp;@students&nbsp;array.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;($id,$subjects)&nbsp;=&nbsp;$out-&gt;fetchrow;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(@students,[$id,$subjects]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;return(\@students,\@notstudents);&nbsp;<BR>}&nbsp;<BR>This&nbsp;function&nbsp;goes&nbsp;through&nbsp;each&nbsp;of&nbsp;the&nbsp;given&nbsp;student&nbsp;names&nbsp;and&nbsp;checks&nbsp;the&nbsp;database&nbsp;to&nbsp;see&nbsp;if&nbsp;they&nbsp;already&nbsp;exist.&nbsp;If&nbsp;they&nbsp;do&nbsp;exist&nbsp;their&nbsp;information&nbsp;is&nbsp;stored&nbsp;in&nbsp;an&nbsp;array&nbsp;called&nbsp;@students,&nbsp;otherwise&nbsp;they&nbsp;are&nbsp;put&nbsp;in&nbsp;<A HREF="mailto:@notstudents.">@notstudents.</A>&nbsp;The&nbsp;information&nbsp;about&nbsp;&nbsp;<BR>each&nbsp;student&nbsp;is&nbsp;kept&nbsp;in&nbsp;an&nbsp;anonymous&nbsp;array,&nbsp;creating&nbsp;a&nbsp;student&nbsp;object&nbsp;of&nbsp;sorts.&nbsp;Finally&nbsp;the&nbsp;function&nbsp;returns&nbsp;references&nbsp;to&nbsp;both&nbsp;of&nbsp;the&nbsp;arrays.&nbsp;It&nbsp;cannot&nbsp;return&nbsp;the&nbsp;data&nbsp;as&nbsp;regular&nbsp;arrays&nbsp;because&nbsp;there&nbsp;would&nbsp;be&nbsp;no&nbsp;way&nbsp;to&nbsp;tell&nbsp;where&nbsp;one&nbsp;array&nbsp;ended&nbsp;and&nbsp;&nbsp;<BR>the&nbsp;other&nbsp;began.&nbsp;<BR>&nbsp;<BR>The&nbsp;final&nbsp;helper&nbsp;function&nbsp;is&nbsp;update_students,&nbsp;which&nbsp;adds&nbsp;the&nbsp;class&nbsp;to&nbsp;each&nbsp;existing&nbsp;student's&nbsp;list&nbsp;of&nbsp;classes.&nbsp;<BR>&nbsp;<BR>sub&nbsp;update_students&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;$id&nbsp;=&nbsp;shift;&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;@students&nbsp;=&nbsp;@_;&nbsp;<BR>&nbsp;&nbsp;&nbsp;foreach&nbsp;(@students)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my($sid,$subjects)=@$_;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(not&nbsp;$subjects)&nbsp;{&nbsp;$subjects&nbsp;=&nbsp;&quot;:$id:&quot;;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif&nbsp;($subjects&nbsp;!~&nbsp;/:$id:/)&nbsp;{&nbsp;$subjects&nbsp;.=&nbsp;&quot;$id:&quot;;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$query&nbsp;=&nbsp;&quot;update&nbsp;student&nbsp;set&nbsp;subjects='$subjects'&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;id=$id&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;query($query);&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>}&nbsp;<BR>This&nbsp;function&nbsp;queries&nbsp;the&nbsp;student&nbsp;table,&nbsp;which&nbsp;is&nbsp;entirely&nbsp;separate&nbsp;from&nbsp;the&nbsp;subject&nbsp;table.&nbsp;Within&nbsp;a&nbsp;single&nbsp;CGI&nbsp;program,&nbsp;you&nbsp;can&nbsp;interact&nbsp;with&nbsp;any&nbsp;number&nbsp;of&nbsp;different&nbsp;tables&nbsp;within&nbsp;a&nbsp;database.&nbsp;You&nbsp;can&nbsp;even&nbsp;switch&nbsp;between&nbsp;databases,&nbsp;but&nbsp;you&nbsp;can&nbsp;only&nbsp;&nbsp;<BR>have&nbsp;one&nbsp;database&nbsp;selected&nbsp;at&nbsp;a&nbsp;time.&nbsp;This&nbsp;function&nbsp;retrieves&nbsp;the&nbsp;subject&nbsp;list&nbsp;for&nbsp;each&nbsp;given&nbsp;student&nbsp;and&nbsp;adds&nbsp;the&nbsp;new&nbsp;subject&nbsp;to&nbsp;their&nbsp;list&nbsp;if&nbsp;it&nbsp;is&nbsp;not&nbsp;there&nbsp;already.&nbsp;<BR>&nbsp;<BR>At&nbsp;this&nbsp;point&nbsp;all&nbsp;contingencies&nbsp;are&nbsp;taken&nbsp;care&nbsp;of&nbsp;except&nbsp;for&nbsp;the&nbsp;case&nbsp;where&nbsp;the&nbsp;subject&nbsp;has&nbsp;students&nbsp;that&nbsp;do&nbsp;not&nbsp;already&nbsp;exist&nbsp;in&nbsp;the&nbsp;student&nbsp;table.&nbsp;For&nbsp;this&nbsp;case,&nbsp;the&nbsp;list&nbsp;of&nbsp;new&nbsp;students&nbsp;are&nbsp;sent&nbsp;to&nbsp;the&nbsp;add4&nbsp;function&nbsp;as&nbsp;shown&nbsp;in&nbsp;the&nbsp;following:&nbsp;<BR>&nbsp;<BR>sub&nbsp;add4&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Get&nbsp;list&nbsp;of&nbsp;@students&nbsp;and&nbsp;@notstudents&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;update_students($id,@students)&nbsp;if&nbsp;@students;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;insert_students($id,@notstudents)&nbsp;if&nbsp;@notstudents;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Print&nbsp;success&nbsp;page.&nbsp;<BR>}&nbsp;<BR>This&nbsp;function&nbsp;separates&nbsp;the&nbsp;list&nbsp;of&nbsp;students&nbsp;into&nbsp;existing&nbsp;and&nbsp;nonexisting&nbsp;students&nbsp;using&nbsp;the&nbsp;same&nbsp;method&nbsp;as&nbsp;add3.&nbsp;It&nbsp;then&nbsp;updates&nbsp;the&nbsp;existing&nbsp;students&nbsp;using&nbsp;update_students&nbsp;shown&nbsp;earlier.&nbsp;Nonexisting&nbsp;students,&nbsp;shown&nbsp;in&nbsp;the&nbsp;following,&nbsp;are&nbsp;sent&nbsp;to&nbsp;the&nbsp;&nbsp;<BR>new&nbsp;helper&nbsp;function&nbsp;insert_students:&nbsp;<BR>&nbsp;<BR>sub&nbsp;insert_students&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;foreach&nbsp;$i&nbsp;(@list)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;This&nbsp;selects&nbsp;the&nbsp;next&nbsp;number&nbsp;in&nbsp;the&nbsp;sequence&nbsp;defined&nbsp;on&nbsp;the&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;table.&nbsp;We&nbsp;then&nbsp;use&nbsp;this&nbsp;number&nbsp;as&nbsp;the&nbsp;ID&nbsp;of&nbsp;the&nbsp;student.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$out&nbsp;=&nbsp;$dbh-&gt;query('select&nbsp;_seq&nbsp;from&nbsp;student');&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my($sid)&nbsp;=&nbsp;$out-&gt;fetchrow;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;We&nbsp;have&nbsp;to&nbsp;quote&nbsp;all&nbsp;of&nbsp;the&nbsp;text&nbsp;strings&nbsp;for&nbsp;inclusion&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;in&nbsp;the&nbsp;database.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;($first,&nbsp;$middle,&nbsp;$last,&nbsp;$ext)&nbsp;=&nbsp;(&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;quote(param(&quot;first$i&quot;)),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;quote(param(&quot;middle$i&quot;)),&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;quote(param(&quot;last$i&quot;)),&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;quote(param(&quot;ext$i&quot;))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$query&nbsp;=&nbsp;&quot;insert&nbsp;into&nbsp;student&nbsp;(id,&nbsp;first,&nbsp;middle,&nbsp;last,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext,&nbsp;subjects)&nbsp;VALUES&nbsp;($sid,&nbsp;$first,&nbsp;$middle,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$last,&nbsp;$ext,&nbsp;':$id:')&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;query($query);&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>}&nbsp;<BR>This&nbsp;function&nbsp;again&nbsp;accesses&nbsp;the&nbsp;student&nbsp;table&nbsp;rather&nbsp;than&nbsp;the&nbsp;subject&nbsp;table.&nbsp;An&nbsp;ID&nbsp;number&nbsp;for&nbsp;the&nbsp;new&nbsp;students&nbsp;is&nbsp;retrieved&nbsp;from&nbsp;the&nbsp;sequence&nbsp;defined&nbsp;on&nbsp;the&nbsp;student&nbsp;table,&nbsp;and&nbsp;then&nbsp;the&nbsp;student&nbsp;is&nbsp;inserted&nbsp;into&nbsp;the&nbsp;table&nbsp;using&nbsp;that&nbsp;ID.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;162.105.17.153]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -