アカウント名:
パスワード:
とはいえ、今時は何らかのフレームワークを使ってるだろうから、フレームワーク->ORM->DBライブラリと追っかけて「本物のプリペアドステートメントであることを確かめる」のは結構大変な気がする。
---ところで「絶対に文字列結合でSQLを構築しようとしてはいけない」件であるが、入力の個数が不定な場合がある(特にIN句)。
select ... where .... in (?,?,?..?)
やむを得ずB部分を文字列結合で生成してprepare -> bindしてるが、「絶対に文字列結合を使わない」良い方法があるだろうか?
PHPで、ですが…。
$args = array('a', 'b', 'c', ...);$sql = 'SELECT ... WHERE ... IN (' . join(', ', array_fill(0, count($args), '?')) . ')';
なんてのはどうでしょう?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
補足 (スコア:1)
とはいえ、今時は何らかのフレームワークを使ってるだろうから、フレームワーク->ORM->DBライブラリと追っかけて「本物のプリペアドステートメントであることを確かめる」のは結構大変な気がする。
---
ところで「絶対に文字列結合でSQLを構築しようとしてはいけない」件であるが、
入力の個数が不定な場合がある(特にIN句)。
select ... where .... in (?,?,?..?)
やむを得ずB部分を文字列結合で生成してprepare -> bindしてるが、「絶対に文字列結合を使わない」良い方法があるだろうか?
Re:補足 (スコア:0)
PHPで、ですが…。
$args = array('a', 'b', 'c', ...);
$sql = 'SELECT ... WHERE ... IN (' . join(', ', array_fill(0, count($args), '?')) . ')';
なんてのはどうでしょう?