2012-08-01 111 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

什麼是錯誤? – 2012-08-01 14:00:43

+1

SQL使用正確的語法;你可以驗證指定的'$用戶名'有訂單嗎? – newfurniturey 2012-08-01 14:01:12

+0

我看不到任何語法錯誤。你的$ username變量可能是空的。試着['print()'](http://php.net/manual/en/function.print.php)來檢查。 – 2012-08-01 14:02:37

回答

-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 2012-08-01 14:53:31

+0

請不要給出'mysql_query'的例子。這太危險了,不能使用。 – tadman 2012-08-01 15:27:21

+0

用戶名被轉義並且即時更新腳本從mysql到mysqli所以不知道腳本的背景或者原因downvoting是不是很酷 – Kaido 2012-08-01 15:28:18

3

您所查詢的語法可能是正確的,但你的算法可能不是:(並確保你綁定您的查詢對$username減輕SQL注入攻擊)

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

你有一個orders表,它可能包含...它包含什麼?它不能是一個日期戳,因爲全部訂單將在完成後完成。

所以它必須是一個INT?並且您希望選擇那些有更多訂單履行比AND completed > ordered),這是希望在您的公司不可能的。嘗試completed < ordered

+0

你是對的,那是我的錯誤。需要休息一下:) – Kaido 2012-08-01 14:18:42

+0

這應該是'WHERE Username =?',因爲在SQL中放入任意用戶數據是** NOT **是一個好主意。 – tadman 2012-08-01 14:54:26

+1

@tadman我認爲downvote是你。如果仔細觀察,您會發現我的代碼不是一個建議的更正,而是對OP原始代碼的重新格式化,只是爲了清晰起見(這是純粹的SQL語句,甚至不是PHP片段)。你是對的,但除此之外還有很多需要解決的問題。我只在OP的問題範圍內作出迴應。 – msanford 2012-08-01 15:13:31