2013-03-31 47 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'";