2012-08-01 2 views
-5

간단한 질문 wheres 실수?PHP MySQL은 두 열을 비교하여 순서대로 반환합니까?

$result = mysql_query(" 
    SELECT * FROM orders 
    WHERE Username='$username' 
     AND completed > ordered 
    ORDER BY completed ASC 
    LIMIT 1 
") or die(mysql_error()); 

오류가없고 데이터가 없습니다.

+1

무엇이 오류입니까? –

+1

SQL의 구문이 정확합니다. 지정된'$ username'에 주문이 있는지 확인할 수 있습니까? – newfurniturey

+0

구문 오류가 표시되지 않습니다. '$ username' 변수가 비어있을 수도 있습니다. 확인하려면 [print()'] (http://php.net/manual/en/function.print.php)을 시도하십시오. –

답변

-1

좋아, 모두들 불편을 끼쳐 드려 죄송하지만 단순한 오타 알림 ">"은 "<"이어야합니다. 완료된 캔트는 주문한 것보다 커야합니다.

$result = mysql_query("SELECT * FROM orders WHERE Username='$username' AND completed > ordered ORDER BY completed ASC LIMIT 1") or die(mysql_error()); 
+0

임의의 문자열을 SQL 문에 삽입하는 것은 그리 좋지 않습니다. 나는 위험한'mysql_query'를 사용하는 모든 예제를 downvoting 할 것입니다. – tadman

+0

mysql_query와 함께 예제를 제공하지 마십시오. 사용하기에는 너무 위험합니다. – tadman

+0

사용자 이름이 이스케이프되며, mysql에서 mysqli로 스크립트를 업데이트하는 중입니다. 스크립트 또는 이유에 대한 배경 지식이 없어도 downvoting은 멋지지 않습니다. – Kaido

3

쿼리의 구문이 올바르지 수 있지만, 알고리즘은 아마되지 않습니다 : (. 그리고 당신은 SQL 주입 공격을 완화 $username에 대해 쿼리를 결합해야합니다)

SELECT * FROM orders 
WHERE Username = ? 
AND completed > ordered 
ORDER BY completed ASC 
LIMIT 1 

테이블에 orders이 포함되어있을 수 있습니다. 무엇이 포함되어 있습니까? 모두 주문이 완료된 후에 완료되므로 날짜 표시가 될 수 없습니다.

그래서 INT 여야합니까? 그리고 주문을 성취 한 사람들을 (AND completed > ordered)으로 만들었 으면 좋겠다. 시도하십시오 completed < ordered.

+0

네 말이 맞다. 그건 내 실수였다. 필요한 것은 휴식을 취하는 것이다 :) – Kaido

+0

이것은 임의의 사용자 데이터를 SQL에 저장하는 것이 바람직하지 않기 때문에'WHERE Username =? '이어야한다. – tadman

+1

@ tadman 나는 downvote가 당신이라고 생각했다. 자세히 살펴보면 내 코드가 제안 된 수정은 아니지만 OP의 원래 코드를 다시 포맷 한 것임을 알 수 있습니다. 명확성을 위해 단순하게 잘라 냈습니다 (PHP 문법은 아니지만 벌거 벗은 SQL 문입니다). 당신 말이 맞습니다. 그러나 저쪽에 고칠 것이 많습니다. 나는 OP 질문의 범위 내에서만 답변했습니다. – msanford

관련 문제