SQL查询。语法错误,意外'''

时间:2013-02-12 16:04:56

标签: php sql

这是我的疑问:

$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

如何正确地做到这一点?

3 个答案:

答案 0 :(得分: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"]));

答案 1 :(得分: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的基础知识。

答案 2 :(得分:-2)

尝试:

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