PHP在WHERE子句中使用$ _SESSION ['user']插入MySQL数据库

时间:2014-05-02 18:08:47

标签: php mysql session

我试图将变量插入到我的数据库中,其中用户数据来自$ _SESSION [' user']。

<?php

require("common.php");

if(empty($_SESSION['user']))
{
    header("Location: login.php");

    die("Redirecting to Login");
}

$user = $_SESSION['user'];

~calculations done~

$query = "INSERT INTO db (role,rolesub) VALUES ('$varRole','$varRoleSub') WHERE user = $user";

    $query_params = array(
        ':role' => $varRole,
        ':roleSub' => $varRoleSub
    );
    try
    {
        $stmt = $db->prepare($query);
        $result = $stmt->execute($query_params);

    }
    catch(PDOException $ex)
    {
        die("Failed to run query 3: " . $ex->getMessage());
    }

我一直收到这个错误:

无法运行查询3:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在&#39; WHERE user = Array&#39;附近使用正确的语法。在第1行

我无法看到我的WHERE子句在哪里失败。

任何帮助都将非常感谢!!!

3 个答案:

答案 0 :(得分:1)

INSERT查询没有,也不能有WHERE子句。这是MySQL语法错误的原因。如果需要根据某些条件插入,则需要在INSERT查询之前执行该逻辑。

如果你想进行UPDATE查询,那么可以使用WHERE子句,但是,MySQL错误显示$_SESSION['user']是一个数组,不能直接放入SQL,所以你需要访问其中一个元素,例如$_SESSION['user']['id']

答案 1 :(得分:1)

WHERE声明中不能有INSERT子句。

您要么寻找:

UDPATE db SET role = '$varRole', rolesub = '$varRoleSub' WHERE user = $user

或者:

INSERT INTO db (role,rolesub,user) VALUES ('$varRole','$varRoleSub',$user)

或者,如果您感觉额外的情绪,user是您的PK:

INSERT INTO db (role,rolesub,user) VALUES ('$varRole','$varRoleSub',$user)
  ON DUPLICATE KEY UPDATE role = '$varRole', rolesub = '$varRoleSub'

答案 2 :(得分:0)

首先,如果您在与INSERT相同的查询中有一个WHERE,则变量需要与字符串(引号之外)分开。 但是 CANT 将一个where子句放入INSERT。

所以你可以改变这一行:

$query = "INSERT INTO db (role,rolesub) VALUES ('$varRole','$varRoleSub') WHERE user = $user";

为:

$query = "INSERT INTO db (role,rolesub) VALUES (" . $varRole . ", " . $varRoleSub . ")";