php - 如何在 MySQL 查询中使用 session 变量

标签 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']);";

但是这两个都返回一个错误。所以我将 session 变量存储到普通的 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 的 variable interpolation ,请参阅“复杂( curl )语法”。 这是首选方式。

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

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

关于php - 如何在 MySQL 查询中使用 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20142511/

相关文章:

php - mysqli_stmt_num_rows($stmt) 总是返回 0?

javascript - PHP session 变量不通过 AJAX 调用持久化

php - 可捕获的 fatal error :传递给 Foo::bar() 的参数 1 必须实现接口(interface) BazInterface,给定为空

php - 2013-04-09T10 :00:00Z in php 的格式

mysql - 仅获取列名称列表

php - 制作类似帖子的最佳方式 php/mysql

php - MySQL 控制台中的查询结果与 PHP 的 mysql_query() 的结果不匹配

oracle - 为什么我需要一个没有 'create session' 权限的 Oracle 用户?

php - 如何将数据插入到从 while 循环填充的数据库中

php - Apache 使用 http 和 https 设置多个域