2011-11-30 5 views
2

나는 뉴스 피드를위한이 코드를 가지고 있으며 "더 많은로드"기능을위한 코드와 결합되어있다. 업데이트 테이블은 뉴스 피드의 업데이트가있는 곳입니다. username_poster은 뉴스 피드에 표시되는 업데이트를 게시하는 사람의 사용자 이름입니다. $last_msg_id은 다음에로드 할 내용을 나타내는 뉴스 피드의 마지막 게시물의 ID를 나타냅니다.이 MySQL 오류는 어떻게 수정합니까?

내가 가지고있는 문제는 내 코드가이 스크립트를 호출 할 때마다 결코로드되지 않는다는 것입니다. 내가 코드를 밖으로

username_poster IN 
(SELECT user_id FROM scuela_following WHERE follower_id = '".$_SESSION['username']."')` 

을 가지고 있지만 최대한 빨리 그것을에서 추가로, 그것은 작동이 중지 될 때 스크립트는 잘 작동합니다. 어떤 도움이라도 대단히 감사하겠습니다.

"... WHERE follower_id = '".$_SESSION['username']."' ..." 

는 첫째 제대로 탈출되지 및 SQL 주입 취약점이있을 수 있습니다 :

<?php 
$last_msg_id=$_GET['last_msg_id']; 
$sql=mysql_query("SELECT * FROM updates_table WHERE id < '$last_msg_id' AND username_poster IN 
(SELECT user_id FROM scuela_following WHERE follower_id = '".$_SESSION['username']."') 
ORDER BY id DESC LIMIT 5"); 
$last_msg_id=""; 
while($row=mysql_fetch_array($sql)) 
{ 


} 
?> 
+0

나는 오류를 보지 않고도 추측 할 수 있습니다 ... username_poster가 문자열 유형이고 user_id가 정수이면 문제가 발생할 것입니다. – Gigi

답변

2

"user_id"만 선택할 때 하위 쿼리에서 "username_poster"를 찾는 것처럼 보입니다.

AND username_poster IN 
    (SELECT user_id 
    FROM scuela_following 

를 변경하십시오 SQL 대신 "username_poster"의 "USER_ID"를 찾거나 대신 하위 쿼리에서 "USER_ID"의 "username_poster"돌아갑니다.

위에서 언급했듯이 실제로 SQL 삽입을 막기 위해 매개 변수가있는 쿼리를 사용해야합니다.

1

나는 여기 저기 문제가 있음을 의심한다. mysql_real_escape_string 또는 매개 변수가있는 쿼리를 사용해야합니다.

두 번째로 사용자 이름 (예 : 'foobar')과 ID (예 : 10042)를 비교 한 것 같습니다. 사용자 이름을 사용자 ID와 관련시키는 다른 테이블로 조인해야 할 수도 있습니다.

2

스크립트의 맨 위에 session_start();이 누락 된 것을 확인했습니다.

관련 문제