Preface
이번 장에선 php와 mysql을 연동하여 mysqlserver에 저장된 db를 조작하고, 화면에 출력하는 실습을 진행했다.
기본적인 화면은 html을 사용하여 구성했으며, ide는 vscode를 사용했다.
html과 php의 기본적인 문법은 지난 장에서 대부분 이해했지만, 막상 이를 통해 실제 코드를 작성하기는 쉽지 않았다.
단순히 책에 적힌 내용을 따라 적는 것 뿐이었지만, 코드를 한줄한줄 이해하고 넘어가려 하니 시간이 꽤 오래 걸렸다.
새로운 언어를 공부하자 처음 파이썬을 공부했을 때가 기억난다.
뭣도 모르고 일단 따라 적기는 하지만, 내가 잘 이해하고 있는 것인지, 내가 과연 책 없이도 코드를 작성할 수 있을지 많은 걱정을 했었다.
그러나 비슷한 코드를 여러번 접하자 일정 수준까지는 도달할 수 있었기에, 이번엔 스트레스를 받지 않고 차근차근 진도를 나가고자 한다.
다음 책에서 html, css, javascript 등 웹과 관련된 내용을 확실히 잡고 가자.
(php는 이번 책을 바탕으로 필요한 부분은 추가로 공부하자)
1. PHP와 MySQL의 기본 연동
- 기본적인 데이터베이스 접속 코드
<?php
$db_host="localhost";
$db_user="root";
$db_password="1234";
$db_name="";
$con=mysqli_connect($db_host, $db_user, $db_password, $db_name);
if ( mysqli_connect_error($con) ) {
echo "MySQL 접속 실패 !!", "<br>";
echo "오류 원인: ", mysqli_connect_error();
exit();
}
echo "MySQL 접속 완전히 성공 !!";
mysqli_close($con);
?>
- 단순화한 데이터베이스 접속 코드
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
- mysqli_query(접속 연결자, SQL문) 함수: PHP에서 SQL문을 작동시키는 함수
→ 하나의 SQL문만 실행하므로 여러 건의 데이터를 넣기 위해선 콤마로 데이터를 분리해야 한다.
- 데이터베이스를 생성하는 PHP 코드
<?php
$con=mysqli_connect("localhost", "root", "1234", "") or die("MySQL 접속 실패 !!");
$sql="create database sqlDB";
$ret = mysqli_query($con, $sql);
if($ret) {
echo "sqlDB가 성공적으로 생성됨.";
}
else {
echo "sqlDB 생성 실패!!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
?>
- 테이블 생성 코드
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql ="
create table usertbl
( userID char(8) not null primary key,
username varchar(10) not null,
birthYear int not null,
addr char(2) not null,
mobile1 char(3),
mobile2 char(8),
height smallint,
mDate date
)
";
$ret = mysqli_query($con, $sql);
if($ret) {
echo "userTBL이 성공적으로 생성됨..";
}
else {
echo "userTBL 생성 실패!!";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
?>
- 데이터 입력 코드
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql ="
insert into usertbl values
('LSG', '이승기', 1987, '서울', '011', '11111111', 182, '2008-8-8'),
('KBS', '김범수', 1979, '경남', '011', '22222222', 173, '2012-4-4'),
('KKH', '김경호', 1971, '전남', '019', '33333333', 177, '2007-7-7'),
('JYP', '조용필' ,1950, '경기', '011', '44444444', 166, '2009-4-4'),
('SSK', '성시경', 1979, '서울', null, null, 186, '2013-12-12'),
('LJB', '임재범', 1963, '서울', '016', '66666666', 182, '2009-9-9'),
('YJS', '윤종신', 1969, '경남', null, null, 170, '2005-5-5'),
('EJW', '은지원', 1972, '경북', '011', '88888888', 174, '2014-3-3'),
('JKW', '조관우', 1965, '경기', '018', '99999999', 172, '2010-10-10'),
('BBK', '바비킴', 1973, '서울', '010', '00000000', 176, '2013-5-5')
";
$ret = mysqli_query($con, $sql);
if($ret) {
echo "userTBL에 데이터가 성공적으로 입력됨..";
}
else {
echo "userTBL 데이터 입력 실패!!";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
?>
- mysqli_fetch_array(조회결과) 함수: select의 결과 집합을 하나의 행씩 접근하고, 더 이상 접근할 행이 없으면 False를 반환한다.
- mysqli_num_rows(조회결과) 함수: select로 조회된 행의 개수를 반환한다.
- 데이터 조회 코드
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql = "
select * from userTBL
";
$ret = mysqli_query($con, $sql);
if ($ret) {
echo mysqli_num_rows($ret), "건이 조회됨.<br><br>";
}
else {
echo "userTBL 데이터 조회 실패!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
exit();
}
while($row = mysqli_fetch_array($ret)) {
echo $row['userID'], " ", $row['username'], " ", $row['height'], " ", "<br>";
}
mysqli_close($con);
?>
2. 회원 관리 시스템
- 회원 관리 시스템: 회원의 조회/입력/수정/삭제를 웹 상에서 처리하는 응용 프로그램
- 초기 화면
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>
<h1> 회원 관리 시스템</h1>
<a href='select.php'> (1) 회원 조회 (조회 후 수정/삭제 가능) </a> <br><br>
<a href='insert.php'> (2) 신규 회원 등록 </a> <br><br>
<FORM METHOD="get" ACTION="update.php">
(3) 회원 수정 - 회원 아이디 : <INPUT TYPE ="text" NAME="userID">
<INPUT TYPE="submit" VALUE="수정">
</FORM>
<FORM METHOD="get" ACTION="delete.php">
(4) 회원 삭제 - 회원 아이디 : <INPUT TYPE ="text" NAME="userID">
<INPUT TYPE="submit" VALUE="삭제">
</FORM>
</BODY>
</HTML>
- 회원 조회 화면
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql ="SELECT * FROM userTBL";
$ret = mysqli_query($con, $sql);
if($ret) {
$count = mysqli_num_rows($ret);
}
else {
echo "userTBL 데이터 조회 실패"."<br>";
echo "실패 원인: ".mysqli_error($con);
exit();
}
echo "<h1> 회원 조회 결과 </h1>";
echo "<TABLE border=1>";
echo "<TR>";
echo "<TH>아이디</TH><TH>이름</TH><TH>출생년도</TH><TH>지역</TH><TH>국번</TH>";
echo "<TH>전화번호</TH><TH>키</TH><TH>가입일</TH><TH>수정</TH><TH>삭제</TH>";
echo "</TR>";
while($row = mysqli_fetch_array($ret)) {
echo "<TR>";
echo "<TD>", $row['userID'], "</TD>";
echo "<TD>", $row['username'], "</TD>";
echo "<TD>", $row['birthYear'], "</TD>";
echo "<TD>", $row['addr'], "</TD>";
echo "<TD>", $row['mobile1'], "</TD>";
echo "<TD>", $row['mobile2'], "</TD>";
echo "<TD>", $row['height'], "</TD>";
echo "<TD>", $row['mDate'], "</TD>";
echo "<TD>", "<a href='update.php?userID=", $row['userID'], "'>수정</a></TD>";
echo "<TD>", "<a href='delete.php?userID=", $row['userID'], "'>삭제</a></TD>";
echo "</TR>";
}
mysqli_close($con);
echo "</TABLE>";
echo "<br> <a href='main.html'> <--초기 화면</a> ";
?>
- 신규 회원 입력 화면
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>
<h1> 신규 회원 입력 </h1>
<FORM METHOD="post" ACTION="insert_result.php">
아이디 : <INPUT TYPE ="text" NAME="userID"> <br>
이름 : <INPUT TYPE ="text" NAME="username"> <br>
출생년도 : <INPUT TYPE ="text" NAME="birthYear"> <br>
지역 : <INPUT TYPE ="text" NAME="addr"> <br>
휴대폰 국번 : <INPUT TYPE ="text" NAME="mobile1"> <br>
휴대폰 전화번호 : <INPUT TYPE ="text" NAME="mobile2"> <br>
신장 : <INPUT TYPE ="text" NAME="height"> <br>
<BR><BR>
<INPUT TYPE="submit" VALUE="회원 입력">
</FORM>
</BODY>
</HTML>
- 신규 회원 입력 결과
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$userID = $_POST["userID"];
$username = $_POST["username"];
$birthYear = $_POST["birthYear"];
$addr = $_POST["addr"];
$mobile1 = $_POST["mobile1"];
$mobile2 = $_POST["mobile2"];
$height = $_POST["height"];
$mDate = date("Y-m-j");
$sql =" INSERT INTO userTBL VALUES('".$userID."','".$username."',".$birthYear;
$sql = $sql.",'".$addr."','".$mobile1."','".$mobile2."',".$height.",'".$mDate."')";
$ret = mysqli_query($con, $sql);
echo "<h1> 신규 회원 입력 결과 </h1>";
if($ret) {
echo "데이터가 성공적으로 입력됨.";
}
else {
echo "데이터 입력 실패"."<br>";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
echo "<br> <a href='main.html'> <--초기 화면</a> ";
?>
→ 문자나 날짜를 입력할 때는 작은 따옴표를 사용해야 한다.
- 회원 정보 수정 화면
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql ="SELECT * FROM userTBL WHERE userID='".$_GET['userID']."'";
$ret = mysqli_query($con, $sql);
if($ret) {
$count = mysqli_num_rows($ret);
if ($count==0) {
echo $_GET['userID']." 아이디의 회원이 없음!!"."<br>";
echo "<br> <a href='main.html'> <-- 초기 화면</a> ";
exit();
}
}
else {
echo "데이터 조회 실패!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
echo "<br> <a href='main.html'> <-- 초기 화면</a> ";
exit();
}
$row = mysqli_fetch_array($ret);
$userID = $row['userID'];
$username = $row["username"];
$birthYear = $row["birthYear"];
$addr = $row["addr"];
$mobile1 = $row["mobile1"];
$mobile2 = $row["mobile2"];
$height = $row["height"];
$mDate = $row["mDate"];
?>
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>
<h1> 회원 정보 수정 </h1>
<FORM METHOD="post" ACTION="update_result.php">
아이디 : <INPUT TYPE ="text" NAME="userID" VALUE=<?php echo $userID ?>
READONLY> <br>
이름 : <INPUT TYPE ="text" NAME="username" VALUE=<?php echo $username ?>> <br>
출생년도 : <INPUT TYPE ="text" NAME="birthYear" VALUE=<?php echo $birthYear ?>> <br>
지역 : <INPUT TYPE ="text" NAME="addr" VALUE=<?php echo $addr ?>> <br>
휴대폰 국번 : <INPUT TYPE ="text" NAME="mobile1" VALUE=<?php echo $mobile1 ?>> <br>
휴대폰 전화번호 : <INPUT TYPE ="text" NAME="mobile2" VALUE=<?php echo $mobile2 ?>> <br>
신장 : <INPUT TYPE ="text" NAME="height" VALUE=<?php echo $height ?>> <br>
회원 가입일 : <INPUT TYPE ="text" NAME="mDate" VALUE=<?php echo $mDate ?>
READONLY><br>
<BR><BR>
<INPUT TYPE="submit" VALUE="정보 수정">
</FORM>
</BODY>
</HTML>
- 회원 정보 수정 결과
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$userID = $_POST["userID"];
$username = $_POST["username"];
$birthYear = $_POST["birthYear"];
$addr = $_POST["addr"];
$mobile1 = $_POST["mobile1"];
$mobile2 = $_POST["mobile2"];
$height = $_POST["height"];
$mDate = $_POST["mDate"];
$sql ="UPDATE userTBL SET username='".$username."', birthYear=".$birthYear;
$sql = $sql.", addr='".$addr."', mobile1='".$mobile1."',mobile2='".$mobile2;
$sql = $sql."', height=".$height.", mDate='".$mDate."' WHERE userID='".$userID."'";
$ret = mysqli_query($con, $sql);
echo "<h1> 회원 정보 수정 결과 </h1>";
if($ret) {
echo "데이터가 성공적으로 수정됨.";
}
else {
echo "데이터 수정 실패!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
echo "<br> <a href='main.html'> <-- 초기 화면</a> ";
?>
- 회원 정보 삭제 화면
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$sql ="SELECT * FROM userTBL WHERE userID='".$_GET['userID']."'";
$ret = mysqli_query($con, $sql);
if($ret) {
$count = mysqli_num_rows($ret);
if ($count==0) {
echo $_GET['userID']." 아이디의 회원이 없음!!"."<br>";
echo "<br> <a href='main.html'> <-- 초기 화면</a> ";
exit();
}
}
else {
echo "데이터 조회 실패!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
echo "<br> <a href='main.html'> <-- 초기 화면</a> ";
exit();
}
$row = mysqli_fetch_array($ret);
$userID = $row['userID'];
$username = $row["username"];
?>
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>
<h1> 회원 삭제 </h1>
<FORM METHOD="post" ACTION="delete_result.php">
아이디 : <INPUT TYPE ="text" NAME="userID" VALUE=<?php echo $userID ?>
READONLY> <br>
이름 : <INPUT TYPE ="text" NAME="username" VALUE=<?php echo $username ?>
READONLY>> <br>
<BR><BR>
위 회원을 삭제하겠습니까?
<INPUT TYPE="submit" VALUE="회원 삭제">
</FORM>
</BODY>
</HTML>
- 회원 삭제 결과
<?php
$con=mysqli_connect("localhost", "root", "1234", "sqlDB") or die("MySQL 접속 실패");
$userID = $_POST["userID"];
$sql ="DELETE FROM userTBL WHERE userID='".$userID."'";
$ret = mysqli_query($con, $sql);
echo "<h1> 회원 삭제 결과 </h1>";
if($ret) {
echo $userID." 회원이 성공적으로 삭제됨..";
}
else {
echo "데이터 삭제 실패!!"."<br>";
echo "실패 원인: ".mysqli_error($con);
}
mysqli_close($con);
echo "<br><br> <a href='main.html'> <-- 초기 화면</a>";
?>
'DB & SQL > 이것이 MySQL이다' 카테고리의 다른 글
(Fin) 파이썬과 MySQL 응용 프로그래밍 (0) | 2022.07.13 |
---|---|
파이썬 tkinter 사용 방법 (0) | 2022.07.11 |
PHP 기본 프로그래밍 (0) | 2022.07.02 |
Visual Studio Code에서 PHP 코드 실행하기 (2) | 2022.07.02 |
MySQL과 공간 데이터 (0) | 2022.06.27 |
댓글