PHP使用用户输入从查询中选择MySQL列

PHP使用用户输入从查询中选择MySQL列,php,mysql,Php,Mysql,我有一个MySQL表,如下所示: +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | Weight | int | YES | | NULL | | | 100

我有一个MySQL表,如下所示:

+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| Weight  | int         | YES  |     | NULL    |       |
| 100     | double      | YES  |     | NULL    |       |
| 120     | double      | YES  |     | NULL    |       |
| 130     | double      | YES  |     | NULL    |       |
| 150     | double      | YES  |     | NULL    |       |
| 160     | double      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
我使用

$row = mysqli_query($con, "SELECT * FROM Rates WHERE Weight<='$weight' AND Weight>='$weight'");
$row=mysqli\u查询($con,“从权重为“$Weight”的费率中选择*);
我的问题是如何使用返回的查询结果打印其中一个字段(100、120、130、150、160)的值,该字段最接近用户输入的内容

例如,如果用户在110中键入,将打印字段“120”中的值。 或者,如果输入131,则会打印“150”的值(因此总是向上舍入)

目前,我有:

while($row = mysqli_fetch_array($rate))
    {
        echo "Using weight your cost is: " . $row['100'];
        echo "<br>";
    }
while($row=mysqli\u fetch\u数组($rate))
{
echo“使用重量,您的成本是:”.$row['100'”;
回声“
”; }
但这只打印字段“100”的值 我将如何替换它以获取用户输入并计算出哪一行最接近并打印该行

比如:

IF ($value =< 100) echo $row['100']
IF ($value =< 120 && $value > 100) echo $row['120']
IF ($value =< 130 && $value > 120) echo $row['130']
..etc
IF($value=<100)echo$行['100']
如果($value=<120&&$value>100)回显$row['120']
如果($value=<130&&$value>120)回显$row['130']
等

尝试此版本的查询:

SELECT *
FROM Rates
order by abs(Weight - $weight)
limit 1;
这将返回一行,其中权重最接近用户值

以下版本始终为四舍五入:

SELECT *
FROM Rates
WHERE Weight >= $weight
order by Weight
limit 1;
编辑:

根据您的编辑,我认为这可能是您想要的:

SELECT (case when "100" >= $value then "100"
             when "120" >= $value then "120"
             when "130" >= $value then "130"
             when "150" >= $value then "150"
             when "160" >= $value then "160"
        end)
FROM Rates
WHERE Weight<='$weight' AND Weight>='$weight';
SELECT(如果“100”>=$value然后选择“100”
当“120”>=$value时,则为“120”
当“130”>=$value时,则为“130”
当“150”>=美元值时,则为“150”
当“160”>=美元值时,则为“160”
(完)
从费率
其中Weight=“$Weight”;

案例
选择第一个匹配值。

您可以尝试此版本

SELECT *
FROM Rates
WHERE Weight>='$weight'"
limit 1;
它将只返回一行。您可以按以下方式获取值:

$row = mysqli_fetch_array($rate);
echo "Using weight your cost is: " . $row['Field'];
echo "<br/>";
$row=mysqli\u fetch\u数组($rate);
echo“使用重量,您的成本是:”$行['Field'];
回声“
”;
听起来您需要一个
if/else
块来设置字段-

if($your_value <= 100) {$field = 100;}
else if($your_value <= 120) {$field = 120;}
else if($your_value <= 130) {$field = 130;}
else if($your_value <= 150) {$field = 150;}
else {$field = 160;}
while($row = mysqli_fetch_array($rate))
{
    echo "Using weight your cost is: " . $row[$field];
    echo "<br>";
}

if($your_value抱歉,我想我不清楚,它选择了正确的权重,但我需要根据用户输入的第二个值+1打印出该行的正确字段。@ZacPowell:这是一个
select*
查询。它正在检索该行中权重最接近的所有字段。如果您想要另一个字段,那么只需
echo$r即可。)ow['the_other_field']
@MarcB是的,我看到了,但我的问题是,打印的字段需要最接近向上舍入的用户值,这正是第二个查询所做的。然后一定要将它们放入子表中,例如
权重距离(权重,价格)
或类似的内容。然后,您可以通过添加一个简单的连接查询来使用上述答案。请继续阅读,因为您在这里使用字符串插值会导致严重问题。避免这一点非常重要。
mysqli
支持参数化查询,应尽可能使用参数化查询。