如何在MySQL查询中使用会话变量

时间:2013-11-22 10:25:38

标签: php mysql session

我尝试执行此查询 -

$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保存到另一个变量才能使它工作?

请帮助:)

3 个答案:

答案 0 :(得分:3)

问题

此代码中存在语法错误

$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的variable interpolation,参见"复杂(卷曲)语法"。 这是首选方式。

$sql = "
    INSERT INTO REGISTRATIONS
    VALUES (
        '{$_SESSION['fname']}',
        '{$_SESSION['username']}',
        '{$_SESSION['height']}',
        '{$_SESSION['image']}'
    );
";

请注意,这仅适用于双引号字符串。

答案 1 :(得分:2)

试试这些

$sql="INSERT INTO REGISTRATIONS VALUES ('".$_SESSION['fname']."', '".$_SESSION['username']."', '".$_SESSION['height']."', '".$_SESSION['image']."')";

答案 2 :(得分:0)

你可以使用

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-bar

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

相关问题