-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 回答