0

我想从年龄在一定范围内的表中检索一些数据。

例子

年龄在 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>"; 

请帮我。

4

3 回答 3

1

我敢打赌,因为您使用的是 mysql,所以您没有收到任何错误消息。看看下面这个例子,

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

这在任何其他 RDBMS 上都是不允许的,但 MySQL 允许。它的作用是隐含地允许在过滤器的最右侧使用布尔表达式,例如

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

所以在这种情况下,该值现在被解析为(假设 Age = 5

WHERE  0  >= 25 

导致您检索到意外的结果。


BETWEEN如果要搜索范围,可以使用,

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

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-31T07:48:57.457 回答
0

首先,不要使用mysql_*已弃用的函数。

您的查询应该是:

SELECT * 
FROM `rec_patient_reg`
WHERE `p_age` BETWEEN '$afrom' AND '$to'
于 2013-03-31T07:49:42.370 回答
0

也许像这样?

$age = "SELECT * FROM rec_patient_reg WHERE p_age  >='$afrom' AND p_age <= '$to'";
于 2013-03-31T11:29:21.680 回答