-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 が必要です

4

4 に答える 4

4

ソリューションはSQLインジェクションに対して脆弱です。CookieのユーザーIDがである場合はどうなり1; drop table follow; --ますか?フォローテーブルに別れを告げます。

mysql_real_escape_string()少なくとも使用する必要があります(編集:補間された変数を引用符で囲みます)。詳細については、このページを参照してください。しかし、本当にあなたは準備されたステートメントが欲しいです。

于 2012-04-25T18:44:22.943 に答える
3

文字列内で引用符付きの配列キーを使用することはできません。構文を使用する{...}か、引用符を削除する必要があります (文字列の外側で警告が発行されますが、PHP は知っています)。

使用することをmysql_real_escape_string主張するすべての人は正しく、準備されたステートメントで PDO を使用することを主張するすべての人ははるかに正しいです。

于 2012-04-25T18:56:51.200 に答える
-2

これを試して

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

このコード行の何が問題になっていますか?

基本的に、あなたは配列を持っていますが、これはあなたがアクセスし$COOKIEていることを意図していたと$_COOKIE思いますが、文字列にカプセル化されているため、PHPのパーサーを支援して、はい、実際には変数(配列)であり、一部ではないことを示す必要があります文字列の。{$like_this}これを行うには、変数を「文字列」内で使用するときに変数をカプセル化する必要があります。

于 2012-04-25T17:28:32.883 に答える
-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";
于 2012-04-25T18:52:42.960 に答える