2012-01-09 18 views
0

私はWampserver、Crimsonエディタ、およびthe New Boston tutorialsを使用してSQLを学習しています。奇妙な引用符の動作

SQLコマンドでは、通常の「一重引用符」は機能しませんが、weird slanty quotesとなります。

フォームと$_GET["name"];を使用する場合は、二重引用符だけが有効です。

ここで何が起こっているのでしょうか?私は英国のキーボードを使用しますが、ビデオチューターもそうです。彼は一重引用符で$_GET['name'];を使用します。

EDIT:サンプルコード:SQLで

if(isset($_GET["sortBy"])&&!empty($_GET["sortBy"])) // only works with "full" quotes 
{ $sortBy   = $_GET["sortBy"]; 
    echo "sortBy works <br><br>"; 
} 
$topTenResult = "SELECT `name`,`intuition`,`bravery`,`romance` FROM `scores` ORDER BY $sortBy DESC"; 
// does not work with default keyboard single quotes 
+2

私たちにコードを教えてください。あなたの説明は、タグで示唆されているように、MySQLではなくPHPコードを参照します。 –

+0

if(isset($ _ GET ["sortBy"])&&!空($ _ GET ["sortBy"])) {\t $ sortBy \t \t \t = $ _GET ["sortBy"]; \t echo "sortBy works

"; } //二重引用符に変更するまでこれは動作しませんでした –

+0

$ topTenResult \t = "SELECT'名前 '、'直感 '、'勇気 '、'ロマンス 'FROM'スコア 'ORDER BY $ sortBy DESC"; //これはデフォルトのキーボードのシングルクォートでは機能しませんでした –

答えて

2

、単一引用符は文字列をマーク。

MySQLでは、バッククォートは「区切り識別子」をマークします。大文字と小文字を区別するか、キーワードと衝突する名前です。バッククォートはMySQL固有のものです。 MS SQL Serverは、同じジョブに対して角括弧を使用します。どちらも非標準の拡張です。

標準SQLでは、区切り識別子をマークするために二重引用符が使用されます。 DBMSの中には、標準準拠モードに入れない限り、二重引用符をマーキング文字列として扱うものもあります。区切られた識別子として自動的に扱われる人もいます。

+0

ありがとう!それは今よりはるかに明確です。 –

2

これは、ネストされた引用符を持つ症状です。

.... " ... $_GET["name"] ... 

$ _GETが二重引用符で囲まれた文字列の内部にあるため、上記は間違っています。だから偽の二重引用符を探して、あなたのコードを誤りに変えます。

(NetBeans IDEのように、素敵なPHPをサポートしています)構文着色が役立つかもしれません。