2012-04-25 5 views
-1

このコード行は何が問題になっていますか?私の質問にエラーが発生しました

私は、エラーメッセージが出続ける
$query= "SELECT status FROM follow WHERE user_id1= $COOKIE['user_id'] AND user_id2= 
$user_id"; 

解析エラー:構文エラー、予期しないT_ENCAPSED_AND_WHITESPACE、T_STRINGを期待したりT_VARIABLEまたはT_NUM_STRING

+0

'echo $ query'を試してください。それは問題が何であるかのヒントを与えるかもしれません。 –

+1

あなたはボビーテーブルのことを聞いたことがありますか? http://bobby-tables.com/ –

+1

"このコード行には何が問題なのですか?"ああ、とても、非常に。 – Andrew

答えて

-2

基本的にこの

$query= "SELECT status FROM follow WHERE user_id1 = {$_COOKIE['user_id']} 
AND user_id2 = {$user_id}"; 

What is wrong with this line of code?

をお試しくださいあなたは配列$COOKIEを持っています。これは私が信じていたものですあなたがアクセスしているのは$_COOKIEではありませんが、文字列にカプセル化されているので、実際に変数(配列)であり、文字列の一部ではないことを示すためにPHPのパーサを支援する必要があります。これを行うには、 "文字列"の中で変数を使用するときは、変数を{$like_this}のまわりにカプセル化する必要があります。

4

あなたの解決策はSQLインジェクションに脆弱です。 CookieのユーザーIDが1; drop table follow; --の場合はどうなりますか?あなたのフォローテーブルに別れを伝えてください。

mysql_real_escape_string()(編集:補間された変数の前後に引用符を入れる必要があります)の詳細についてはthis pageを参照してください。しかし、実際にはprepared statementsが欲しいです。

+0

mysql_real_escape_string()を使用する必要がある理由は何ですか? –

+4

未処理のユーザ指定データをSQLクエリに挿入するのは間違っているためです。 – Venge

+1

mysql_real_escape_stringがMySQLに渡す前に文字列をエスケープするように設計されているかのようです! – Venge

-4

このエラーの原因となる配列キーを区切る一重引用符
文字列内のこれらの引用符を省略するか、中括弧を使用してください。

あなたはまた、クエリに入る自分の価値観は、適切な形式は、文字列内で引用された配列のキーを使用することはできません

$user_id1 = (int)$COOKIE['user_id']; 
$user_id2 = (int)$user_id; 
$query="SELECT status FROM follow WHERE user_id1=$user_id1 AND user_id2=$user_id2"; 
+1

ユーザIDがintではない場合はどうなりますか? – Venge

+0

@Patrick oh。それはあなたにとって重要なのですか? :) –

+0

*一口*少なくともmysql_real_escape_stringよりも正しいです。 – Ryan

3

を持っていることを確認する必要があります。あなたは{...}構文を使用する必要があり、または引用符ドロップ(文字列の外側警告を出すだろうが、あなたが知っている、PHP。)あなたはmysql_real_escape_stringを使用すると主張

誰もが正しいか、そして誰もがあなたとPDOを使用して主張します準備されたステートメントははるかに正確です。

+1

あなたがmysql_real_escape_stringを使用することを主張している人は皆、IN-friggin-correctであり、手がかりがありません。 –

関連する問題