2009-06-28 2 views
0

나는 가입 할 때 도움이 필요하다고 생각합니다. 그것을 알아낼 수 없습니다.가입에 대한 도움

게시물

`id` int(10) unsigned NOT NULL, 
`title` varchar(140) DEFAULT NULL, 
`text` text COLLATE utf8_unicode_ci 

게시물 태그

`post_id` int(10) unsigned NOT NULL, 
`tag_id` int(10) unsigned NOT NULL 

태그

:

나는이 테이블이

team-fortress-2 태그가있는 모든 게시물을 정리하려면 어떻게하나요? 나는 그것을 이해할 수 없다.

$q = mysql_query("SELECT * FROM ... WHERE $get['tag']"); 
while($r = mysql_fetch_array($q)) { 

답변

6
SELECT p.* 
FROM posts p 
JOIN posttags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id 
WHERE t.name = 'team-fortress-2' 

특정 예이다. PHP에서는 다음과 같이 처리합니다 :

$tag = mysql_real_escape_string($get['tag']); 
$sql = <<<END 
SELECT p.* 
FROM posts p 
JOIN posttags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id 
WHERE t.name = '$tag' 
END; 
$query = mysql_query($sql); 
if (!$query) { 
    $error = mysql_error(); 
    die("Error $error for query $sql"); 
} 
... 

태그를 이스케이프 처리하는 것은 특히 중요합니다. 사용자 입력을 수락하는 경우 특히 그렇습니다.

+0

... 사용자 입력을 탈출에 대한 경고에 대한 – Guffa

+1

+1 (SQL 주입 방지) – Lucero

1

는 SQL의 모양은 다음과 같습니다

p.post_id가 pt.post_id해야
select 
    p.id, p.title, p.text 
from 
    Posts p 
    inner join PostTags pt on pt.post_id = p.id 
    inner join Tags t on t.id = pt.tag_id 
where 
    t.name = 'team-fortress-2'