カスタム方程式のプレースホルダーを使用してpdomysqlプリペアドステートメントを作成するにはどうすればよいですか?

ジョーンズG

私はあなたがグーグルプレイや他の多くで見るものと同様の評価システムを実装しています。これを行うには、私がという名前のテーブルを作成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インジェクションに開かれているため、悪い実装です。しかし、ちょっとそれはうまくいきます!だから今私はそれをもっと安全にやりたい

$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プリペアドステートメントのデータを計算するための適切な方法は何ですか?

マクシム・フェドロフ

すべての値は、executeメソッドで文字列値に変換されます。値の型を設定するには、bindParamメソッドを使用する必要があります。次に例を示します。

$sth->bindParam(1, $_POST['rating'], PDO::PARAM_INT);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