APM 팁 모음 김 용일
nalabi@formail.org
$Date: 2002/11/22 05:31:05 $ 2002 GNU GPL 0.1 2002-11-16 김 용일 최초 작성 template 홈페이지를 만들면서 그동안 조그마한 팁을 모아 놓은 것입니다.
소개 이글은 홈페이지를 만들면서 그동안 조그마한 팁을 모아 놓은 것입니다. apache, mysql, php, perl 에 관련된 문서 입니다. 덧글 한글을 살리고 나라를 살리는 길은, 과학적으로 으뜸가는 세벌식을 사용하는 것뿐입니다. 대한민국 과학기술을 살리는길은 쉬운 한글로 된 문서를 만드것입니다. 외국문서를 자기 혼자만 보고 말것이 아니라, 쉽게 번역, 보충해서 초중고생들로 볼수 있게 해야 합니다. 나라를 잘 살고, 부강하게 해야 하는 이유는 다른나라나, 인종에게 서러움을 받지 않기 하기 위함입니다. 도와 주신분 관련서적과 여러 인터넷 사이트를 운영하고 계신 분들께 감사합니다. 저작권 이 문서는 GNU Free Documentation License 버전 1.1 혹은 자유 소프트웨어 재단에서 발행한 이후 판의 규정에 따르며 저작권에 대한 본 사항이 명시되는 한 어떠한 정보 매체에 의한 본문의 전재나 발췌도 무상으로 허용됩니다. 본 저자는 문서의 내용이 야기할 수 있는 어떠한 결과에 대해서도 책임을 지지 않습니다. 설치 다운로드를 합니다. http://www.mysql.com/downloads/index.html http://apache.org/ 압축을 풀기 tar xvfz mysql-3.23.7-alpha.tar.gz tar xvfz apache_1.3.12.tar.gz tar xvfz php-4.0.1.tar.gz tar xvfz ZendOptimizer-Beta2-Linux-glibc2.1.tar.gz Mysql cd mysql-3.23.7-alpha ./configure --with-charset=euc_kr --prefix=/usr/local/mysql make make install ./scripts/mysql_install_db (처음 한번) ./bin/safe_mysqld & Zend 옵티마이저 cd ZendOptimizer-Beta2-Linux-glibc2.1 mkdir /usr/local/Zend/ mkdir /usr/local/Zend/lib cp ZendOptimizer.so /usr/local/Zend/lib Apache cd apache_1.3.12 ./configure --prefix=/usr/local/apache Php cd ../php-4.0.1 ./configure --with-mysql --with-oci8=/oracle/app/oracle/product/8.1.5/ -- with-apache=../apache_1.3.12 --enable-track-vars --disable-debug --enable-sigchild make make install Apache cd ../apache_1.3.12 ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a make make install 수정 하기 /usr/local/apache/conf/httpd.conf화일을 다음과 같이 편집을 합니다. AddType application/x-httpd-php .php .php3 .ph(확장자) 예제 index.php <? phpinfo(); ?> /usr/local/lib/php.ini zend_optimizer.optimization_level=1 zend_extension="/usr/local/Zend/lib/ZendOptimizer.so" Apache CGI 사용하기 apache 의 설정 화일인 httpd.conf 화일을 수정한다. CGI를 사용할 디렉토리 : /home/USER/public_html/cgi-bin ScriptAlias 를 설정합니다. ServerName www.formail.com ServerAdmin USER@formail.org.com ScriptAlias /cgi-bin/ /home/USER/public_html/cgi-bin/ html 문서 디렉토리 설정 아파치 설정 화일들 '/etc/httpd/conf/httpd.conf' , 'access.conf', 'srm,conf' 입니다. 하지만, httpd.conf에서 대부분의 설정이 가능하다. UserDir public_html <-- 보통 이렇게 되어 있을 겁니다. 그리고계정을 추가 하시면 예를들어 abc라는 계정을 추가 했다면 http://도메인/~abc 이렇게 됩니다. Url 설정 http://도메인/~abc --> http://도메인/abc srm.conf 화일을 수정을 한다. 다음을 추가한다. Alias /abc /home/abc/public_html 아파치를 다시 실행 시킨다. httpd restart or apachectl restart httpd.conf 예제 # 아파치 서버를 설치하고 나서, localhost 를 하면 디폴트로 나오는 문서가 있는 디렉토리입니다. DocumentRoot "/home/httpd/kedu" # 손대지 말고 디폴로 그냥 나둡니다. #펄을 사용할때 CGI를 사용할때는 다음과 같이 설정을 해주어야 합니다. <Directory /> Options FollowSymLinks ExecCGI AllowOverride None </Directory> # # Note that from this point forward you must specifically allow # particular features to be enabled - so if something's not working as # you might expect, make sure that you have specifically enabled it # below. # # # This should be changed to whatever you set DocumentRoot to. # <Directory "/usr/local/httpd/htdocs"> # 손대지 말고 디폴로 그냥 나둡니다. # # This may also be "None", "All", or any combination of "Indexes", # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # #이것은 다음과 같이 설정을 해줍니다. Options Indexes FollowSymLinks Includes ExecCGI # # This controls which options the .htaccess files in directories can # override. Can also be "All", or any combination of "Options", "FileInfo", # "AuthConfig", and "Limit" # AllowOverride None # 통과 # # Controls who can get stuff from this server. # Order allow,deny # 역시 통과 Allow from all # 손대지 말것 </Directory> # 손대지 말고 통과 # 사용자 계정을 만들고 나서 유저의 index.htm 이 실행되는 디렉토리 UserDir public_html #브라우저를 실행 할때 기본적으로 읽어 들이는 화일을 설정하는 곳입니다. DirectoryIndex index.htm index.html index.cgi index.php index.php3 # 펄을 사용할때 CGI 를 사용할때 다음과 같이 설정을 합니다. AccessFileName .htaccess <Files .htaccess> Order allow,deny Deny from all </Files> #php 를 사용할때는 다음과 같이 설정을 해줍니다. AddType application/x-httpd-php .php3 AddType application/x-httpd-php-source .phps AddType application/x-tar .tgz #펄 CGI를 사용할때는 다음과 같이 설정을 해줍니다. AddHandler cgi-script .cgi Html 다른 사이트로 넘어가기 <html> <body> <meta http-equiv='Refresh' content='0; URL=http://formail.org'> </body> </html> Perl 펄 사용하기 위한 apache, mysql 설정 아파치 설정 펄이 설치 되어 있나 한번 봅니다. # which perl 아파치 설정디렉토리 (/www/conf/httpd.conf)의 다음 내용이 없으면 추가를 합니다. AddHandler cgi-script .cgi ScriptAlias /cgi-bin/ "/www/cgi-bin/" AllowOverride None Options None Order allow,deny Allow from all 1) 펄 모듈 설치 Perl `DBD'/`DBI' client code 는 최신 안정 버전을 사용한다. Perl 관련프로그램 두가지(세가지)를 다운로드한다. http://www.cpan.org/modules/01modules.index.html Msql-Mysql-modules-1.2204.tar.gz DBI-1.13.tar.gz Data-Dump-0.03.tar.gz ('Data-Dumper'), 'DBI', 'Msql-Mysql-modules' 을 순서대로 설치한다. 2) 우선 압축된 패키지를 푼다. shell> tar xzvf DBI-VERSION.tar.gz shell> tar xzvf Msql-Mysql-modules-VERSION.tar.gz 3) 생성된 디렉토리로 이동 shell> cd DBI-VERSION 4. 컴파일 하고 설치 shell> perl Makefile.PL shell> make shell> make test( 참고) shell> make install 5) 테스트 참고로 make test. 모든 모듈을 검증하기 때문이다. 6) 나머지지 두개 패키지 설치 나머지 'Msql-Mysql-modules'를 위와 같은 방법으로 설치한다. 테스트 1) /www/cgi-bin/datedisp.cgi 이 화일을 vi 로 편집한다. #! /usr/bin/perl print "Content-type: text/html"; $date = `date`; print ("Today is $date"); 2) 권한을 바꾸어 준다. chmod 755 datedisp.cgi 3) /www/cgi-bin 디렉토리에서 실행을 해본다. ./datedisp.cgi or perl datedisp.cgi 4) 브라우저에서 다음을 실행합니다. http://localhost/cgi-bin/datedisp.cgi 디렉토리, 화일 만들기 디렉토리, 화일 만들기 #!/usr/bin/perl use Mysql; $dbh = Mysql->connect("","dbname","user","password"); print "Content-type: text/html"; mkdir('aaa/bbb' , 0777) or die print "디렉토리를 만들수 없습니다. 이미 만들어 졌습니다.<br>"; print "오게이 오게이"; &printf_file("aaa/bbb/test.htm"); exit; sub print_file{ my ($filename) = @_; $imsi; $top="<div align=left><table border=0 cellpadding=5><tr><td valign=top><p align=left><font face=굴림 size=2>"; $bottom="</font></td></tr></table></div>"; $parse{content} =~ s//<br>/g; $imsi = $top; $imsi.= "안녕하세요. >(///)< 드세요."; $imsi.= $bottom; open(fh,">$filename"); print fh $imsi; close(fh); } 시간 출력및 테이블 내용 출력 Mysql 내용 mysql> select * from test; +------+--------+------+-------------+ | id | name | age | tel | +------+--------+------+-------------+ | 1 | 김용일 | 29 | 02-825-xxxx | +------+--------+------+-------------+ 1 row in set (0.03 sec) 소스 #!/usr/bin/perl print "Content-type:text/html"; #웹에서 html을 볼수 있게 해준다. useMysql; #mysql을 사용한다. $dbh=Mysql->connect("","kbc","",""); #db와 펄을 연결한다. #시간 값을 얻어 낸다. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); #출력할 폼을 작성한다. $date = sprintf("%d-%d-%d",$year += 1900, $mon+1, $mday); print $date, " "; #출력을 한다. #print '$curdate()'; #간단히 시간을 나타내는 방법 $query_string = "select * from test"; # 질의를 변수에 저장한다. $sth=$dbh->query($query_string); #변수를 실행한다. print $sth->fetchrow_array, " "; # 출력을 해준다. 이름을 입력받아 mysql에 저장하고 출력하기 Sql 을 작성한다. create table test ( no int default '0' not null auto_increment, name char(10), regdate date, PRIMARY KEY(no) ); name_input.htm 을 작성한다. <form name="form" method="get" action="/cgi-bin/write_db.cgi"> <inputtype="text" name="name" size="10"> <input type="submit" name="ok" value="보내기"> </form> cgi 화일을 작성한다. #!/usr/bin/perl #이문서는 펄문서 임을 나타내준다. %parse = &parse_input; # form, input을 가능하도록 정의를 한다. print "Content-type:text/html"; # html을 사용가능하도록 한다. print "입력 되었습니다. <br>"; use Mysql; #Mysql 을 정의 해준다. $dbh=Mysql->connect("","kedu","root",""); #Mysql을 펄에서 사용가능하도록 연결 시켜준다. connect("", "DB이름", "사용자", "비밀번호") $query_string = "insert into test values('','$parse{name}',curdate())"; # 이름과 시간을 변수에 저장한다. $sth=$dbh->query($query_string); # 실행한다. $query_string = "select * from test"; # 테이블 내용을 변수에 저장한다. $sth=$dbh->query($query_string); # 실행을 한다. while($row = $sth->fetchrow_arrayref) { # 테이블의 마직막 레코드 까지 print "$row->[0] $row->[1] $row->[2]<br>"; # 테이블 내용을 출력 한다. } exit; # 분 문서(펄)의 끝임을 나타내 준다. 이하 함수를 정의 한다. # 밑의 함수는 충분한 학습후 수정하고, 초보자는 그냥 그런가 보다 생각하고 넘어간다. sub parse_input { my ($buffer,@parse,%parse,$key,$value); if($ENV{'REQUEST_METHOD'} eq "GET") { @parse = split(/&/,$ENV{'QUERY_STRING'}); } else { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @parse = split(/&/,$buffer); } foreach (@parse) { $_=~ tr/+/ /; $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; ($key,$value) = split(/=/,$_); $parse{$key} = $value; } return %parse; } 입력 받는 부분을 체크 하기 Sql 작성 ( mysql DBNAME < test.tbl ) create table test ( no int default '0' not null auto_increment, id char(10), name char(10), pw char(8), regdate date, regtime time, PRIMARY KEY(no) ); check_input.htm 작성 <html> <body> <table> <form name="form" method="post" action=/cgi-bin/access_db.cgi> <tr> <td>아이디 </td> <td><input name=id size=10> <br></td> </tr> <tr> <td>이 름 </td> <td><input name=name size=10> <br></td></tr> <tr> <td>비밀번호</td> <td><input name=pw size=10 type=password> <br></td></tr> <tr> <td>비밀번호확인</td> <td><input name=pw2 size=10 type=password> </td></tr></table> <input type="submit" value="보내기"> </form> </table> </body> </html> access_db.cgi 작성(작성후 755 access_db.cgi 를 실행해서 실행모드로 바꾼다.) #!/usr/bin/perl %parse = &parse_input; use Mysql; $dbh = Mysql->connect("","kedu","root",""); print "Content-type:text/html"; if($parse{id} eq ""){ print "아이디를 입력하지 않았습니다.<br>"; print "아이디를 입력 해주세요.<br>"; } elsif($parse{name} eq "" ){ print "이름을 입력하지 않았습니다.<br>"; print "이름을 입력 해주세요.<br>"; } elsif($parse{pw} eq "" ){ print "비밀번호를 입력하지 않았습니다.<br>"; print "비밀번호를 입력 해주세요.<br>"; } elsif($parse{pw2} eq "" ){ print "비밀번호확인을 입력하지 않았습니다.<br>"; print "비밀번호확인을입력 해주세요.<br>"; } elsif(($parse{id} =~ /^d/) || ($parse{name} =~ /^d/)) { print "첫번째 글짜가 숫자로 되어 있습니다.<br>"; print "첫번째글짜를 문자로 바꾸어 주세요.<br>"; } elsif(&registered_id($parse{id})) { print "이미 있는 아이디 입니다.<br>"; print "다른 아이디를 입력 해주세요.<br>"; } elsif($parse{pw} ne $parse{pw2}) { print "비밀번호가 같지 않습니다. <br>"; print "비밀번호를 다시 입력 해주세요. <br>"; } else { print$parse{id}, "가 입력 되었습니다.<br>"; $query_string = "insert into test values('','$parse{id}','$parse{name}','$parse{pw}', curdate(), curtime())"; my $sth=$dbh->query($query_string); } $query_string = "select * from test"; $sth=$dbh->query($query_string); while($row = $sth->fetchrow_arrayref) { print "$row->[0] $row->[1] $row->[2] $row->[3] $row->[4] $row->[5]<br>"; } exit; sub registered_id { my ($id) = @_; my ($query_string) = "select id from test where id = '$id'"; my ($sth) = $dbh->query($query_string); if($sth -> numrows eq "1") { return 1; } else { return 0; } } sub parse_input { my ($buffer,@parse,%parse,$key,$value); if($ENV{'REQUEST_METHOD'} eq "GET") { @parse = split(/&/,$ENV{'QUERY_STRING'}); } else { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @parse = split(/&/,$buffer); } foreach (@parse) { $_ =~ tr/+/ /; $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; ($key,$value) = split(/=/,$_); $parse{$key} = $value; } return %parse; } Php 노프레임 만드는법 머리단과 바닥에 들어갈 화일을 작성하고 나서 본 화일에서 불러서 사용하면 된다. main.php <?php include("include/header.ph"); print_html("main_htm/top.htm"); echo("<br><br>본문 내용이 들어가는 곳입니다.<br>"); echo("내용은 별거 없습니다.<br>"); echo("프레임을 나누지 않고, 본문 내용을 사용하는 것입니다.<br>"); echo("본문내용을 서브 함수를 이용해서 만들면 됩니다.<br>"); echo("다음 작업을 위해 쉬운 내용을 아주 어렵게 했습니다.<br>"); echo("이내용을 잘 이해하면 여러면에서 도움이 될것입니다.<br>"); print_html("main_htm/bottom.htm"); ?> include/header.ph <? /* 한라인 출력해주는 함수 */ function print_html($filename) { $fp = fopen( $filename, "r" ); while(!feof($fp)) { $contents .= fgets($fp, 100); } fclose($fp); echo "$contents"; } ?> main_htm/top.htm <html> <head> <title>나라비의 방</title> <style TYPE="TEXT/CSS"> A:link {color: blue; text-decoration:none} A:visited {color: navy; text-decoration:none} A:hover {color: red; text-decoration:underline;} </style> </head> <body> <table border="0" width = "600" cellpadding="0" cellspacing="0"> <tr><td width="589" colspan="2" bgcolor="#f9cd8a">나라비의 방을 찾아주셔서 대단히 감사합니다.</td></tr> <tr> <tr> <td width = "120" valign="top" colspan="0"> <table width = "120" border="0"> <tr><td width="120" bgcolor="#b5d490"><p> <b><br>홈으로</b></font></td></tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">나라비 소개</font></td></tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">나리비 소식</font></td></tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">Windows NT</font></td></tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">시(김소월)</font></td> </tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">시(기타)</font></td> </tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">질문과답변</font></td> </tr> <tr><td width="120" bgcolor="#c3f298"><p> <font size="2">다른곳</font></td> </tr> </table> <td valign="top" align="center" width = "480"> main_htm/bottom.htm </td> </tr> <tr> <td colspan="2" align="center" valign="top">Copyright ⓒ 1999 nalabi.Mail to<a href="mailto:nalabi@hananet.net">webmaster</a></td> </tr> </table> </body> </html> 이름을 입력받아 mysql에 저장하고 출력하기 테이블 작성 (mysql DBNAME < test.tbl) create table test ( no int default '0' not null auto_increment, name char(10), regdate date, PRIMARY KEY(no) ); name_input.php 작성 <html> <body> <form name="form" method="get" action="write_db.php3"> <inputtype="text" name="name" size="10"> <input type="submit" name="ok" value="보내기"> </form> </body> </html> write_db.php 작성 <? // MySQL 서버에 연결한다 $connect=mysql_connect( "localhost", "root", "") or die( "SQL server에 연결 할수 없습니다."); $tbl_list = mysql_list_tables("kedu"); //데이타 베이스를 설정합니다. $result = mysql_query("insert into test (name) values ('$name')"); $result=mysql_query($result, $connect ); $tbl_name="select * from test" ; $result=mysql_query($tbl_name, $connect ); $print=mysql_fetch_array($result); //테이블의 내용을 가져옴 $rows = mysql_num_rows($result); echo("입력 되었습니다..<br>"); for($i=0; $i< $rows;$i++) { echo("$print[name]<br>"); $print=mysql_fetch_array($result); } ?> 이름을 입력받아 체크하고 mysql에 저장하고 출력하기 테이블 작성 ( mysql DBNAME < test.tbl ) create table test ( no int default '0' not null auto_increment, id char(10), name char(10), pw char(8), regdate date, regtime time, PRIMARY KEY(no) ); check_input.php 작성 <html> <body> <table> <form name="form" method="post" action=access_db.php3> <tr> <td>아이디 </td> <td><INPUT name=id size=10> <br></td></tr> <tr> <td>이 름 </td> <td><INPUT name=name size=10> <br></td></tr> <tr> <td>비밀번호</td> <td><INPUT name=pw size=10 type=password> <br></td></tr> <tr> <td>비밀번호확인</td> <td><INPUT name=pw2 size=10 type=password> </td></tr></table> <input type="submit" value="보내기"> </form> </table> </body> </html> access_db.php 작성 <? // MySQL 서버에 연결한다 $connect=mysql_connect( "localhost", "root", "") or die( "SQL server에 연결 할수 없습니다."); $tbl_list= mysql_list_tables("kedu"); //데이타 베이스를 설정합니다. if($id == "") { echo "아이디를 입력 하지 않았습니다."; } elseif($name == ""){ echo "이름을 입력 하지 않았습니다."; } elseif($pw == ""){ print "비밀번호를 입력하지않았습니다.<br>"; print "비밀번호를 입력 해주세요.<br>"; } elseif($pw2 == ""){ print "비밀번호확인을 입력하지 않았습니다.<br>"; print "비밀번호확인을 입력 해주세요.<br>"; } elseif($pw != $pw2) { print "비밀번호가 같지 않습니다. <br>"; print "비밀번호를 다시 입력 해주세요. <br>"; } else { echo "$id가 입력 되었습니다..<br>"; $date = date("y-m-d", time()); $result = mysql_query("insert into test values ('','$id','$name','$pw','$date','$time')"); $result=mysql_query($result, $connect); $tbl_name="select *from test" ; $result=mysql_query($tbl_name, $connect ); $print=mysql_fetch_array($result); //테이블의 내용을 가져옴 $rows = mysql_num_rows($result); for($i=0; $i< $rows;$i++) { echo("$print[id] $print[name] $print[pw] $print[regdate]<br>"); $print=mysql_fetch_array($result); } } ?> 테이블 출력 프로그램 테이블 출력 프로그램 <? // MySQL 서버에 연결한다 $connect=mysql_connect( "localhost", "username", "") or die( "Unabletoconnect to SQL server"); //-------------------------------------------------------------------------- // 사용가능한 DB 목록을 검색 //-------------------------------------------------------------------------- $dblist = mysql_listdbs(); //데이타 베이스 목록을 인식한다. $dbnum=mysql_num_rows($dblist); //데이타 베이스 갯수를 변수에 저장한다. for($i=0; $i < $dbnum; $i++) //데이타 베이스 갯수 만큼 { $dbname[$i] = mysql_dbname($dblist, $i) ; //데이타 베이스 목록 이름을 변수에 저장한다. } echo "데이타 베이스 검색 내용 <br>"; for($i=0; $i < count($dbname); $i++) { //데이타 베이스 갯수 만큼 echo "$dbname[$i] <br>"; // 데이타 베이스 이름을 웹에 나타내준다. } //-------------------------------------------------------- // 사용가능한 테이블 목록을 검색 //-------------------------------------------------------- $tbl_list = mysql_list_tables("board"); //데이타 베이스를 설정합니다. $tbl_num=mysql_num_rows($tbl_list); // 테이블 갯수를 변수에 저장합니다. echo "<br>데이타 테이블 검색 내용--> 테이블명,레코드수<br>"; for($i=0; $i < $tbl_num; $i++) //테이블 갯수 만큼 { $tbl_name[$i] = mysql_tablename($tbl_list,$i) ; // 테이블 이름을 변수에 저장 $result[$i] = mysql_query( "SELECT * FROM $tbl_name[$i]"); //테이블의 내용을 변수에 저장 $rows[$i] = mysql_num_rows($result[$i]); // 테이블의 레코드 수를변수에 저장 echo "$tbl_name[$i], $rows[$i], $name <br>"; //테이블의 이름과, 레코드수를 웹에 출력 해줍니다. } //-------------------------------------------------------------------- // 사용가능한 테이블 내용을 출력 //-------------------------------------------------------------------- $tbl_name="select * from test" ; $result=mysql_query($tbl_name, $connect ); $print=mysql_fetch_array($result); //테이블의 내용을 가져옴 echo("<br>테이블 내용을 화면에 출력 시켜 줍니다.<br>"); echo("이름, 나이, 전화번호부, 주소<br>"); echo("$print[name], $print[age], $print[tel], $print[addr]<br>"); //------------------------------------------------------------------------------- // 사용가능한 테이블 내용을 전체 출력 //------------------------------------------------------------------------------- $que_bbs="select * from test" ; $result=mysql_query($que_bbs,$connect ); $print=mysql_fetch_array($result); $rows = mysql_num_rows($result); echo("<br>테이블 내용 전체를 출력 시켜 줍니다.<br>"); echo("이름, 나이, 전화번호부, 주소<br>"); for($i=0; $i < $rows; $i++) { echo("$print[name], $print[age], $print[tel], $print[addr]<br>"); $print=mysql_fetch_array($result); } ?> mysql_fetch_array 예제 mysql_free_result 를 해서 메모리를 풀어 준다. <? mysql_connect($db_server, $db_user, $db_pass); $result = mysql_db_query("$db_name","select * from $table_name"); while($row = mysql_fetch_array($result)) { echo $row["no"]; echo $row["name"]; echo " "; } mysql_free_result($result); ?> 이미지 화일 출력 <? Header("Content-type: image/gif"); $file = "test.gif"; $size = 4096; if (!($fp = fopen($file, "r"))) { die("could not open input"); exit; } while ($data = fread($fp,$size)) { print($data); } ?> 달력 예제 달력 예제 <? // 변수값 설정 $date=01; $day=01; $off=0; //년도 달 설정 $year = '2000'; $month = '01'; /* Figure out how many days are in this month */ while (checkdate($month,$date,$year)): $date++; endwhile; // 메뉴 표시하기 echo "<table width='420' ><tr><td align = center>$year 년 $month 월</td></tr></table>"; echo "<table border='1' width='420'><tr>"; echo "<td><b><font face='돋음'>월</font></b></td>"; echo "<td><b><font face='돋음'>화</font></b></td>"; echo "<td><b><font face='돋음'>수</font></b></td>"; echo "<td><b><font face='돋음'>목</font></b></td>"; echo "<td><b><font face='돋음'>금</font></b></td>"; echo "<td><b><font face='돋음'>토</font></b></td>"; echo "<td><b><font face='돋음'>일</font></b></td>"; echo "<tr>"; //루프 돌리기 while ($day<$date): /* Figure what day of the week the first falls on and set the number of preceding and trailing cells accordingly */ if ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Sunday') { echo "<td>$day</td>"; $off = '01'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Monday') { echo "<td></td><td>$day</td>"; $off= '02'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Tuesday') { echo "<td></td><td></td><td>$day</td>"; $off= '03'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Wednesday') { echo "<td></td><td></td><td></td><td>$day</td>"; $off= '04'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Thursday') { echo "<td></td><td></td><td></td><td></td><td>$day</td>"; $off= '05'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Friday') { echo "<td></td><td></td><td></td><td></td><td></td><td>$day</td>"; $off= '06'; } elseif ($day == '01' and date('l', mktime(0,0,0,$month,$day,$year)) == 'Saturday') { echo "<td></td><td></td><td></td><td></td><td></td><td></td><td>$day</td>"; $off= '07'; } else { echo "<td>$day</td>"; } //일 증가 시키기 $day++; $off++; if ($off>7) { echo "</tr><tr>"; $off='01'; } else { echo ""; } endwhile; echo "</table>"; ?> 원하는 문자열 검색(ereg) 어떤 문자열 중에서 000 이라는 문자열의 레코드를 찾아 내기 표현 : int ereg(string pattern, string string, array [regs]); 사용법 : ereg(찾을 패턴, 검사할 문자열, 결과 배열); 예제 : ereg("([0]{3})", $hash[code], $regs) 각각의 패턴은 ()로 정의를 합니다. ([0]{3})는 0의갯수가 3개로 나와야한다는 의미이다. ([0]{2, 3}) 0의 갯수가 2개 혹은 3개를 의미 ([0-9]{2, 3}) 0에서 9까지의 숫자가 2자리 혹은 3자리를 의미 <? $sth = mysql_query("select * from kangsa_type order by code"); while($hash = mysql_fetch_array($sth)) { if(ereg("([0]{3})", $hash[code], $regs)) { print "$hash[typename]"; } } ?> 인증 예제 auth.sql 을 먼저 작성을한다. # MySQL dump 6.6 # # Host: localhost Database: myhome #-------------------------------------------------------- # Server version 3.23.8-alpha # # Table structure for table 'auth' # CREATE TABLE auth ( id char(10) DEFAULT '' NOT NULL, passwd char(10), name char(10), level int(11), PRIMARY KEY (id) ); # # Dumping data for table 'auth' # INSERT INTO auth VALUES ('nalabi','xxxx','김용일',1); auth.ph 인증하는 부분을 작성한다. <?php cfunction authenticate() { Header( "HTTP/1.0 401 Unauthorized"); $title= "Invalid Login"; ?> 아이디와 암호가 필요합니다! <?php exit; } if(!isset($PHP_AUTH_USER)) { authenticate(); } else { mysql_pconnect( 'localhost', 'root', '') or die( "Unable to connect to SQL server"); // MySQL 서버 접속 mysql_select_db( "test") or die( "Unable to select database"); // DB 선택 $result = mysql_query( "select name , level from auth where id='$PHP_AUTH_USER' and passwd='$PHP_AUTH_PW' "); if(!mysql_num_rows($result)) { authenticate(); } else { $userinfo = mysql_fetch_array($result); } } ?> test.php 프로그램 하는데서 인증하는 부분을 적용한다. <? include ("auth.ph"); echo("어서 오십시요."); ?> 커널 버전 나타내주는 함수 kernel.php <? function kernel() { $label = array("안정버전","개발버전","알파버전"); $cmd = "/usr/bin/finger @ftp.kernel.org| cut -c59-66 | sed -e '/^$/d'"; exec($cmd,$array,$rtn); for($i=0; $i < count($array); $i++) { list($v1, $v2, $v3) = split('[/.-]' , $array[$i]); $version = "v".$v1.".".$v2."/linux-".$array[$i].".tar.gz"; $label[$i] = "<a href = ftp://ftp.kernel.org/pub/linux/kernel/".$version.">".$label[$i]." : ".$array[$i]."</a>"; } return $label; } $label = kernel(); echo("$label[0] <br> $label[1] <br> $label[2]"); ?> 도메인 표시 함수 whois 프로그램이 깔려 있어야 합니다. rpm -qa | grep whois whois-1.0.10-1 프로그램 <? function domain($string) { $cmd = "whois $string"; exec($cmd,$array,$rtn); for ($i=0; $i < count($array); $i++) { $rstring .= "$array[$i]"; } return $rstring; } print domain("formail.org"); ?> 문자열 체크 함수 예제(ereg) 문자열에 영어 대소문자, 숫자만 오도록 하게 하는 함수입니다 <? function check_id($string) { $error_msg = "error"; if (ereg("[^a-zA-Z0-9]", $string)) { $error_msg = $error_msg; return $error_msg; } else { return $string; } } $id1 = "abcd"; $id2 = "ZabCA"; $id3 = "9Zab01"; $id4 = "#ab.c.%"; $id5 = "한글"; $msg = check_id($id1); print "id1 : $msg"; $msg = check_id($id2); print "id2 : $msg"; $msg = check_id($id3); print "id3 : $msg"; $msg = check_id($id4); print "id4 : $msg"; $msg = check_id($id5); print "id5 : $msg"; ?> ID체크 해주는 프로그램 sql 문 # MySQL dump 7.2 # # Host: localhost Database: test #-------------------------------------------------------- # Server version 3.23.11-alpha # # Table structure for table 'login3' # CREATE TABLE login3 ( nick char(10) ); # # Dumping data for table 'login3' # INSERT INTO login3 VALUES ('나라비'); test.php <? function add_error($why, $reason, $nick) { print "$reason<br>"; } $nick= "나라비"; if (ereg ("[~!@#$%^&*()~|"/'+=-_:;,.<>]", $nick)) { $why="닉네임"; $reason="닉네임에 특수문자가 있습니다."; add_error($why,$reason,$nick); exit; } if(ereg(" ", $nick)) { $why="닉네임"; $reason="닉네임에 공백이 있습니다."; add_error($why,$reason,$nick); exit; } if($nick=="") { $head = "닉네임"; $mesg = "닉네임이 없습니다."; add_error($head,$mesg,$nick); } if(strlen($nick) < 2) { $head = "닉네임"; $mesg = "닉네임은 특수문자를 제외한 2자이상으로 넣어주세요."; add_error($head,$mesg,$nick); } $server = "localhost"; $name = "root"; $passwd = ""; $dbname = "test"; mysql_connect($server, $name, $passwd); mysql_select_db($dbname); $que1 = "select nick from login3 where nick='$nick'"; $result= mysql_query($que1); $current_row = mysql_fetch_row($result); if($current_row[0] == $nick) { $head = "닉네임"; $reason = $nick."님이 이미 등록되어 있습니다."; add_error($why,$reason,$nick); } else { print $nick; } ?> 게시물 페이지 변경 예제 sql 문 # MySQL dump 6.4 # # Host: localhost Database: test #-------------------------------------------------------- # Server version 3.23.5-alpha # # Table structure for table 'login' # CREATE TABLE login ( id char(10) DEFAULT '' NOT NULL, reg_date char(10), nick char(10), passwd char(10), name char(10), user_num int(11), address char(10), phone char(10), email char(10), job char(10), PRIMARY KEY (id) ); # # Dumping data for table 'login' # INSERT INTO login VALUES ('nalab1','','aaaa','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab2','','bbbb','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab3','','cccc','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab4','','dddd','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab5','','eeee','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab6','','ffff','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab7','','gggg','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab8','','hhhh','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nalab9','','iiii','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nala10','','jjjj','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nala11','','kkkk','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nala12','','llll','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nala13','','mmmm','bbbb','1111',0,'1','cccc','dddd','eeee'); INSERT INTO login VALUES ('nala14','','nnnn','bbbb','1111',0,'1','cccc','dddd','eeee'); test.php <? $server = "localhost"; $name = "root"; $passwd = ""; $dbname = "test"; mysql_connect($server, $name, $passwd); mysql_select_db($dbname); $page_scale=3; //한페쥐당 보여줄 숫자 번호[1][2][3] $scale=2; // 한페이쥐 당 보여줄 라인 개수(레코드) if(!$star){ $star= 0 ;} // 시작할 레코드 번호 - 1 $page=floor($star/($scale*$page_scale)); // 페이지 수 얻기 $que1="select DATE_FORMAT(reg_date,'Y.m.d'), id,nick, passwd ,name , user_num, address, phone, email, job from login order by reg_date DESC " ; $result = mysql_query($que1); $total = mysql_affected_rows(); //게시물 총 수 $last=floor($total/$scale); //마지막 번호 echo "<font size=-1>전체 등록자 : $total 명 입니다."; echo "<html><title>회원관리</title><body bgcolor=ffffff><center><font size=4>회원관리 페이지</font> <table border=1><tr bgcolor=336699> <td align=center><font color=ffffff size=-1>등록일</font><td align=center><font color=ffffff size=-1>ID</font></td> <td align=center><font color=ffffff size=-1>닉네임</font></td> <td align=center><font color=ffffff size=-1>비밀번호</font></td> <td align=center><font color=ffffff size=-1>이름</font></td> <td align=center><font color=ffffff size=-1>주민등록번호</font></td> <td align=center><font color=ffffff size=-1>주소</font></td> <td align=center><font color=ffffff size=-1>연락처</font></td> <td align=center><font color=ffffff size=-1>E-Mail</font></td> <td align=center><font color=ffffff size=-1>직업</font></td> <td align=center><font color=ffffff size=-1>관리</font></td></tr>"; if($star) { $n=$total-$star; } else { $n=$total; } for($i=$star ; $i< $star+$scale ; $i++) // star 에서 scale 까지 만 { if($i< $total ) // 전체 자료 개수까지만 출력 { mysql_data_seek($result,$i); $row=mysql_fetch_array($result); $imsi=$row[5]; echo"<tr><td align=center><font size=-1>$row[0]</font></td> <td align=center><font size=-1>$row[1]</font></td> <td align=center><font size=-1>$row[2]</font></td> <td align=center><font size=-1>$row[3]</font></td> <td align=center><font size=-1>$row[4]</font></td> <td align=center><font size=-1>$row[5]</font></td> <td align=center><font size=-1>$row[6]</font></td> <td align=center><font size=-1>$row[7]</font></td> <td align=center><font size=-1><a href=mailto:$row[8]>$row[8]</font></a></td> <td align=center><font size=-1>$row[9]</font></td> <td align=center><font size=-1><a href=$admin_url?action=erase&num=$row[5]&start=$start>삭제</a></font></td></tr> "; } $n--; } echo "</table><br><br>"; if($total>$scale) { if($star+1>$scale*$page_scale) { $pre_star=$star-$scale; echo"<a href='$PHP_SELF?star=$pre_star'> 이전</a>"; } for($vj=0; $vj < $page_scale ; $vj++) { $ln=($page*$page_scale+$vj)*$scale; $vk=$page*$page_scale+$vj+1; if($ln < $total) { if($ln!=$star) { echo"<a href='$PHP_SELF?star=$ln'><font size=2>[$vk]</a></font>"; } else { echo"<font size-2><b>$vk</b></font>"; } } } if($total>(($page+1)*$scale*$page_scale)) { $n_star=($page+1)*$scale*$page_scale; echo"<a href='$PHP_SELF?star=$n_star'>다음</a>"; } } ?> 정규표현식 정규식 표현 a(b*) : a, ab, abb, a와 임의의 갯수들로 된 문자열 a(b+) : ab, abb, abbb, ab와 임의의 갯수들로 된 문자열 a(b?) : a or ab, a 다음에 b가 있어도 되고, 없어도 된다. a(b{3}) : abbb a(b{2,}) : abb, abbb, abbbb, a 와 두개 이상의 b들로 된 문자열 a(b{2.4}) : abb, abbb, abbbb, a 와 두개 이상, 네 개 이하의 b들로 된 문자열 [a-z] : a-z 까지 문자열 [a-zA-Z0-9] : 임의 영숫자 공백 문자 [^0-9] : 임의 숫자가 아닌문자 [~a-zA-Z0-9]: 임이의 영숫자가 아닌 문자 임의의 공백문자가 아닌 문자 a.c : aac, abc, acc, a 와 c에 임의의 문자 하나가 끼어 있는 문자열 ^a.* : a로 시작하는 임의의 문자열 [a-c]*x$ : x, ax, bx, abax, abcx, a에서 c사이의 임의의 문자들로이루어지며, 마지막 문자가 x인 문자열 b[ao]y : bay 또는 boy에인 문자열 [^Zz]{5} : Z or z 가 포함되지 않은 길이가 5인 임의의 문자열 [[:digit:]] : 임의의 숫자 , [0-9] [[:<:]a.* : a로 시작하는 임의의 문자열 예) ^([0-9]{2,4})(-[0-9]{3,4})(-[0-9]{3,4}) : 전화번호(xxxx-xxxx-xxxx) 임의의 공백문자가 아닌 문자 영어 단어 검색 engdic 프로그램이있나 확인하고 없으면 설치한다. which engdic test.php, exec 를 사용해서 engdic 프로그램을 실행한다. <? // 영한/ 사전 입니다. function engdic($string) { $cmd = "engdic $string"; exec($cmd,$array,$rtn); for ($i=0; $i < count($array); $i++) { $rstring .= "$array[$i]"; } return $rstring; } print engdic("hello"); ?> IP 소속기관,회사 알아보기 fwhois 프로그램이있나 확인하고 없으면 설치한다. which fwhois test.php, exec 를 사용해서 engdic 프로그램을 실행한다. <? //아이피 소속 회사, 기관 알아내는 함수 function ip($string) { $cmd = "fwhois $string"."@whois.nic.or.kr"; exec($cmd,$array,$rtn); for ($i=0; $i < count($array); $i++) { $rstring .= "$array[$i]"; } return $rstring; } print ip("210.180.116.238"); ?> 현재의 년/월/일 구하기 <? function date_selector($name, $date) { $monthname = array(1=>"1월", "2월", "3월", "4월","5월","6월","7월","8월","9월","10월", "11월","12월"); if($date == "") { $date = time(); } //년 print "<select name = ".$year." year > "; $start_year = date("Y", $date); for($current_year = $start_year - 5; $current_year <= $start_year + 5; $current_year++) { print "<option value = $current_year"; if(date("Y", $date) == $current_year) { print " selected "; } print " > $current_year "; } print "</select>"; //월 print "<select name = ".$month." month >"; for($current_month = 1; $current_month <= 12; $current_month++) { print "<option value = $current_month "; if(date("m", $date) == $current_month) { print " selected "; print ">"; print $monthname[$current_month]; } else { print ">"; print $monthname[$current_month]; } print " "; } print "</select>"; //일 print "<select name = ".$day." day >"; for($current_day = 1; $current_day <= 31; $current_day++) { print "<option value = $current_day "; if(date("d", $date) == $current_day ) { echo " selected "; } echo " > $current_day 일"; } print "</select>"; } echo "<html> <head> <title>연습</title> <body>"; if(isset($month)) { //$use_date = mktime(0, 0, 0, $sample_month, $sample_day, $sample_year); $use_date = mktime(0, 0, 0, $month, $day, $year); } else { $use_date = time(); } print "<form action = cal.php method = post>"; print date_selector("cal", $use_date); echo "<input type = submit value = 입력> </form> </body> </html>"; ?> 자바스크립트 idcheck를 위한 예제 기존에 아이디가 있나 없나를 체크를 하기 위해서. idcheck.htm <html> <script language="JavaScript"> function id_chk(obj) { var form = document.select1; var w_id_chk; if ( form.s_id.value == "" ) { alert("아이디를 입력하지 않았습니다."); form.s_id.focus(); return; } else if ((form.s_id.value.toString().length < 4) || (form.s_id.value.toString().length > 10)) { alert("아이디는 4자이상 10자이내로 입력하여 주십시요."); form.s_id.focus(); return; } ck=1; var str = 'idcheck.php?s_id='+obj.s_id.value; window.open(str,'w_id_chk','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=300,height=150'); return; } </script> <body> <form method=post name=select1 > <table> <tr> <td width = 200 BGCOLOR="#F2F5F1" align = right><font size="2" color="red">*</font><font size="2">수강생 아이디</font></td> <td width = 550><font size="2"><input type=text name=s_id size=8 maxlength=8> <input TYPE='buton' NAME='chkbutton' VALUE='중복아이디 확인' onClick="deny_javascript:id_chk(this.form);"></a> <br>4~8자 영문숫자 조합, 첫글자는 영문, 대소문자 구별안함</font></td> </tr> </table> </from> </body> </html> idcheck.php <html> <body> <? include "db.ph"; db_connect(); $sth3 = mysql_query("select id from cls_member where id = '$s_id'"); $total = mysql_affected_rows(); //게시물 총 수 if($total == "0") { print "<br><br><br><font size = 2>$s_id 는 사용할수 있는 아이디 입니다.</font>"; } else { print "<br><br><br><font size = 2>$s_id 는 이미 사용중인 아이디 입니다.</font>"; } ?> </body> </html> 메뉴 만들기 예제 <html> <script language="JavaScript"> <!-- // 마우스를 주메뉴 위에 올려 놓으면 부메뉴가 나오게 하는 스크립트 function MM_findObj(n, d) { //v3.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x; } function MM_showHideLayers() { //v3.0 var i,p,v,obj,args=MM_showHideLayers.arguments; for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2]; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; } obj.visibility=v; } } // 부메뉴 롤오버 기능 function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v3.0 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </script> <body marginheight=0 marginwidth=0 topmargin=0 rightmargin=0 leftmargin="0" bgcolor="ffffff"> <table width="780" border="0" cellspacing="0" cellpadding="0" > <tr><td height="67" ></td><td height="67" width="120"><img src="top_img/p0.gif"></td></tr> <tr><td><a href="#" onMouseOver="MM_showHideLayers('about1','','show', 'glmoum','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></A><a href="#" onMouseOver="MM_showHideLayers('product1','','show', 'glmoum','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('news1','','show', 'glmoum','','hide')"><img name="news" border="0" src="menu_img/news0.gif" width="54" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mdata','','show', 'glmoum','','hide')"><img name="data" border="0" src="menu_img/data0.gif" width="99" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','show', 'glmoum','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','show', 'study','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></a><a href="#" onMouseOver="MM_showHideLayers('msitemap','','show', 'study','','hide')"><img name="map" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></a><img name="map" border="0" src="top_img/blank.gif" width="66" height="33"></td><td height="33" width="120"><img src="top_img/p1.gif"></td></tr> </table> <!-- about us --> <div id="about1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><img name="about" border="0" src="menu_img/aboutus1.gif" width="85" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="product" border="0" src="top_img/blank.gif" width="73" height="33"></a></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('about1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </tr> </table> <table border="0" cellspacing="0" cellpadding="0" > <tr> <!-- 부메뉴 --> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="../about1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 1','','menu_img/about_11.gif',0)"><img name="about sub 1" border="0" src="menu_img/about_10.gif" width="154" height="28"></a><a href="../about2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 2','','menu_img/about_21.gif',0)"><img name="about sub 2" border="0" src="menu_img/about_20.gif" width="85" height="28"></a><a href="../about3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 3','','menu_img/about_31.gif',0)"><img name="about sub 3" border="0" src="menu_img/about_30.gif" width="102" height="28"></a><a href="../about4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 4','','menu_img/about_41.gif',0)"><img name="about sub 4" border="0" src="menu_img/about_40.gif" width="86" height="28"></a><a href="about5.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 5','','menu_img/about_51.gif',0)"><img name="about sub 5" border="0" src="menu_img/about_50.gif" width="166" height="28"></a><a href="about6.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('about sub 6','','menu_img/about_61.gif',0)"><img name="about sub 6" border="0" src="menu_img/about_60.gif" width="67" height="28"></a></td><td height="28" width="120"><img src="top_img/blank.gif" WIDTH="100" HEIGHT="5"></td></tr> </table> </div> <!-- product --> <div id="product1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></a></td> <td><img name="product" border="0" src="menu_img/product1.gif" width="73" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('product1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </tr> </table> <!-- 부메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="product1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 1','','menu_img/product_11.gif',0)"><img name="product 1" border="0" src="menu_img/product_10.gif" width="80" height="28"></a><a href="product2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 2','','menu_img/product_21.gif',0)"><img name="product 2" border="0" src="menu_img/product_20.gif" width="116" height="28"></a><a href="product3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 3','','menu_img/product_31.gif',0)"><img name="product 3" border="0" src="menu_img/product_30.gif" width="148" height="28"></a><a href="product4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('product 4','','menu_img/product_41.gif',0)"></td> </tr> </table></div> <!-- news --> <div id="news1" style="position:absolute; z-index:1; left: 0; top: 67 ;visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></a></td> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></a></td> <td><img name="product" border="0" src="menu_img/news1.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('news1','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </table> <!-- 부메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="news1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 1','','menu_img/news_11.gif',0)"><img name="news 1" border="0" src="menu_img/news_10.gif" width="95" height="28"></a><a href="news2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 2','','menu_img/news_21.gif',0)"><img name="news 2" border="0" src="menu_img/news_20.gif" width="179" height="28"></a><a href="news3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 3','','menu_img/news_31.gif',0)"><img name="news 3" border="0" src="menu_img/news_30.gif" width="122" height="28"></a><a href="news4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('news 4','','menu_img/news_41.gif',0)"></td> </tr> </table></div> <!-- data --> <div id="mdata" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></A></td> <td><img name="coll" border="0" src="menu_img/data1.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mdata','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </tr> </table> <!-- 부메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="data1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 1','','menu_img/data_11.gif',0)"><img name="data room 1" border="0" src="menu_img/data_10.gif" width="85" height="28"></a><a href="data2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 2','','menu_img/data_21.gif',0)"><img name="data room 2" border="0" src="menu_img/data_20.gif" width="196" height="28"></a><a href="data3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('data room 3','','menu_img/data_31.gif',0)"><img name="data room 3" border="0" src="menu_img/data_30.gif" width="111" height="28"></a><a href="data4.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image30','','menu_img/data_41.gif',0)"></td> </tr> </table></div> <! -- collaborator --> <div id="mcollaborator" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></A></td> <td><img name="coll" border="0" src="menu_img/collaborator1.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcollaborator','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </table> <!-- 부메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="coll1.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('collaborator 1','','menu_img/collaborator_11.gif',0)"><img name="collaborator 1" border="0" src="menu_img/collaborator_10.gif" width="129" height="28"></a><a href="coll2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('collaborator 2','','menu_img/collaborator_21.gif',0)"><img name="collaborator 2" border="0" src="menu_img/collaborator_20.gif" width="158" height="28"></a></td> </tr> </table></div> <!-- contactus --> <div id="mcontactus" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> <!-- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></A></td> <td><img name="contact" border="0" src="menu_img/contactus1.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('mcontactus','','hide')"><img name="contact" border="0" src="menu_img/sitemap0.gif" width="74" height="33"></td> </table> <!-- 부메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td width=660 height="28" colspan="2" bgcolor="#0D3689"><a href="contactus.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 1','','menu_img/contactus_11.gif',0)"><img name="contactus 1" border="0" src="menu_img/contactus_10.gif" width="134" height="28"></a><a href="contactus2.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 2','','menu_img/contactus_21.gif',0)"><img name="contactus 2" border="0" src="menu_img/contactus_20.gif" width="78" height="28"></a><a href="contactus3.html" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('contactus 3','','menu_img/contactus_31.gif',0)"></td> </tr> </table></div> <! -- sitemap --> <div id="msitemap" style="position:absolute; height: 50; z-index:1; left: 0; top: 67; visibility: hidden"> <! -- 주메뉴 --> <table border="0" cellspacing="0" cellpadding="0" > <tr> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="about" border="0" src="menu_img/aboutus0.gif" width="85" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="product" border="0" src="menu_img/product0.gif" width="73" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="product" border="0" src="menu_img/news0.gif" width="54" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="coll" border="0" src="menu_img/data0.gif" width="99" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="coll" border="0" src="menu_img/collaborator0.gif" width="110" height="33"></td> <td><a href="#" onMouseOver="MM_showHideLayers('msitemap','','hide')"><img name="contact" border="0" src="menu_img/contactus0.gif" width="99" height="33"></td> <td><img name="map" border="0" src="menu_img/sitemap1.gif" width="74" height="33"></td> </tr> </table> <!-- 부메뉴 --> </table><table border="0" cellspacing="0" cellpadding="0" > <tr><td></td></tr> </table> </div> </table> </body> </html> Oracle 테이블 구조 id int, name char(20), age int, addr(20) test.php <?php $conn = OCILogon("scott","tiger"); //로그인을 한다. $stmt = OCIParse($conn,"select * from test"); //test테이블의 내용을 변수에 저장한다. OCIExecute($stmt); //저장한 변수를 활성화 한다. while (OCIFetchInto($stmt, $col, OCI_NUM)) { //변수의 내용을 가져온다. echo "". $col[0]."....". $col[1]."....". $col[2]."....". $col[3]." "; //테이블의 내용을 출력 시킨다. } OCIFreeStatement($stmt); // 변수의 내용을 지운다. OCILogoff($conn);// 로그 오프를 한다. ?> Mysql mysql 주기적으로 백업하기 myhome_bakcup 셀스크립트 #!/bin/bash T=$(echo `date +%Y%m%d%H%M`) MY=$(echo /home/nalabi/backup) echo "nalabi 의 데이타가 백업 되었습니다. $T" mysqldump myhome > $MY/myhome$T.sql gzip $MY/myhome$T.sql /etc/crontab 사용하기 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 형식 : a b c d e id runparts directory 분(0~59) 시(0~24) 날짜(0~31) 달(0~12) 요일(0~7) id(크론이 사용할 계정) directory(실행하게될 파일 놓이게 될 경로) 예제 : 15 14 1 * * root /home/nalabi/backup/myhome_backup 매달 1일 오후 2시 15에 myhome_backup을 실행한다. 0 22 * * 1-5 root /home/nalabi/backup/myhome_backup 월요일 부터 금요일까지 매일 오후 8시에 myhome_backup을 실행한다. 23 0-23/2 * * * root /home/nalabi/backup/myhome_backup 매일 0, 2, 4, ....시 23분에 실행한다. mysql 루트 패스워드를 잃어 버렸을 때 mysql 중지한다. /etc/init.d/mysql stop 데몬을 아무나 들어갈수 있게 다시 실행한다. safe_mysqld --skip-grant & 루트 패스워드를 변경한다. mysql> update user set password='' where user='root'; mysql 을 재시동 합니다. /etc/init.d/mysql stop /etc/init.d/mysql start 데이타 타입 (테이블 생성시 컬럼의 데이타 타입입니다.) 수치 데이터 타입 * INTEGER (INT) * SMALLINT * NUMBER * DECIMAL(DEC) (x,y) : x는 실수자리, y는 소수점 이하자리 * FLOAT 문자 데이터 타입 * VARCHAR (n) : 8비트 문자 길이가 최대 n개인 문자열 *CHARACTER(CHAR) (n) : n개의 8비트 문자열 * LONG 그외의데이터 타입 * DATE/TIME : 날짜/시간 * LONG RAW 쉘에서 DB 내용 보기 mysqlshow +-----------+ |Databases | +-----------+ | board | | kedu | | mysql | | test | +-----------+ Mysql에 들어가기 mysql test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with-A Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 7 to server version: 3.22.23b Type 'help' for help. mysql> 데이타 백업 받기 (화일로 받음) mysqldump 를 이용해서 sql 데이타를 백업 받을수 있으며 DB이름만 지정하면 전체 테이블이, 테이블 이름 까지 지정하면 해당 테이블만 백업을 할수 있다. mysqldump DB이름 (table이름) > 화일이름 mysqldump test test > test.sql # MySQL dump 6.0 # # Host: localhost Database: test #-------------------------------------------------------- # Server version 3.22.23b # # Table structure for table 'test' # CREATE TABLE test ( no int(11), name char(10), tel char(15), addr char(20), sex char(1), birth date ); # # Dumping data for table 'test' # INSERT INTO test VALUES (2,'이주상','02-504-xxxx','과천시','m','1971-02-02'); INSERT INTO test VALUES (3,'임정남','02-420-xxxx','송파구','f','1971-03-03'); INSERT INTO test VALUES (4,'강행모','02-856-xxxx','관악구','f','1971-04-04'); INSERT INTO test VALUES (5,'이현영','0342-718-xxxx','분당구','m','1971-05-05'); INSERT INTO test VALUES (6,'이병환','02-891-xxxx','하안동','m','1980-06-06'); INSERT INTO test VALUES (1,'남상욱','333-4444','동작구','m','1971-01-01'); 데이타 입력하기 (화일--> Mysql) mysql test < test.sql 참고로 데이타 확인은 mysql -e "select * from test" test +------+--------+---------------+--------+------+------------+ | no | name | tel | addr | sex | birth | +------+--------+---------------+--------+------+------------+ | 2 |이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 | | 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 | | 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 | | 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | | 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | +------+--------+---------------+--------+------+------------+ 사용자 만들기 aaaa라는 사용자(user)를 만듭니다. mysql mysql(mysql db로 들어갑니다.) mysql>insert into user values ('localhost','aaaa','','y','y','y','y','y','y','y','y','y','y','y','y','y','y'); Query OK, 1 row affected (0.04 sec) reload 를 꼭 실행시킵니다.(쉘에서) mysqladmin reload aaaa라는 사용자에게 aaaa라는 비밀번호를 부여합니다. mysqladmin -u aaaa password aaaa mysqladmin reload 데이타 베이스 만들기 사용자가 없을 경우 : mysqladmin create aaaa 사용자와 비밀번호가 있는 경우 : mysqladmin -u aaaa -p create aaaa (or) mysqladmin -u aaaa -paaaa create aaaa 서버의 데이타 베이스 끌어오기 서버 상의 데이타 베이스를 나의 컴의 프로그램으로 가져 올때 사용합니다. 서버의 mysql mysql 을 실행 합니다. INSERT INTO db VALUES ('나의 컴 아이피','DB이름','사용자','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO user VALUES ('나의 컴 아이피 '사용자 ','비밀번호 ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); 그리고, 위의 퀘리문을 편집해서 실행 합니다. 그려면 나의 컴에 DB가 없어도 서버의 DB를 가져와서 사용을 할수가 있습니다. 테이블 만들기 사용법 : create table 테이블이름(변수명 변수값, ......); mysql> create table test (no int, name char(10), age int, tel char(15)); Query OK, 0 rows affected (0.00 sec) 테이블 보기 사용법 : show tables; mysql> show tables; +-----------------+ | Tables in test | +-----------------+ | test | +-----------------+ 2 rows in set (0.00 sec) mysql> show tables like 'ad_%'; +-------------------------+ | Tables_in_dbkedu (ad_%) | +-------------------------+ | ad_expose | | ad_img | | ad_redirect | | address | +-------------------------+ 4 rows in set (0.00 sec) 테이블 데이타 입력하기 mysql > insert into test values(1,'김용일','29','02-825-xxxx'); Query OK, 1 row affected (0.00 sec) 특정 필드만 입력 mysql> insert into test (no,name) values ('7','남상욱'); Query OK,1 row affected (0.00 sec) 테이블내용 보기 select 문을 이용한다. mysql> select * from test; +------+--------+------+---------------+ | no | name | age | tel | +------+--------+------+---------------+ | 1 | 김용일 | 29 | 02-825-xxxx | | 2 | 이주상 | 29 | 02-504-xxxx | | 3 | 임정남 | 29 | 02-420-xxxx | | 4 | 강행모| 29 | 02-856-xxxx | | 5 | 이현영 | 29 | 0342-718-xxxx | | 6 |이병환 | 12 |02-891-xxxx | | 7 | 남상욱 | NULL | NULL | +------+--------+------+---------------+ 7 rows in set (0.00 sec) 필드 추가 alter 문을 이용한다. mysql> alter table test add addr char(20); Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> desc test; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | no |int(11) | YES | | NULL | | | name | char(10) | YES | | NULL | | | age | int(11) | YES | | NULL | | | tel | char(15) | YES | | NULL | | | addr | char(20) | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 5 rows in set (0.00 sec) 필드 삭제 alter 문을 이용한다. mysql> alter table test drop age; Query OK, 6 rows affected (0.01 sec) Records: 6 Duplicates: 0 Warnings: 0 기타 alter 용법 alter 문을 이용한다. ALTER TABLE에는 다음 세가지 형식이 있습니다. ALTER TABLE table_name ADD ( ... ) ; ALTER TABLE table_name MODIFY( ... ) ; ALTER TABLE table_name DROP PRIMARYKEY ; ALTER TABLE t1 RENAME t2; 테이블 이름을 t1에서 t2로 바꿈 ALTER TABLE t2 CHANGE a a TINYINT NOT NULL, CHANGE b c CHAR(20); 테이블 내의 컬럼 속성을 바꿈 원래 컬럼 a는 INTEGER였는데 TINYINT로, 컬럼b는 CHAR(10)이었는데 컬럼이름은 c로 이타 타입은 CHAR(20)으로 수정 ALTER TABLE t2 ADD d TIMESTAMP; 테이블 t2에 d라는이름으로 TIMESTAMP 형으로 추가 ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a); 새로운 인텍스를 생성 컬럼 a에 primary key 생성. ALTER TABLE test MODIFY (age NUMBER NULL ); NOT NULL을 NULL로 바꾸기 ALTER TABLE test MODIFY (age NUMBER NOT NULL ); NULL을 NOT NULL로 바꾸기 ALTER TABLEtest MODIFY (name VARCHAR2( 20 ) ); 열의 폭 늘이기 ALTER TABLE test MODIFY (name VARCHAR2( 15 ) ); 열의 폭 줄이기 ALTER TABLE t2 DROP COLUMN c; 컬럼 c를 없애버리고 ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c); t2 테이블에 c라는 컬럼을 새로 생성시키는데 INT (INTEGER) : 정수 UNSIGNED : 양수 NOT NULL : 아무데이타가 없으면 '0' AUTO_INCREMENT : 데이타가 자동적으로 입력됨... ADD INDEX (c) : 컬럼 c에 대해서 인텍스 생성 데이타 삭제 delete 를 이용한다. mysql>delete from test where name='김용일'; Query OK, 1 row affected(0.00 sec) 데이타 수정 update를 이용한다. mysql> update test set no=1,tel='333-4444' where name='남상욱'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update test set addr='동작구' where no='1'; 내림 차순으로 정렬 order문을 이용 mysql> select * from test order by no desc; +------+--------+------+---------------+--------+ | no | name | age | tel | addr | +------+--------+------+---------------+--------+ | 6 | 이병환 |12 | 02-891-xxxx | NULL | | 5 | 이현영 | 29 | 0342-718-xxxx | NULL | | 4 | 강행모 | 29 | 02-856-xxxx | NULL | | 3 | 임정남 | 29 | 02-420-xxxx | NULL | | 2| 이주상 | 29 | 02-504-xxxx | NULL | | 1 | 남상욱 | NULL | 333-4444 | 동작구 | +------+--------+------+---------------+--------+ 6 rows in set (0.01 sec) 무작위 정렬 rand문을 이용 mysql> select * from test order by rand(); +------+--------+---------------+--------+------+------------+ | no | name | tel | addr | sex | birth | +------+--------+---------------+--------+------+------------+ | 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | | 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 | | 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 | | 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | | 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 | +------+--------+---------------+--------+------+------------+ 6 rows in set (0.01 sec) 년도순으로 정렬 year문 이용 mysql> select * from test order by year(birth) desc; +------+--------+---------------+--------+------+------------+ | no | name | tel | addr | sex | birth | +------+--------+---------------+--------+------+------------+ | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | | 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 | | 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 | | 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 | | 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | | 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | +------+--------+---------------+--------+------+------------+ 6 rows in set (0.00 sec) 년도, 번호순으로 정렬 year 문 이용 mysql> select * from test order by year(birth) desc, no desc; +------+--------+---------------+--------+------+------------+ | no | name | tel | addr | sex | birth | +------+--------+---------------+--------+------+------------+ | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | | 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | | 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04| | 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 | | 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 | | 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | +------+--------+---------------+--------+------+------------+ 20살 이상이 몇명인가를 찾는다. where 절 이용 mysql> select count(*) from test where age >=20; +----------+ | count(*) | +----------+ | 4 | +----------+ 1 row in set (0.00 sec) null 값 검색하기 null 문 이용 mysql> select * from test where addr is not null; +------+--------+------+----------+--------+ | no | name | age | tel | addr | +------+--------+------+----------+--------+ | 1 | 남상욱 | NULL | 333-4444 | 동작구 | +------+--------+------+----------+--------+ 1 row in set (0.00 sec) null 값 검색하기 null 문 이용 mysql> select * from test whereaddr is null; +------+--------+------+---------------+------+ | no | name | age | tel | addr | +------+--------+------+---------------+------+ | 2 | 이주상 | 29 | 02-504-xxxx | NULL | | 3 | 임정남 | 29| 02-420-xxxx | NULL | | 4 | 강행모 | 29 | 02-856-xxxx | NULL | | 5 | 이현영 | 29 | 0342-718-xxxx | NULL | | 6 | 이병환 | 12| 02-891-xxxx | NULL | +------+--------+------+---------------+------+ 5 rows in set (0.01 sec) 검색 하기 like 이용 mysql> select * from test where name like '%이%'; +------+--------+------+---------------+------+ | no | name | age | tel | addr | +------+--------+------+---------------+------+ | 2 | 이주상 | 29 | 02-504-xxxx | NULL | | 5 | 이현영 | 29 | 0342-718-xxxx | NULL | | 6 | 이병환 | 12 | 02-891-xxxx | NULL | +------+--------+------+---------------+------+ 3 rows in set (0.00 sec) 범위 검색 등호, 부등호 를 이용해서 검색 mysql> select * from test where age>=10 and age <=20; +------+--------+------+-------------+------+ | no | name | age | tel | addr | +------+--------+------+-------------+------+ | 6 | 이병환 | 12 | 02-891-xxxx | NULL | +------+--------+------+-------------+------+ 1 row in set (0.00 sec) in 검색 in 문을 이용해서 검색 mysql> select * from test where addr in('동작구','관악구'); +------+--------+------+-------------+--------+ | no | name | age | tel | addr | +------+--------+------+-------------+--------+ | 4 | 강행모 | 29 | 02-856-xxxx | 관악구 | | 1 | 남상욱 | NULL | 333-4444 | 동작구 | +------+--------+------+-------------+--------+ 2 rows in set (0.00 sec) not in 검색 not in문을 이용해서 검색 mysql> select * from test where addr not in('동작구','관악구'); +------+--------+------+---------------+--------+ | no | name | age | tel | addr | +------+--------+------+---------------+--------+ | 2 | 이주상 | 29 |02-504-xxxx | 과천시 | | 3 | 임정남 | 29 | 02-420-xxxx | 송파구 | | 5 | 이현영 | 29 | 0342-718-xxxx | 분당구 | | 6 | 이병환 | 12 | 02-891-xxxx | 하안동 | +------+--------+------+---------------+--------+ 4 rows in set (0.00 sec) 치환 검색 mysql> select * from cls_class as a, cls_member as b where b.g_code = 'h0001_3_2' and b.g_code=a.g_code; 날짜 검색하기 where 절 이용 mysql> SELECT COUNT(no) FROM brd_free WHERE date = '2000-02-17'; +-----------+ | COUNT(no) | +-----------+ | 1 | +-----------+ 1 row in set (0.03 sec) 테이블 내용을 화일로 만들기 꼭 경로를 지정해야함 mysql> select * from test into outfile '/root/test.txt'; 결과 2 이주상 02-504-xxxx 과천시 m 1971-02-02 3 임정남 02-420-xxxx 송파구 f 1971-03-03 4 강행모 02-856-xxxx 관악구 f 1971-04-04 5 이현영 0342-718-xxxx 분당구 m 1971-05-05 6 이병환 02-891-xxxx 하안동 m 1980-06-06 1 남상욱 333-4444 동작구 m 1971-01-01 테이블 내용을 화일로 만들때 |로 구분하기 terminated 문을 쓴다. mysql> select * from test into outfile '/root/test.txt' fields terminated by '|'; 결과 2|이주상|02-504-xxxx|과천시|m|1971-02-02 3|임정남|02-420-xxxx|송파구|f|1971-03-03 4|강행모|02-856-xxxx|관악구|f|1971-04-04 5|이현영|0342-718-xxxx|분당구|m|1971-05-05 6|이병환|02-891-xxxx|하안동|m|1980-06-06 1|남상욱|333-4444|동작구|m|1971-01-01 화일을 불러오기 load 명령어를 쓴다. mysql> load data infile '/root/test.txt' replace into table test fields terminated by '|'; Query OK, 6 rows affected (0.02 sec) Records: 6 Deleted: 0 Skipped: 0 Warnings: 0 결과 mysql> select * from test; +------+--------+---------------+--------+------+------------+ | no | name | tel | addr | sex | birth | +------+--------+---------------+--------+------+------------+ | 2 |이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 | | 3 | 임정남 | 02-420-xxxx | 송파구 | f | 1971-03-03 | | 4 | 강행모 | 02-856-xxxx | 관악구| f | 1971-04-04 | | 5 | 이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | | 1 |남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | +------+--------+---------------+--------+------+------------+ 사칙연산 * SUM (Column_name) : 특정 컬럼에서 조건에 만족하는 모든열의 값을 다더함 * AVG (Column_name) : 평균값 추출 * MAX (Column_name) : 최대값추출 * MIN (Column_name) : 최소값 추출 * COUNT (Column_name): 열의수를 추출 sum 문 사용하기 mysql> select sum(age) from test; +----------+ | sum(age) | +----------+ | 128 | +----------+ 1 row in set (0.00 sec) /기 사용하기 mysql> select no, age, (no+age), (no+age)/2 from test; +------+------+----------+------------+ | no | age | (no+age) | (no+age)/2 | +------+------+----------+------------+ | 2 | 29 | 31 | 15.50 | | 3 | 29 | 32 | 16.00| | 4 | 29 | 33 | 16.50 | |5 | 29 | 34 | 17.00 | | 6 | 12 | 18 | 9.00 | | 1 | NULL | NULL | NULL | +------+------+----------+------------+ 6 rows in set (0.00 sec) 나이 계산하기 yser 문 사용하기 mysql> select *, year(curdate())-year(birth)+1 as age from test; +------+--------+---------------+--------+------+------------+------+ | no | name | tel | addr | sex | birth | age | +------+--------+---------------+--------+------+------------+------+ | 2 | 이주상 | 02-504-xxxx | 과천시 | m | 1971-02-02 |29 | | 3 | 임정남 | 02-420-xxxx | 송파구 |f | 1971-03-03 | 29 | | 4 | 강행모 | 02-856-xxxx | 관악구 | f | 1971-04-04 | 29 | | 5 |이현영 | 0342-718-xxxx | 분당구 | m | 1971-05-05 | 29 | | 6 | 이병환 | 02-891-xxxx | 하안동 | m | 1980-06-06 | 20 | | 1 | 남상욱 | 333-4444 | 동작구 | m | 1971-01-01 | 29 | +------+--------+---------------+--------+------+------------+------+ 6 rows in set (0.01 sec) 유닉스 시간 unix_timestamp문을 사용한다. mysql> select unix_timestamp(curdate()); +---------------------------+ | unix_timestamp(curdate()) | +---------------------------+ | 934210800 | +---------------------------+ 1 row in set (0.05 sec) 원격 DB 사용하기 A라는 서버에 DB가 있고, 210.180.56.204에서 프로그램을 돌릴때 A라는 서에있는 mysql mysql 에 다음과 같이 입력을 합니다. INSERT INTO db VALUES ('210.180.56.204','dbname','user','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO host VALUES ('210.180.56.204','dbname','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO user VALUES ('210.180.56.204','user','passwd','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); 210.180.56.204 의 컴에서 프로그램을 할때 다음과 같이 설정을 해주면 원격 DB 를 사용할수 있습니다. $db_server ="servername"; // DB 서버 주소 $db_user = "root"; // DB 사용자 $db_name = ""; // DB 이름 $db_pass = ""; // DB 암호