묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
PHP책 내 예제의 Mysql 쿼리가 잘 이해되지 않아 질문합니다.
2005.12.18 11:11
책 내 예제소스 :
function store_new_post($post)
{
// 게시물을 검사하고 저장한다.
$conn = db_connect();
// 빈 필드가 없는지 확인한다.
if(!filled_out($post))
{
return false;
}
$post = clean_all($post);
// 부모가 있는 지 검사한다.
if($post['parent'+ '+ ']!=0)
{
$query = "select postid from header where postid = '".$post['parent']."'";
$result = mysql_query($query);
if(mysql_numrows($result)!=1)
{
return false;
}
}
// 겹치지 않는지 조사한다.
$query = "select header.postid from header, body where
header.postid = body.postid and
header.parent = ".$post['parent']." and
header.poster = '".$post['+ 'poster']."' and
header.title = '".$post['title']."' and
header.area = ".$post['area']." and
body.message = '".$post['message']."'";
$result = mysql_query($query);
if (!$result)
{
return false;
}
if(mysql_numrows($result)>0)
return mysql_result($result, 0, 0);
$query = "insert into header values
('".$post['parent']."',
'".$post['poster']."',
'".$post['title']."',
0,
'".$post['area']."',
now(),
NULL
)";
$result = mysql_query($query);
if (!$result)
{
return false;
}
// 이제 부모 글에 답글이 생겼다.
$query = 'update header set children = 1 where postid = '.$post['parent'];
$result = mysql_query($query);
if (!$result)
{
return false;
}
// 게시물을 구별하는 아이디를 만든다. 어떤 게시물들은 아이디와 작성 시간을 제외한 헤더 정보가 같을 수 있다.
$query = "
select header.postid from header left join body on header.postid = body.postid
where parent = '".$post['parent']."'
and poster = '".$post['poster']."'
and title = '".$post['title']."'
and body.postid is NULL";
$result = mysql_query($query);
if (!$result)
{
return false;
}
if(mysql_numrows($result)>0)
$id = mysql_result($result, 0, 0);
if($id)
{
$query = "insert into body values ($id, '".$post['message']."')";
$result = mysql_query($query);
if (!$result)
{
return false;
}
return $id;
}
}
이건 웹 포럼 예제의 글 쓰기 부분에 관한 함수입니다. 글의 제목, 글쓴이, 쓴시간 등은 한쪽 테이블에, 글 본문은 또다른 테이블에 나누어서 저장합니다. 그런데 위쪽에 표시한 부분에서 본문을 저장하기 위한 id를 만들기 위해 실행하는 부분이 잘 이해가 되지 않는군요. 책에는 더이상의 설명이 없기에 질문해봅니다.
function store_new_post($post)
{
// 게시물을 검사하고 저장한다.
$conn = db_connect();
// 빈 필드가 없는지 확인한다.
if(!filled_out($post))
{
return false;
}
$post = clean_all($post);
// 부모가 있는 지 검사한다.
if($post['parent'+ '+ ']!=0)
{
$query = "select postid from header where postid = '".$post['parent']."'";
$result = mysql_query($query);
if(mysql_numrows($result)!=1)
{
return false;
}
}
// 겹치지 않는지 조사한다.
$query = "select header.postid from header, body where
header.postid = body.postid and
header.parent = ".$post['parent']." and
header.poster = '".$post['+ 'poster']."' and
header.title = '".$post['title']."' and
header.area = ".$post['area']." and
body.message = '".$post['message']."'";
$result = mysql_query($query);
if (!$result)
{
return false;
}
if(mysql_numrows($result)>0)
return mysql_result($result, 0, 0);
$query = "insert into header values
('".$post['parent']."',
'".$post['poster']."',
'".$post['title']."',
0,
'".$post['area']."',
now(),
NULL
)";
$result = mysql_query($query);
if (!$result)
{
return false;
}
// 이제 부모 글에 답글이 생겼다.
$query = 'update header set children = 1 where postid = '.$post['parent'];
$result = mysql_query($query);
if (!$result)
{
return false;
}
// 게시물을 구별하는 아이디를 만든다. 어떤 게시물들은 아이디와 작성 시간을 제외한 헤더 정보가 같을 수 있다.
$query = "
select header.postid from header left join body on header.postid = body.postid
where parent = '".$post['parent']."'
and poster = '".$post['poster']."'
and title = '".$post['title']."'
and body.postid is NULL";
$result = mysql_query($query);
if (!$result)
{
return false;
}
if(mysql_numrows($result)>0)
$id = mysql_result($result, 0, 0);
if($id)
{
$query = "insert into body values ($id, '".$post['message']."')";
$result = mysql_query($query);
if (!$result)
{
return false;
}
return $id;
}
}
이건 웹 포럼 예제의 글 쓰기 부분에 관한 함수입니다. 글의 제목, 글쓴이, 쓴시간 등은 한쪽 테이블에, 글 본문은 또다른 테이블에 나누어서 저장합니다. 그런데 위쪽에 표시한 부분에서 본문을 저장하기 위한 id를 만들기 위해 실행하는 부분이 잘 이해가 되지 않는군요. 책에는 더이상의 설명이 없기에 질문해봅니다.
암튼 거기로 알고
// 게시물을 구별하는 아이디를 만든다. 어떤 게시물들은 아이디와 작성 시간을 제외한 헤더 정보가 같을 수 있다.
// 주석 그대로 아마도 header 라는 테이블의 postid 는 auto_increment 로 자동으로 증가하는 값인가 봅니다.
// 그 자동으로 증가되는 고유번호를 가져오기 위한 쿼리 입니다.
$query = "
select header.postid from header left join body on header.postid = body.postid
where parent = '".$post['parent']."'
and poster = '".$post['poster']."'
and title = '".$post['title']."'
and body.postid is NULL";
// mysql 로 질의 하고 결과를 가져 옵니다.
$result = mysql_query($query);
if (!$result)
{
return false;
}
// 가저온 결과의 행수를 확인합니다.
if(mysql_numrows($result)>0)
$id = mysql_result($result, 0, 0); // 가져온 결과의 0행 0열의 값 즉 select header.postid 였으니까 postid 가 나옵니다.
if($id)
{
// 본문을 넣습니다. 위에 $id 를 고유키로 넣습니다.
// 나중에 셀렉트시 header 와 body 를 연결해줍니다.
$query = "insert into body values ($id, '".$post['message']."')";
$result = mysql_query($query);
if (!$result)
{
return false;
}
return $id;
}