这是我的疑问:
$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
如何正确地做到这一点?
答案 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'])";