[PHP MySQL 명령어 실행 함수 mysql_query]
php에서 데이터베이스(MySQL)에게 SQL 명령어를 실행시키기 위해서는 mysql_query 함수가 사용됩니다. sql 명령어라 두리뭉실하게 말씀드렸는데, 이것을 기능에 의해서 세분화 해보면 아래와 같습니다.
DDL(데이터정의어) - CREATE, ALTER, DROP DML(데이터조작어) - SELECT, INSERT, UPDATE, DELETE DCL(데이터제어어) - GRANT, REVOKE, CASECADE, RESTRICT
mysql_query 함수는 SQL 명령어라면 위의 세가지중 대부분(정확히 전부 테스트해 보지 못했슴)을 멋지게 실행시킵니다. 아래의 예제는 mysql_query 함수를 이용해서 어여쁜 테이블 하나를 만들고 있습니다.
<?php include("dbcon.php");
$sql = "CREATE TABLE test_member ( "; $sql = $sql . " seq int not null auto_increment, "; $sql = $sql . " memuid varchar(20) NOT NULL, "; $sql = $sql . " name varchar(20) NOT NULL, "; $sql = $sql . " addr varchar(255) NOT NULL, "; $sql = $sql . " PRIMARY KEY(seq), "; $sql = $sql . " UNIQUE memuid (memuid) );";
$result = mysql_query($sql) or die("SQL문 제대로 쓴거 맞아???");
if($result) echo "테이블 Create 성공!!"; ?> | |
다음은 위의 예제에서 생성된 test_member 테이블에 INSERT 문을 이용해서 하나의 레코드를 추가하는 예제입니다.
<?php include("dbcon.php");
$memuid = "webmadang.net"; $name = "웹마당넷"; $addr = "어쩌시 어쩌구 어쩌동 111-11";
$sql = "INSERT INTO test_member SET "; $sql = $sql . " memuid ='$memuid', "; $sql = $sql . " name ='$name', "; $sql = $sql . " addr ='$addr' ";
$result = mysql_query($sql) or die("또 틀리면 죽는다!!!"); $rows = mysql_affected_rows();
if($result) echo "INSERT로 입력된 레코드의 갯수는:$rows"; ?> | |
MySQL에게 전달된 SQL 명령어가 INSERT, UPDATE, DELETE, DROP 등이라면 mysql_query 함수의 실행결과가 참일때 TRUE를 반환하게 되며 mysql_affected_rows 함수를 이용해서 변경된 레코드의 갯수를 알수 있습니다. 위의 예제가 성공하게 되면 "INSERT로 입력된 레코드의 갯수는:1" 이라는 문자열이 출력됩니다.
아래 예제는 SELECT 문을 이용해서 위의 예제에서 입력된 레코드를 화면에 출력하게 됩니다.
<?php include("dbcon.php");
$sql = "SELECT memuid, name, addr FROM test_member ";
$result = mysql_query($sql) or die("제대로 좀 써봐!!!"); while($row = mysql_fetch_row($result)) echo"'$row[0]' '$row[1]' '$row[2]'<br>\n"; ?> | |
select 문의 실행결과로 반환된 레코드셋(data set)을 가져오기 위해서는 mysql_fetch 시리즈로 시작되는 함수들중 하나를 사용해야 합니다. 위에 사용된 mysql_fetch_row 함수는 레코드셋을 배열로 반환하는데 개별 컬럼의 값을 가져오기 위해서는 위와 같이 컬럼의 순서를 나타내는 번호를 사용해야 합니다.
echo"'$row[0]' '$row[1]' '$row[2]'<br>\n";
반환된 레코드셋을 컬럼명을 이용해서 참조하기 위해서는 mysql_fetch_array 함수를 사용합니다. 아래 예제는 위의 예제에서 사용된 mysql_fetch_row 함수를 mysql_fetch_array 함수로 바꿔 사용했습니다.
<?php include("dbcon.php");
$sql = "SELECT memuid, name, addr FROM test_member ";
$result = mysql_query($sql) or die("제대로 좀 써봐!!!"); while($row = mysql_fetch_array($result)){ echo"'$row[memuid]' '$row[name]' '$row[addr]'<br>\n"; echo"'$row[0]' '$row[1]' '$row[2]'<br>\n"; } ?> | |
위의 예제에서 보이듯이 mysql_fetch_array 함수는 컬럼의 값을 가져올때 컬럼명이든 컬럼의 번호든 상관없습니다.
마지막으로 MySQL 테이블에서 레코드셋이 아닌 단 한개의 데이터만 가져올수 있는 mysql_result 함수가 있습니다. 아래는 mysql_result 함수의 사용예제입니다.
<?php include("dbcon.php");
$sql = "SELECT memuid, name, addr FROM test_member ";
$result = mysql_query($sql) or die("제대로 좀 써봐!!!"); echo mysql_result($result,0,0)."<br>\n"; echo mysql_result($result,0,1)."<br>\n";; echo mysql_result($result,0,2)."<br>\n";;
?> | |
mysql_result 함수는 mysql_fetch_row 함수나 mysql_fetch_array 함수보다 두개의 인자를 더 취하는데 첫번째 인자는 레코드(행)번호이고, 두번째 인자는 컬럼의 번호입니다. 특이한 점은 레코드 번호나 컬럼의 번호가 1부터 시작하는게 아니고 0 부터 시작한다는 것입니다.
mysql_result($result,0,0) 은 첫번째 레코드, 첫번째 컬럼을 의미합니다. mysql_result($result,0,1) 은 첫번째 레코드, 두번째 컬럼을 의미합니다. mysql_result($result,0,2) 은 첫번째 레코드, 세번째 컬럼을 의미합니다.
mysql_result($result,1,1) 은 두번째 레코드, 두번째 컬럼을 의미합니다. mysql_result($result,1,2) 은 두번째 레코드, 세번째 컬럼을 의미합니다. mysql_result($result,1,3) 은 두번째 레코드, 네번째 컬럼을 의미합니다.
php4 이전버전에서는 mysql_fetch_row 함수가, mysql_fetch_array 함수보다 속도면에서 빠른것으로 소개되었으나, 현재는 속도차이가 거의 없다고 합니다.
위의 include("dbcon.php") 는 MySQL의 접속 명령어가 삽입되어 있는 dbcon.php 파일을 포함하라는 뜻입니다. dbcon.php 파일의 내용은 다음과 같을 것입니다.
<?php $hostname = "localhost"; // 호스트를 식별할 수 있는 호스트명이나 ip $user = "myuser"; // MySQL에서 사용할 데이터베이스 사용자명 $password = "********"; // MySQL에서 사용할 데이터베이스에 접속하기 비밀번호 $database = "testdb"; // MySQL에서 사용할 데이타베이스명 $connect = mysql_connect ($hostname, $user, $password) or die ("데이터베이스 접속실패");; mysql_select_db ($database, $connect); ?>
| |
작성자: 웹마당넷(webmadang@webmadang.net) http://www.webmadang.net | | |