DOステートメントでプリペアドステートメントを使用するにはどうすればよいですか?

リシャフ・シャラン

SQLインジェクションからデータベースを保護するために、プリペアドステートメントを使用しようとしているかなり複雑なクエリがあります。私は基本的に、単一の開始-終了ブロックの下で複数のクエリを連鎖させました。

この複合クエリは、最初にユーザーセッションが存在するかどうかを確認し、次にユーザーが禁止されているかどうかを確認し、次にユーザーが入力したタグが有効かどうかを確認し、最後に投稿をデータベースに挿入します。

クエリは次のとおりです。

query = "DO
    $$
    BEGIN
        IF 
            (select exists(select user_id from sessions where unqid = $1 and user_id = $2))
        THEN
            IF 
                (select banned_till from users where unqid = $2) > now() 
            THEN
                RAISE EXCEPTION 'User has been banned!';
            ELSE 
                IF (
                    Select ( SELECT array_agg(DISTINCT name) FROM allowed_tags) @> $3) 
                THEN
                    insert into posts (unqid, title, link, content, user_id, user_nick, user_flair, 
                    tags, tags_details, likes, likes_details) 
                        SELECT $4, $5, $6, $7, 
                        $2, user_nick, user_flair, 
                        $8, $9, 1, $10
                        from users where unqid = $2;
                ELSE
                    RAISE EXCEPTION 'Fake tags detected!';
                END IF;
            END IF;
        ELSE
            RAISE EXCEPTION 'User is not logged in';
        END IF;
    END
    $$;"

DB.exec query, 
    session_id, session_user, tags_list, unqid, title, link, content, 
    tags_obj.to_json, tags_details_obj.to_json, likes_obj.to_json

このクエリは、文字列補間を使用している場合は正常に機能します。しかし、プリペアドステートメントを使おうとすると、次のようになりました。

bind message supplies 10 parameters, but prepared statement "" requires 0

クエリでプリペアドステートメントを使用するにはどうすればよいですか?

ローレンツアルベ

DOステートメントをプリペアドステートメントとして使用することはできません

次の2つのステートメントを使用することをお勧めします。

  • 1つは、エラー状態があるかどうかを判断するために必要な3つの結果を取得します

  • INSERTステートメントを実行するための1つ

これらの2つ目は、定期的に準備されたステートメントです。

BEGIN ... ENDPL / pgSQLでトランザクションとブロックを混同しているように思われます

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

マルチユーザーWebサイトでプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

トランザクションにプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

Wordpressでプリペアドステートメントをクエリの変数とともに使用するにはどうすればよいですか?

分類Dev

Hibernateクエリでプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

Hibernateクエリでプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

Magentoで、core_resourceを使用してプリペアドステートメントを作成するにはどうすればよいですか?

分類Dev

OleDbDataAdapterでプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

Android sqliteでプリペアドステートメントを使用するにはどうすればよいですか?

分類Dev

Spring JDBCTemplateでプリペアドステートメントを正しく使用するにはどうすればよいですか?

分類Dev

mysqli APIを使用して完全に動的なプリペアドステートメントを作成するにはどうすればよいですか?

分類Dev

PDOプリペアドステートメントでエスケープ文字「\」を回避するにはどうすればよいですか?

分類Dev

コードのこの部分をPHPでプリペアドステートメントに変換するにはどうすればよいですか?

分類Dev

プリペアドステートメントで「DEFAULT」と「NULL」をバインドするにはどうすればよいですか?

分類Dev

これをプリペアドステートメントコードにするにはどうすればよいですか?

分類Dev

PHP SQLプリペアドステートメントでコードの繰り返しを回避するにはどうすればよいですか?

分類Dev

PHPでMySQLプリペアドステートメントからJSONを作成するにはどうすればよいですか?

分類Dev

PDOプリペアドステートメントで日時値をNULLに設定するにはどうすればよいですか?

分類Dev

実行されたプリペアドステートメントからJSONを作成するにはどうすればよいですか?

分類Dev

Sequelizeでプリペアドステートメントを作成するにはどうすればよいですか?

分類Dev

プリペアドステートメントで連想配列を取得するにはどうすればよいですか?

分類Dev

