2012-02-01 10 views
3

たとえば、次のクエリを確認します。SQLクエリで中括弧{}は何をしますか?

$query = "SELECT * FROM users WHERE user='{$_POST['username']}'; 

どのような用途ですか?

文字列の文脈では、私はそれが解決する問題を理解しています。
$ animal = "cat" echo "{$ animal} s"のようなことができます。 // catを出力します

しかし、上記のSQLでは、私はそれを取得しません。 次は同じではないでしょうか?

$query = "SELECT * FROM users WHERE user='$_POST['username']' AND password='$_POST['password']'"; 

したがって、{と}の使用は便利ですか?どのような例でもSQL文脈を理解できますか?

+0

あなたは他のプログラミング言語にもこのタグをつけるべきですか? – Blorgbeard

+0

あなたのクエリは他の文字列と同じように文字列です。唯一の違いは、データベースエンジンが何か役に立つことができることです。 – Arjan

+0

@Arjan ..ちょっと..何? – Ben

答えて

8

は、二重引用符文字列構文についてhttp://www.php.net/manual/de/language.types.string.php#language.types.string.parsingを参照してください私の例のように文字列をconcatingせずにこれを書くための他の方法です。

中括弧は複雑な変数式です。それらはPHPによって解釈され、SQLインタフェースでは解釈されません。

$query = "SELECT * FROM users WHERE user='$_POST['username']' AND password='$_POST['password']'"; 

上記の構文解析エラーが発生します。中括弧なしでは、次のように記述する必要があります。

$query = "SELECT * FROM users WHERE user='$_POST[username]' AND password='$_POST[password]'"; 

キーの引用符がないことに注意してください。これは、単純な配列アクセスと単純なオブジェクトプロパティ式の場合にのみ機能します。より複雑なものについては、中括弧を使用してください。


あなたが知っているので、今までそうするつもりはないという誓いをしてください。ユーザー入力を直接補間するのは良い考えではないからです。 http://bobby-tables.com/

PDO with prepared statementsをご利用ください。 だからはるかに簡単です。


しかし、もっと複雑なカーリー文字列構文のための一例を与えるために、これは私がしたいものです。

$query = "SELECT * FROM users WHERE user={$_POST->id->sql['username']}"; 

(一部のインラインフィルタリングおよび引用は一例として、動作しませんありません。 )デフォルトのPHP設定で。

+1

さらに、中括弧は、PHPが変数名として多すぎる文字を解釈するのを防ぐかもしれません。たとえば、 '$ var'と' $ var2'を持っているならば、 'print" $ var_and_var2 "は動作しません。あなたは' print "{$ var} _and _ {$ var2}" '(...または'printf()'または文字列連結を使用してください...) – Carpetsmoker

+1

[解析エラーの例](http://codepad.org/8qmdaBYy)。 – cmbuckley

+0

+1 for PDO ..... – CountMurphy

1

PHPは辞書項目を直接文字列に変換できません。あなたは、このようにしなければならない。

query = "SELECT * FROM users WHERE user='" . $_POST['username'] . "' AND password='" . $_POST['password'] . "'"; 

curlybracketsが

関連する問題