這個問題很簡單(可能有點愚蠢),但我會給你一個例子。
在我正在開發的項目中,我創建了一些函數(類方法),它們將爲我執行一些基本的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