数学运算符作为mysql查询中的变量

时间:2016-02-20 01:24:24

标签: mysql prepared-statement

我想知道在准备好的mysql语句中是否可以使用数学运算符作为变量?我已经写了下面的内容(尽管它不起作用,我得到"在非对象上调用成员函数bind_param()")。

$result = $mysqli->prepare("SELECT t.column FROM table t WHERE t.value ( ? ) ( ? );");

$result->bind_param('ss', $operator, $value);
$result->execute();

我正在使用它和if语句,根据是否在大于或小于值的情况下选中单选按钮来更改运算符值。如下所示。

if (isset($_POST["abovebelow"]) && $_POST["abovebelow"] == "Above"){

    $operator = ">";

}

elseif (isset($_POST["abovebelow"]) && $_POST["abovebelow"] == "Below"){

    $operator = "<";

}

elseif (!isset($_POST["abovebelow"])){

    $operator = "=";

}

3 个答案:

答案 0 :(得分:1)

您的查询字符串中只有2个变量但是您绑定了3个值,因此首先不是正确的。那么您不应该像这样添加运算符,最好这样做:< / p>

if (isset($_POST["abovebelow"]) && $_POST["abovebelow"] == "Above"){

    $operator = ">";

}

elseif (isset($_POST["abovebelow"]) && $_POST["abovebelow"] == "Below"){

    $operator = "<";

}

elseif (!isset($_POST["abovebelow"])){

    $operator = "=";

}

$result = $mysqli->prepare("SELECT t.column FROM table t WHERE t.value".$operator." ? ;");

$result->bind_param($value);
$result->execute();

答案 1 :(得分:1)

简短的回答是,“不,你不能这样做。”

答案很长,“No, you can't do that.”除其他原因外,编译器必须能够解析完整的查询,这意味着它必须在解析时知道运算符。

Emil Borconi提出了一个很好的解决方法,您可以将操作符插入查询文本中,然后 进行准备。

答案 2 :(得分:0)

不,这是不可能的。准备好的声明中的占位符仅允许在允许表达的位置。因此,您不能将占位符用于表名或列名,也不能将其用于运算符等语法元素。

如果需要动态替换这些内容,则需要在PHP中使用字符串操作,而不是使用预处理语句占位符。