Web- php에서 mysql제어하기
1. DB관련 php 파일 생성
# vi db.php
<?php
// connect to mysql database
// #> mysql -h localhost -u root -p
$ link = mysql_connect( 'localhost' , 'root' , '123' ); -> 연결
==> 연결에 성공하면 식별자를 리턴해주고 그 식별자가 select_db의 두번째 인자로 들어간다.
이것은 여러 dbms가 존재하는 경우 어떤 dbms에 접근하는지를 명확하게 해야하기 때문에 필요하다.
하나의 dbms만 있으면 사용하지 않아도 된다.
if( $link === False )
{
//die( "mysql connect error : " . mysql_error() );
// die 함수 : 메시지를 출력해주고 php 프로그램을 종료시키는 함수
// mysql_error() : 가장 마지막에 생성된 에러 메시지를 가져오는 함수
exit(); -> 에러 메시지가 출력되면 보안에 취약해질 수 있으므로 그냥 종료시키는 것이 제일 좋다.
}
// mysql> use user;
$ret = mysql_select_db( 'user' , $link ); -> DB 선택
if( $ret === False )
{
//die( "mysql db select error : " . mysql_error() );
exit();
}
?>
2. php를 통해 DB 쿼리 사용해보기 ( 실제 코드를 통해서 데이터를 다뤄보기 )
mysql_query([쿼리 입력]) : query문 실행해주는 함수
(쿼리는 문자열로 전달한다.)
일단 데이터 모두 삭제!
mysql> delete from user_info;
Query OK, 2 rows affected (0.00 sec)
mysql> select * from user_info;
Empty set (0.00 sec)
1. 입력 , 수정 , 삭제
쿼리가 실행되었는가/되지않았는가?
mysql_query() returns TRUE on success or FALSE on error.
2. 조회
조건에 맞는 조회된 데이터가 없는가/있는가?
즉, 결과가 있든 없든 제대로 실행되면 success
오타나 다른 문제로 인한 것은 false
mysql_query() returns a resource on success, or FALSE on error.
mysql_num_rows()
mysql_fetch_array()
mysql_fetch_assoc()
mysql_fetch_row()
-> 리턴되는 값이 다르다는 점을 주의!
<?php
// connect to mysql database
// #> mysql -h localhost -u root -p
$link = mysql_connect( 'localhost' , 'root' , '123' );
if( $link === False )
{
//die( "mysql connect error : " . mysql_error() );
// die 함수 : 메시지를 출력해주고 php 프로그램을 종료시키는 함수
// mysql_error() : 가장 마지막에 생성된 에러 메시지를 가져오는 함수
// die함수는 오류 내용이 노출되므로 보안상 좋지않다.
exit();
}
// mysql> use user;
$ret = mysql_select_db( 'user' , $link );
if( $ret === False )
{
//die( "mysql db select error : " . mysql_error() );
exit();
}
// $_REQUEST : GET/POST 방식을 구별하지 않고 데이터를 담을 수 있는 변수
if( !isset( $_REQUEST[id] ) || !isset( $_REQUEST[pw] ) || $_REQUEST[id] === '' || $_REQUEST[pw] === '' )
{
?>
<form method=POST action=db.php>
<input type=text name=id placeholder='name'> <br>
<input type=password name=pw placeholder='password here'> <br>
<input type=submit value='join'>
</form>
// if문이 실행된다면 위의 form 내용만 클라이언트에게 전달된다.
// if로 막아놔야 값이 있을 경우 else가 실행되고 값이 없다면 계속 form이 뜨게 되는 것
<?php
}
else
{
$id = $_POST[id];
$pw = $_POST[pw]; // POST변수를 써도 상관없음!
$query = "INSERT INTO user_info( id , pw ) VALUE( '$id' , md5('$pw') )";
// php에서는 세미콜론 생략!!
// md5는 mysql에서 실행되는 것! ( 문자열로 전달될뿐 sql 쿼리이므로!! )
$resource = mysql_query( $query );
if( $resource )
{
$cnt = mysql_num_rows( $resource );
echo "number of rows : " . $cnt . "<br>";
/*
while( $row = mysql_fetch_array( $resource , MYSQL_BOTH ) )
{
print_r( $row );
}
*/
for( $i = $cnt ; $i > 0 ; $i-- )
{
$row = mysql_fetch_array( $resource , MYSQL_BOTH );
print_r( $row );
}
exit(); // insert문 실행되기 전에 종료하기 위해서
}
$query = "INSERT INTO user_info( id , pw ) VALUE( '$id' , md5('$pw') )";
// php에서는 쿼리문의 세미콜론 생략!!
// md5는 mysql에서 실행되는 것!
$ret = mysql_query( $query ); // true 또는 false 중 하나만 리턴된다.
if( !$ret )
{
//die( 'mysql INSERT ERROR: ' . mysql_error() );
}
}
?>
// auto_increment는 데이터가 삭제되어도 처음부터 시작하지 않고 삭제된 다음 수를 시작으로 계속 증가한다.
// join버튼을 누르면 다시 db.php가 처음부터 새로 실행된다. 그래서 값이 있으면 else문이
값이 없으면 if문이 실행된다.
// mysql_num_rows() : select를 실행한 결과의 라인수를 얻어올 수 있다.
// mysql_fetch_assoc() : 컬럼의 이름을 키로 사용하는 함수
mysql_fetch_row() : 행의 결과를 배열 형태로 리턴함 -> resource가 있어야만 함수 사용 가능 ( 한 줄만 리턴 )
-> 숫자를 키로 사용하는 함수
mysql_fetch_array() : 키 값을 가져올 때 타입을 정하는 함수 ( MYSQL_NUM , MYSQL_ASSOC , MYSQL_BOTH )
[실습]
- 이미 존재하는 사용자라면 입력받은 값으로 새로 업데이트 할 수 있도록 수정
<?php
// connect to mysql database
// #> mysql -h localhost -u root -p
$link = mysql_connect( 'localhost' , 'root' , '123' );
if( $link === False )
{
//die( "mysql connect error : " . mysql_error() );
// die 함수 : 메시지를 출력해주고 php 프로그램을 종료시키는 함수
// mysql_error() : 가장 마지막에 생성된 에러 메시지를 가져오는 함수
exit();
}
// mysql> use user;
$ret = mysql_select_db( 'user' , $link );
if( $ret === False )
{
//die( "mysql db select error : " . mysql_error() );
exit();
}
if( !isset( $_REQUEST[id] ) || !isset( $_REQUEST[pw] ) || $_REQUEST[id] === '' || $_REQUEST[pw] === '' )
{
?>
<form method=POST action=db.php>
<input type=text name=id placeholder='name'> <br>
<input type=password name=pw placeholder='password here'> <br>
<input type=submit value='join'>
</form>
<?php
}
else
{
$id = $_POST[id];
$pw = $_POST[pw]; // POST변수를 써도 상관없음!
// id 중복 확인
$query = "SELECT * FROM user_info WHERE id='$id'"; // 입력된 사용자 id와 일치하는 컬럼이 있는지 확인
$resource = mysql_query( $query );
$cnt = mysql_num_rows( $resource );
if( $cnt != 0 )
{
for( $i = $cnt ; $i > 0 ; $i-- )
{
$update = "UPDATE user_info SET pw=md5('$pw') WHERE id='$id'";
mysql_query( $update );
}
}
else
{
$query = "INSERT INTO user_info( id , pw ) VALUE( '$id' , md5('$pw') )";
$ret = mysql_query( $query ); // true 또는 false 중 하나만 리턴된다.
if( !$ret )
{
die( 'mysql INSERT ERROR: ' . mysql_error() );
}
}
}
?>
'Tip&Tech > 아마니&그누보드' 카테고리의 다른 글
영화 예고편과 네이버 영화 깔끔하게 넣기 [iframe 태그] (0) | 2022.10.22 |
---|---|
HTML - 이미지(img) 태그 와 src, width, height, alt 속성 텍스트 표시 (6) (0) | 2021.11.26 |
DNS 서버 구축 ( 캐시 서버 ) (0) | 2020.09.23 |
사이드메뉴 고정 (0) | 2020.09.19 |
[Mysql] Mysql 서버 시작, 재시작, 정지, 상태 확인 방법 (0) | 2020.09.19 |