:
プレースホルダとバインドは、値が
一部のドライバはプレースホルダとバインド値をサポートしています。
[...]
一部のドライバは、ようなプレースホルダをも可能にする:に加えて、N(2など、例えば、:::1、)との名前は?ですが、その使用は移植性がありません。
しかし、あなたは運がいい、パラメータを名前付きまたは番号PostgreSQL driverサポート:
DBDで使用可能なプレースホルダの3種類:: Pgがあります。最初は "疑問符"タイプで、各プレースホルダは単一の疑問符文字で表されます。
[...]
方法2番目のプレースホルダは「ドル記号の数字」です。
[...]
最後のプレースホルダタイプは、 ":foo"という形式の "名前付きパラメータ"です。
そしてSQLite driverはまた、それらをサポートしています。
SQLiteは含めて、いくつかのプレースホルダ式をサポートしていますか?と:AAAA。
欠点は、あなたがselectcol_arrayref
と$sth->execute(1,2,3)
(ノートのような便利に使用することはできませんので、あなたが名前付きパラメータでbind_param
多くを使用して終わるだろうということです。誰もが名前のプレースホルダを使用する方法を知っている場合はをexecute
私はコメントの中のいくつかのポインタに感謝したい、私はそれを行う方法を決して考えていない)。ただし、数値プレースホルダのさまざまな形式(PostgreSQLの場合はselect c from t where x = $1
、SQLiteの場合はselect c from t where x = ?1
など)を使用できます。
また、PostgreSQLではアレイスライスと疑問符のコロンを一部の演算子に使用することがあるので、時には標準?プレースホルダと:プレースホルダという名前ので問題が発生する可能性があります。私はで何の問題も経験したことがありませんか?しかし、私はgeometric operatorsのどちらも使用していません。空白を賢明に使用すると、の問題を回避できますか?。 PostgreSQL配列を使用していない場合は、:name
という名前のプレースホルダとarray slicesが戦う心配はありません。
エグゼクティブサマリー:あなたは@bind_params
で作業selectcol_arrayref
または同様の方法で名前つきプレースホルダを使用することはできません。しかし、SQLiteのとPostgreSQLで、あなたは、番号プレースホルダを使用することができます($1
、$2
、... PostgreSQLや?1
、?2
、用を... SQLiteのため)@bind_params
で動作する方法でか、名前のプレースホルダを使用することができます(両方のため:name
PostgreSQLとSQLite)を使用している場合は、prepare
/bind_param
/execute
/fetch
の順番の配列を使用してください。PostgreSQL配列をクエリに使用する場合は注意が必要です。
プレースホルダのサポート(およびサポートされているプレースホルダの種類)はドライバによって異なるため、いくつかのタグを追加しました。 –
できないと思われる理由はありますか? DBIは '$ ary_ref = $ dbh-> selectcol_arrayref($ステートメント、\%attr、@bind_values)'と言っています。空のハッシュを作成する代わりに、2番目の引数に 'undef'を渡すことができることに注意してください。 – ikegami
@ikegami:DBIメソッドの@bind_values'引数に* named *プレースホルダを使う方法を説明できますか? 'prepare' /' bind_param'/'execute'を使っているのなら、それは簡単ですが、明示的な' bind_param'呼び出しのせずにそれを行う方法を決して分かっていません。 –