サンプルは、主な使用方法のみです。トランザクションなどは考慮していません。
また、DBI等の使用法やPerlなどの言語仕様等は一切お答えいたしませんので、専門の紹介サイトで確認して下さい。
『データベースサーバの構築(MySQL)』時に、「perl-DBI」と「perl-DBD-MySQL」が自動的にインストールされていると思います。
インストールされていない場合は「yum」で個別に「perl-DBI」と「perl-DBD-MySQL」をインストールしてください。
「perl-DBI」および「perl-DBD-MySQL」がインストールされているか確認 # rpm -qa perl-DBI perl-DBD-MySQL コマンド実行結果に何も表示されなければ、パッケージをインストールしてください または、何れかの結果が表示されない方をインストールして下さい。 パッケージ「perl-DBI」と「perl-DBD-MySQL」のインストール # yum -y install perl-DBI perl-DBD-MySQL モジュールを有効にする為、apacheを再起動 【FC1 から Fedora15 / CentOS4 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/httpd restart 【Fedora16以降 の場合】 # systemctl restart httpd.service |
#!/usr/bin/perl 下記の1行を追加 use DBI; |
データベース接続の構文 $dbh = DBI -> connect ("DBI:mysql:$dbname:localhost",$dbusername,$dbpassword) $dbname:データベース名 $dbusername:接続ユーザ名(Linuxアカウントでない事に注意) $dbpassword:接続ユーザのパスワード $dbh:正常接続した時のデータベースハンドル |
実行コマンドの構文 $sth = $dbh->prepare($sql); $sth -> execute() $sql:SQL文 $sth:実行コマンドのハンドル |
データベース切断の構文 $dbh -> disconnect(); $dbh:データベース接続時のデータベースハンドル |
サンプルスクリプトプログラムの作成 # vi /var/www/html/cgi-bin/OperatedMySQL.cgi #!/usr/bin/perl use DBI; #------------------------------# # 設定項目 # #------------------------------# $dbname = "meibo"; # データベース名 $dbusername = "linux"; # データベース接続ユーザー名 $dbpassword = "himitsu"; # 接続ユーザパスワード $tbname = "user"; # テーブル名 $script = "OperatedMySQL.cgi"; # スクリプト名 #------------------------------# # メイン処理 # #------------------------------# &decode; # デコード処理 if ($mode eq "view") { &view; } elsif ($mode eq "disp_insert") { &disp_insert; } elsif ($mode eq "disp_delete") { &disp_delete; } elsif ($mode eq "disp_update") { &disp_update; } elsif ($mode eq "execute") { &execute; } &view; # 表示処理 exit 0; #------------------------------# # 表示処理 # #------------------------------# sub view { &task_before; # 前処理 print <<"EOM"; <TABLE border="1" cellspacing="1"> <TBODY> <TR bgcolor="#0080ff"> <TH>Num</TH> <TH>Name</TH> </TR> EOM while(@data = $sth -> fetchrow_array){ $num = $data[0]; $name = $data[1]; print " <TR>\n"; print " <TD>$num</TD>\n"; print " <TD>$name</TD>\n"; print " </TR>\n"; } print <<"EOM"; </TBODY> </TABLE> EOM &task_after; # 後処理 exit ; } #------------------------------# # 追加モード表示 # #------------------------------# sub disp_insert { &task_before; # 前処理 print <<"EOM"; <FORM action="$script"> <INPUT type="hidden" name="mode" value="execute"> <INPUT type="hidden" name="process" value="insert"> <TABLE border="1" cellspacing="1"> <TBODY> <TR bgcolor="#0080ff"> <TH>Num</TH> <TH>Name</TH> </TR> EOM while(@data = $sth -> fetchrow_array){ $num = $data[0]; $name = $data[1]; print " <TR>\n"; print " <TD>$num</TD>\n"; print " <TD>$name</TD>\n"; print " </TR>\n"; } print <<"EOM"; <TR> <TD>Add Value</TD> <TD><INPUT size="32" type="text" maxlength="32" name="tb_addname"></TD> </TR> <TR> <TD colspan="2" align="center"><INPUT type="submit" name="btn_submit" value="追加"></TD> </TR> </TBODY> </TABLE> </FORM> EOM &task_after; # 後処理 exit ; } #------------------------------# # 削除モード表示 # #------------------------------# sub disp_delete { &task_before; # 前処理 print <<"EOM"; <FORM action="$script"> <INPUT type="hidden" name="mode" value="execute"> <INPUT type="hidden" name="process" value="delete"> <TABLE border="1" cellspacing="1"> <TBODY> <TR bgcolor="#0080ff"> <TH>Num</TH> <TH>Name</TH> <TH>select</TH> </TR> EOM while(@data = $sth -> fetchrow_array){ $num = $data[0]; $name = $data[1]; print " <TR>\n"; print " <TD>$num</TD>\n"; print " <TD>$name</TD>\n"; print " <TD align=\"center\"><INPUT type=\"radio\" name=\"opt_del\" value=\"$num\"></TD>\n"; print " </TR>\n"; } print <<"EOM"; <TR> <TD colspan="3" align="center"><INPUT type="submit" name="btn_submit" value="実行"></TD> </TR> </TBODY> </TABLE> EOM &task_after; # 後処理 exit ; } #------------------------------# # 更新モード表示 # #------------------------------# sub disp_update { &task_before; # 前処理 print <<"EOM"; <FORM action="$script"> <INPUT type="hidden" name="mode" value="execute"> <INPUT type="hidden" name="process" value="update"> <TABLE border="1" cellspacing="1"> <TBODY> <TR bgcolor="#0080ff"> <TH>Num</TH> <TH>Name</TH> <TH>select</TH> </TR> EOM while(@data = $sth -> fetchrow_array){ $num = $data[0]; $name = $data[1]; print " <TR>\n"; print " <TD>$num</TD>\n"; print " <TD>$name</TD>\n"; print " <TD align=\"center\"><INPUT type=\"radio\" name=\"opt_upd\" value=\"$num\"></TD>\n"; print " </TR>\n"; } print <<"EOM"; <TR> <TD>New Value</TD> <TD colspan="2"><INPUT size="32" type="text" maxlength="32" name="tb_newname"></TD> </TR> <TR> <TD colspan="3" align="center"><INPUT type="submit" name="btn_submit" value="実行"></TD> </TR> </TBODY> </TABLE> EOM &task_after; # 後処理 exit ; } #------------------------------# # 前処理 # #------------------------------# sub task_before { &Out_Header; # HTML ヘッダー表示 &DB_Connect; # Open Database $sth = $dbh->prepare("select * from $tbname;"); &DB_Execute; # Execute Command } #------------------------------# # 後処理 # #------------------------------# sub task_after { $sth -> finish(); # コマンド実行終了 &DB_DisConnect; # Close Databse &Out_Footer; # HTML フッター表示 } #------------------------------# # レコード処理 # #------------------------------# sub execute { #&debug; # デバッグ表示 if ($process eq "insert") { $sql = "insert into meibo.user values(NULL,\"$in{'tb_addname'}\");"; }elsif ($process eq "delete") { $sql = "delete from meibo.user where Num=$in{'opt_del'};"; }elsif ($process eq "update") { $sql = "update meibo.user set Name=\"$in{'tb_newname'}\" where Num=$in{'opt_upd'};"; }else{ &error("処理モードが不正です。: $process"); } &DB_Connect; # Open Database $sth = $dbh->prepare($sql); &DB_Execute; # Execute Command $sth -> finish(); # コマンド実行終了 &DB_DisConnect; # Close Databse &view; # 表示処理 } #------------------------------# # Decode # #------------------------------# sub decode { local($buf, $key, $val); $buf = $ENV{'QUERY_STRING'}; foreach (split(/&/, $buf)) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } $mode = $in{'mode'}; $process = $in{'process'}; } #------------------------------# # Connect Database # #------------------------------# sub DB_Connect { # データベースアクセスの開始 $dbh = DBI -> connect ("DBI:mysql:$dbname:localhost",$dbusername,$dbpassword) || &error("データベースにアクセス出来ません。"); } #------------------------------# # Execute Command # #------------------------------# sub DB_Execute { # コマンドの実行 $sth -> execute() || &error("データベース処理コマンドを実行出来ませんでした。$DBI::err ($DBI::errstr)"); } #------------------------------# # DisConnect Database # #------------------------------# sub DB_DisConnect { # データベースアクセスの終了 $dbh -> disconnect(); } #------------------------------# # HTML Header # #------------------------------# sub Out_Header { print "Content-type: text/html\n\n"; print <<"EOM"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <TITLE>はじめての自宅サーバ構築 - データベース操作 〜 CGI編 〜 -</TITLE> </HEAD> <BODY> <CENTER> <a href=\"$script?mode=view\">[表示モード]</a> <a href=\"$script?mode=disp_insert\">[追加モード]</a> <a href=\"$script?mode=disp_delete\">[削除モード]</a> <a href=\"$script?mode=disp_update\">[更新モード]</a> <BR><BR> EOM } #------------------------------# # HTML Footer # #------------------------------# sub Out_Footer { print <<"EOM"; </CENTER> </BODY> </HTML> EOM } #------------------------------# # Out Error Message # #------------------------------# sub error { local($_) = @_; &Out_Header; # HTML ヘッダー表示 print "<H2>$_</H2>\n"; &Out_Footer; # HTML フッター表示 exit ; } #------------------------------# # デバッグ表示 # #------------------------------# sub debug { &Out_Header; # HTML ヘッダー表示 print <<"EOM"; <TABLE border="1" cellspacing="1"> <TBODY> <TR bgcolor="#0080ff"> <TH>Property</TH> <TH>Value</TH> </TR> <TR> <TD>mode</TD> <TD>$mode</TD> </TR> <TR> <TD>process</TD> <TD>$process</TD> </TR> <TR> <TD>tb_addname</TD> <TD>$in{'tb_addname'}</TD> </TR> <TR> <TD>opt_del</TD> <TD>$in{'opt_del'}</TD> </TR> <TR> <TD>opt_upd</TD> <TD>$in{'opt_upd'}</TD> </TR> <TR> <TD>tb_newname</TD> <TD>$in{'tb_newname'}</TD> </TR> </TBODY> </TABLE> EOM &Out_Footer; # HTML フッター表示 exit ; } __END__ |
作成したスクリプトの所有者とパーミッション変更
所有者の変更 # chown apache:apache /var/www/html/cgi-bin/OperatedMySQL.cgi パーミッションの変更 # chmod 755 /var/www/html/cgi-bin/OperatedMySQL.cgi |
ブラウザより『http://サーバのアドレス/cgi-bin/OperatedMySQL.cgi』でアクセスする。
下記の様な画面が表示されるので、「追加・削除・更新」等を行ってみて下さい。