一度に2つのテーブルに挿入するにはどうすればよいですか?プリペアドステートメント

分類Dev

このクエリのプリペアドステートメントを作成するにはどうすればよいですか?

分類Dev

1つのmysql :: Connから複数のプリペアドステートメントを作成するにはどうすればよいですか?

分類Dev

このSQLをプリペアドステートメントに変換するにはどうすればよいですか?

分類Dev

forループでreturnステートメントを使用するにはどうすればよいですか?

分類Dev

TOSCAでループステートメントと条件ステートメントを使用するにはどうすればよいですか?

分類Dev

Djangoで、同じページをリロードしてエラーメッセージポップアップをトリガーするelseステートメントをコーディングするにはどうすればよいですか?

分類Dev

PDOプリペアドステートメントのマークされたパラメータでピリオドドットを使用するにはどうすればよいですか?

分類Dev

このコードをjdbcのプリペアドステートメントまたはステートメントに変換するにはどうすればよいですか?

Related 関連記事

  1. 1

    マルチユーザーWebサイトでプリペアドステートメントを使用するにはどうすればよいですか?

  2. 2

    トランザクションにプリペアドステートメントを使用するにはどうすればよいですか?

  3. 3

    Wordpressでプリペアドステートメントをクエリの変数とともに使用するにはどうすればよいですか?

  4. 4

    Hibernateクエリでプリペアドステートメントを使用するにはどうすればよいですか?

  5. 5

    Hibernateクエリでプリペアドステートメントを使用するにはどうすればよいですか?

  6. 6

    Magentoで、core_resourceを使用してプリペアドステートメントを作成するにはどうすればよいですか?

  7. 7

    OleDbDataAdapterでプリペアドステートメントを使用するにはどうすればよいですか?

  8. 8

    Android sqliteでプリペアドステートメントを使用するにはどうすればよいですか?

  9. 9

    Spring JDBCTemplateでプリペアドステートメントを正しく使用するにはどうすればよいですか?

  10. 10

    mysqli APIを使用して完全に動的なプリペアドステートメントを作成するにはどうすればよいですか?

  11. 11

    PDOプリペアドステートメントでエスケープ文字「\」を回避するにはどうすればよいですか?

  12. 12

    コードのこの部分をPHPでプリペアドステートメントに変換するにはどうすればよいですか?

  13. 13

    プリペアドステートメントで「DEFAULT」と「NULL」をバインドするにはどうすればよいですか?

  14. 14

    これをプリペアドステートメントコードにするにはどうすればよいですか?

  15. 15

    PHP SQLプリペアドステートメントでコードの繰り返しを回避するにはどうすればよいですか?

  16. 16

    PHPでMySQLプリペアドステートメントからJSONを作成するにはどうすればよいですか?

  17. 17

    PDOプリペアドステートメントで日時値をNULLに設定するにはどうすればよいですか?

  18. 18

    実行されたプリペアドステートメントからJSONを作成するにはどうすればよいですか?

  19. 19

    Sequelizeでプリペアドステートメントを作成するにはどうすればよいですか?

  20. 20

    プリペアドステートメントで連想配列を取得するにはどうすればよいですか?

  21. 21

    一度に2つのテーブルに挿入するにはどうすればよいですか?プリペアドステートメント

  22. 22

    このクエリのプリペアドステートメントを作成するにはどうすればよいですか?

  23. 23

    1つのmysql :: Connから複数のプリペアドステートメントを作成するにはどうすればよいですか?

  24. 24

    このSQLをプリペアドステートメントに変換するにはどうすればよいですか?

  25. 25

    forループでreturnステートメントを使用するにはどうすればよいですか?

  26. 26

    TOSCAでループステートメントと条件ステートメントを使用するにはどうすればよいですか?

  27. 27

    Djangoで、同じページをリロードしてエラーメッセージポップアップをトリガーするelseステートメントをコーディングするにはどうすればよいですか?

  28. 28

    PDOプリペアドステートメントのマークされたパラメータでピリオドドットを使用するにはどうすればよいですか?

  29. 29

    このコードをjdbcのプリペアドステートメントまたはステートメントに変換するにはどうすればよいですか?

ホットタグ

アーカイブ