2013-03-31 48 views
0

我想從表中檢索一些數據,其中年齡在一定範圍內。數據檢索在MySQL

示例

年齡在20至30歲之間的人。我該怎麼做?我試着用下面的查詢,但我無法得到它。

$age="SELECT * 
    From rec_patient_reg 
    WHERE p_age >='$afrom' <= '$to'"; 
    $result1=mysql_query($age) 
    or die(mysql_error()); 
    while($result = mysql_fetch_array($result1)) { 
    echo "<b>Patient ID</b> = " .$result["Patient_id"] . " <br>"; 
    echo "<b>NAME</b> = ".$result["p_fname"]."<br><br>----------------<br><br>"; 

請幫幫我。

+0

什麼是你的錯誤信息? –

+0

沒有錯誤消息,但重新獲得的值不符合預期。 – praveenrsmart

回答

1

我敢打賭,因爲你正在使用MySQL,你沒有得到任何錯誤消息。看看下面這個例子,

SELECT * 
FROM tableName 
WHERE Age >= 20 <= 25 

這是不允許在任何其他RDBMS,但MySQL允許它。它所做的是它implictly允許在過濾器的最右側布爾表達式,如

SELECT * 
FROM tableName 
WHERE (Age >= 20) <= 25 

因此,在這種情況下,該值現在解析成(比方說年齡= 5

WHERE 0 >= 25 

導致您檢索意外的結果。


您可以使用BETWEEN,如果你想搜索的範圍,

SELECT * 
From rec_patient_reg 
WHERE p_age BETWEEN '$afrom' AND '$to' 

一點題外話,查詢很容易受到與SQL Injection如果變量的值(小號)從來到外。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

你會讓我們回答1個SQL問題嗎? :P –

+0

@ Mr.Alien你仍然可以回答所有的它:P –

+0

我有許多疑問,我與mysql_ *函數做了什麼?我應該改變我的網站的一切嗎?沒有其他的方式來提供安全性? – praveenrsmart

0

的第一件事,不要使用mysql_*功能,因爲它們已被棄用。

您的查詢應該是:

SELECT * 
FROM `rec_patient_reg` 
WHERE `p_age` BETWEEN '$afrom' AND '$to' 
+0

我有很多疑問,我用mysql_ *函數完成了嗎?我應該改變我的網站的一切嗎?沒有其他的方式來提供安全性? – praveenrsmart

0

也許這樣嗎?

$age = "SELECT * FROM rec_patient_reg WHERE p_age >='$afrom' AND p_age <= '$to'";