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