私はあなたがグーグルプレイや他の多くで見るものと同様の評価システムを実装しています。これを行うには、私がという名前のテーブルを作成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インジェクションに開かれているため、悪い実装です。しかし、ちょっとそれはうまくいきます!だから今私はそれをもっと安全にやりたい
$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インジェクションポイントをプレースホルダーに置き換えるだけです。悪い悪いことは、これは機能しないということです。ウェブを見てみましたが、あまり実りがないようです。
既知の列値と1pdoプリペアドステートメントのデータを計算するための適切な方法は何ですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加