[英]How to create a pdo mysql prepared statement with a placeholder in a custom equation?
我正在實施一種評級系統,該系統類似於您在Google Play和其他許多系統中看到的系統。 為此,我創建了一個名為tbl_ratings
的表以及PRIMARY
, IID
和sum_rating
列。 當然, PRIMARY
列位於自動增量鍵中, IID
是項目ID, sum_rating
是所有用戶評分的累積總和。
因此, tbl_ratings
表可能如下所示:
PRIMARY IID sum_rating
21 2 100
現在這就是我要做的事情,我想避免執行SELECT
只是為了檢索要在PHP中使用的值,因為我可以在更新查詢中進行簡單的加法運算,因此每次有一個用戶提交評級時,我將在此之后更新表:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$stmt = $pdo->prepare("UPDATE tbl_ratings SET sum_rating=sum_rating+".$_POST['rating']." WHERE IID='2'")
$stmt->execute();
但是,您當然知道,這是一個不好的實現,因為這對SQL Injection是開放的。 但是,嘿! 所以現在我想通過做來更安全
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$stmt = $pdo->prepare("UPDATE tbl_ratings SET sum_rating=sum_rating+? WHERE IID='2'")
$stmt->execute(array($_POST['rating']));
如果您注意到它很簡單,則將潛在的sql注入點替換為?
占位符以及正確的准備語句應被構造。 不好不好的事情是, 這不起作用 。 我嘗試在網絡上查找,但效果似乎不盡如人意。
在1 pdo准備好的語句中,要獲得已知列值加數據的正確計算方法應該是什么?
在execute方法中,所有值都將轉換為字符串值。 您必須使用bindParam方法來設置值類型,例如:
$sth->bindParam(1, $_POST['rating'], PDO::PARAM_INT);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.