-4

これは私のクエリです:

$q="INSERT INTO users2 (id_fb,name, firstname ) VALUES($_SESSION["userprofile"]["id"],$_SESSION["userprofile"]["name"],$_SESSION["userprofile"]["first_name"])";

このエラーがあります:

解析エラー: 構文エラー、予期しない '"'、T_STRING または T_VARIABLE または T_NUM_STRING が必要です

正しく行う方法は?

4

3 に答える 3

3

引用する必要があります:

$q="INSERT INTO users2 (id_fb,name, firstname ) 
  VALUES('".(int)$_SESSION["userprofile"]["id"]."',
         '".mysqli_real_escape_string($_SESSION["userprofile"]["name"])."',
         '".mysqli_real_escape_string($_SESSION["userprofile"]["first_name"])."')";

ただし、準備済みステートメントを使用することをお勧めします...

   $q = $sql->prepare("INSERT INTO `users2` SET 
                   `id_fb` = ?, `name` = ?, `firstname` = ?");
   $q->execute( array( (int)$_SESSION["userprofile"]["id"], 
            $_SESSION["userprofile"]["name"], 
            $_SESSION["userprofile"]["first_name"]));
于 2013-02-12T16:07:27.113 に答える
0

mysql_ *は使用しないでください。非推奨になりました。また、SQLインジェクションが発生しやすくなります。

今あなたの問題に。文字列を作成するために二重引用符を使用しています。ステートメントが最初に到達すると$_SESSION["、二重引用符で文字列の構成が終了します。セッションでは一重引用符を使用する必要があります。そのような:$_SESSION['id']

さらなる解明:

$var = "This is a "statement"";This is a "statement"ステートメントの前の二重引用符で文字列が閉じられたため、出力は生成されません。それらを表示するには、内側の二重引用符をエスケープする必要があります(\")。また、一重引用符は二重引用符で始まるステートメントを閉じないため、$var = "This is a 'statement'";出力されます。その逆も同様です。This is a 'statement'

この質問では、文字列を開始するために二重引用符を使用すると変数を実行できますが、配列アイテムは、インデックスをそのまま使用する場合は一重引用符を使用する必要があり$_SESSION['name']ます$_SESSION["name"]

将来の支援のために、PHPがあなたに与えるエラーについて調査してください。彼らはあなたに話したり、あなたをあなたの問題に導く傾向があります。また、PHPの基本についても読んでください。

于 2013-02-12T16:09:24.113 に答える
-2

試す:

 $q="INSERT INTO users2 (id_fb,name, firstname ) VALUES($_SESSION['userprofile']   ['id'],$_SESSION['userprofile']['name'],$_SESSION['userprofile']['first_name'])";
于 2013-02-12T16:07:44.453 に答える