2011-03-01 6 views
2

MYSQL 쿼리에 WHERE 절 (아래의 PHP 주석에 나타나는 구문)을 삽입하려고합니다. MYSQL 쿼리 문에이 절을 배치 할 때마다 항상 실패합니다 (LEFT JOIN과 ORDER BY 절 앞에 모두 시도했습니다).MySQL - WHERE 절이 LEFT JOIN과 결합되어 있습니까?

내 진술서를 사용할 수있는 방법에 대한 아이디어가 있습니까?

<?php 
$result = mysql_query("SELECT * 
         FROM Items 
        LEFT JOIN Topics on Topics.TopicID = Items.FK_TopicID 
        ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle"); 
/* WHERE FK_UserID=$_SESSION[user_id] */ 
$topicname = false; 

while($row = mysql_fetch_array($result)) { 
    if (!$row['TopicID']) { 
      $row['TopicName'] = 'Sort Me'; 
    } 
if ($topicname != $row['TopicName']) { 
    echo '<ul><li>' . $row['TopicName'] . '</li><ul>'; 
    $topicname = $row['TopicName']; 
} 
echo ''; 
echo '<li>' . $row['ItemTitle'] . '</li>'; 
echo ''; 
} 
    if ($topicname != $row['TopicName']) { 
    echo '</ul>'; 
    $topicname = $row['TopicName']; 
} 

?> 
+1

"실패"무엇을 의미 하는가 :

SELECT * FROM ITEMS i LEFT JOIN TOPICS t ON t.TopicID = i.FK_TopicID WHERE FK_UserID = $_SESSION[user_id] ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle 

더 나은 옵션은, SQL 주입 공격으로부터 자신을 보온 할 수는 sprintf 사용할 수 있나요? 오류 메시지가 나타 납니까? 원하는 데이터가 아닌 데이터를 얻을 수 있습니까? –

답변

6

SQL이 구조적 쿼리 언어를 의미 - 당신은 쿼리에서 원하는 목적지 WHERE 절을 넣을 수 없습니다. WHERE 절은 FROM/JOIN 절 다음에 있어야하며 GROUP BY, HAVING 및 ORDER BY 절 앞에 와야합니다. IE :

$sql = sprintf("SELECT * 
        FROM ITEMS i 
      LEFT JOIN TOPICS t ON t.TopicID = i.FK_TopicID 
       WHERE FK_UserID = %u 
       ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle", 
       mysql_real_escape_string($_SESSION[user_id])); 

$result = mysql_query($sql); 
+0

도움을 주셔서 감사합니다. 내가 설명 된 순서대로 그것을 넣고 나는 여전히 다음과 같은 오류가 발생하고 있습니다. 나는 주사 공격으로부터 자신을 보호하기 위해 sprintf하고 싶습니다만, 나는 먼저 원본을 작동시킬 것이라고 생각했습니다. mysql_fetch_array는 WHERE 절없이 잘 동작하지만, 단일 user_id로만 제한해야합니다. '경고 : mysql_fetch_array() : 제공된 인수가' – webdude77

1

ORDER BY 절 앞에 WHERE 절을 넣으십시오. http://dev.mysql.com/doc/refman/5.0/en/join.html

"SELECT * FROM Items LEFT JOIN Topics on Topics.TopicID = Items.FK_TopicID WHERE whateverTableTheFK_UserIDColumnIs.FK_UserID='".$_SESSION['user_id']."' ORDER BY TopicSort, TopicName ASC, ItemSort, ItemTitle" 
+0

감사합니다. 나는 또한 whatTableTheFK_UserIDColumnIs.FK_UserID가 누락되었습니다. 매우 도움이된다! Structured Query Language에 대해 더 자세히 배우겠습니다! :) – webdude77

관련 문제