我试图执行这个查询-
$sql="INSERT INTO REGISTRATIONS VALUES ('$_SESSION['fname']', '$_SESSION['username']', '$_SESSION['height']', '$_SESSION['image']');";
还有这个——
$sql="INSERT INTO REGISTRATIONS VALUES ($_SESSION['fname'], $_SESSION['username'], $_SESSION['height'], $_SESSION['image']);";
但这两者都返回一个错误。因此,我将会话变量存储到普通php变量中。并尝试执行查询-
$name = $_SESSION['fname'];
$username = $_SESSION['username'];
$height = $_SESSION['height'];
$image = $_SESSION['image'];
$sql="INSERT INTO REGISTRATIONS VALUES ('$name', '$username', '$height', '$image');";
它奏效了。
但我想知道为什么前两个不起作用,为什么我们必须将Session保存到另一个变量中才能使其起作用?
请帮助:)
问题
你在这个代码中有一个语法错误
$sql = "
INSERT INTO REGISTRATIONS
VALUES (
'$_SESSION['fname']',
'$_SESSION['username']',
'$_SESSION['height']',
'$_SESSION['image']'
);
";
'$_SESSION['fname']'
导致此处出现错误。如果没有特殊语法,就无法访问字符串中的数组索引(请参阅下文)。
解决方案
使用串联运算符.
分离字符串和变量
$sql = "
INSERT INTO REGISTRATIONS
VALUES ('"
.$_SESSION['fname'].
"', '"
.$_SESSION['username'].
"', '"
.$_SESSION['height'].
"','"
.$_SESSION['image'].
"');";
或者使用PHP的变量插值;复杂(卷曲)语法";。这是首选方式
$sql = "
INSERT INTO REGISTRATIONS
VALUES (
'{$_SESSION['fname']}',
'{$_SESSION['username']}',
'{$_SESSION['height']}',
'{$_SESSION['image']}'
);
";
请注意,这只适用于双引号字符串。
试试这些
$sql="INSERT INTO REGISTRATIONS VALUES ('".$_SESSION['fname']."', '".$_SESSION['username']."', '".$_SESSION['height']."', '".$_SESSION['image']."')";
您可以使用
echo "$_SESSION[name]";
echo "{$_SESSION['name']}";
参见http://php.net/manual/en/language.types.string.php#language.types.string.parsing.simple
如果你想知道这样做的原因,好吧,我帮不了你。但和往常一样:PHP是旧的,已经进化了很多,因此引入了不一致的语法。
还检查如何在双引号中使用关联数组
http://php.net/manual/en/language.types.array.php#language.types.array.foo-条形
http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex