这个问题很简单(可能有点愚蠢),但我会给你一个例子。
在我正在开发的项目中,我创建了一些函数(类方法),它们将为我执行一些基本的SQL操作。我所需要做的就是提供信息,如表名,列和值作为参数,剩下的工作就完成了。如何在PHP PDO中执行算术运算?
功能结构基本上是这样的:
public function update_order($order_id, $order_value) {
$example_sth = $pdo->prepare("UPDATE example SET example_order = :order_value WHERE example_id = :order_id");
$example_sth->bindParam(":order_id", $order_id);
$example_sth->bindParam(":order_value", $order_value);
$example_sth->execute();
$data = $example_sth->fetch();
return $data;
}
这就是说,现在让我们假设我要执行这样的查询:
UPDATE example SET example_order = example_order + 1;
由于我使用PDO来执行SQL操作,无论如何,我可以通过PDO的bindParam()函数中的“example_order + 1”部分,或者唯一的解决方案是完全删除PDO变量并直接在查询中写入算术运算?
在此先感谢您的帮助。
UPDATE
有一个额外的信息,为了简单起见,我没有在这个问题包括。由于提出了一些混淆,我将在这里包括这些试图了解我所有这些意图的人。
我正在从事的项目是类似RPG的网站,用户拥有属性点,具有特殊效果的项目等等。
所有这些用户属性和项目效果都是由管理员创建或操纵的。由于这些物品效果在他们将要做的事情上有很大差异(它可以简单地给予用户更多的属性点,但它也可以执行更复杂的操作,例如创建或删除整个配置文件),唯一的解决方案是我来到是将这些效果转化为SQL操作。
为了避免安全漏洞,我当然不会允许创建项目的管理员用户自己保存这些SQL操作,所以我决定要保存简单的JSON命令,如:
{"update":[
{"columns":"order_id, order_value",
"values":"16281738, 16"}
]}
管理员用户可以通过一个简单的控制面板选择他们想要的项目效果,JSON将根据它自动生成。
当普通用户执行效果时,所有这些JSON命令都必须传递给负责SQL操作的类方法(我上面提到的那些)。
现在正如我一直在问:为什么我必须保存算术运算?
答案是:
如果这些项目的后果之一就是专门创建一个用户,我知道我可以简单地通过自己创建的项目效果之前进行计算,所以JSON命令将已经包括最后结果(例如,“列”:“life_ponts”,“value”,“77”“)。
但是,由于这些操作/项目效果不是专门针对用户的,它们必须是主观的(即,基于正在执行它们的用户的工作)。
因此,我现在唯一解决的办法是不保存最终结果(因为这种情况不可能),而是保存必须在这些属性点上执行的算术运算。
因此,当我保存“”列“:”life_points“,”value“:”life_points + 1“”时,我想要做的是从执行命令的用户那里得到life_points,并且将其增加1.
我知道这听起来令人困惑,甚至可能是错误的,所以我完全开放以提供更好的建议。 不好意思,我希望你们能帮我一把。
此致!
为什么您需要绑定它?绑定参数的目的是防止SQL注入,即用户在查询中注入SQL代码。如果你只想增加一个值,你可以执行你的查询。没有用户输入。 –
是的,我知道,@AurelBílý。但是我创建的类方法应该作为与该表相关的所有UPDATE操作的标准,所以它应该接受所有类型的信息(包括用户输入或像问题中提到的简单算术运算)。当我要做一件事或另一件事情时,它会有很大的变化,所以我不想因为一个不合适的查询而改变方法。 –
用户如何发送算术运算?输入是怎样的? 然后这个脚本总是更新相同的字段,或更新的字段取决于用户输入? – Dragos