这是我的查询:
$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
如何正确执行?
你需要引用:
$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"]));
不要使用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 的基础知识。
尝试:
$q="INSERT INTO users2 (id_fb,name, firstname ) VALUES($_SESSION['userprofile'] ['id'],$_SESSION['userprofile']['name'],$_SESSION['userprofile']['first_name'])";