簡體   English   中英

如何在自定義方程式中使用占位符創建pdo mysql准備的語句?

[英]How to create a pdo mysql prepared statement with a placeholder in a custom equation?

我正在實施一種評級系統,該系統類似於您在Google Play和其他許多系統中看到的系統。 為此,我創建了一個名為tbl_ratings的表以及PRIMARYIIDsum_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM