AWS lambdaでsqlを直書きするとき、prepared statementで書かないとNGだった件

AWS lambdaでsqlを直書きするとき、prepared statementで書かないとNGだった件

概要

AWS lambdaのSELECT文の中で、値を直接代入する書き方をしていたが、動かなかった。

SQLを書くときはprepared statementで書かないとダメだった。

詳細

AWS lambdaのSELECT文の中で、値を直接代入する書き方をしていたが、動かなかった。

以下のような感じで、関連するIoT Deviceの情報を探してくるSQLを書いていました。

AWS lambda/index
text: `SELECT * FROM devices WHERE devices.name = "${ device_name }"`,

動かそうとしても、動きませんでした。

ポイントとしては、devices.nameのところに、device_nameを変数展開して、直接代入しようとしている部分です。

SQLを書くときはprepared statementで書かないとダメだった。

結局どのような書き方で動いたかというと、以下のような感じです。

AWS lambda/index
text: `SELECT * FROM devices WHERE name = $1`,
values: [device_name]

この書き方、あるのは知っていたのですが、名前は知りませんでした。

prepared statemantという書き方らしく、以下のようなメリットがあるそうです。

プリペアドステートメント 【prepared statement

プリペアドステートメントとは、プログラム上で動的にSQL文を生成する必要があるとき、可変部分を変数のようにしたSQL文をあらかじめ作成しておき、値の挿入は処理系に行わせる方式。 実行効率を向上させ、SQLインジェクションを防止する効果がある。

いやはや、、、

しかも、このprepared statementを使わないと、挙動しないような仕組みもあるみたいです。。。

値を直接代入できないようにしているということですね、、、

AWS lambdaもそんなのあるんでしょうか、、、

調べないといけないですね、、、

では。

Leave a Reply

Your email address will not be published.

CAPTCHA