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

PHP在WHERE子句中使用$u SESSION[';user';]插入MySQL数据库,php,mysql,session,Php,Mysql,Session,我正在尝试将变量插入数据库,其中用户数据来自$\u会话['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 (ro

我正在尝试将变量插入数据库,其中用户数据来自$\u会话['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());
    }

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


如果您想要执行更新查询,那么可以使用WHERE子句,但是,MySQL错误显示
$\u SESSION['user']
是一个数组,不能直接放入SQL,因此您需要访问它的一个元素,例如
$\u SESSION['user']['id']

INSERT
语句中不能有
WHERE
子句

您可能正在寻找:

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

或者,如果你觉得特别俏皮,并且
user
是你的主键:

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

首先,如果可以在同一查询中使用WHERE作为INSERT,那么变量需要与字符串分开(在引号之外)但是您不能将where子句放入INSERT

所以你可以改变这一行:

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


正如错误消息清楚显示的那样,$\u会话['user']是一个数组。您需要找出该数组中的哪个值是您想要的,并使用适当的键来提取它。您很容易受到攻击。您的占位符完全没有用处,因为您在查询中实际上没有任何实际占位符。谢谢!当我在中处理占位符时,我完全被隔开了。让它与更新一起工作。当我检查数据库时,输入到我的两个字段中的数据出现了:role和:ro…而不是它应该拥有的数据。“在INSERT语句中不能有WHERE子句。”---True,但不是完全True<代码>只有在使用INSERT INTO…SELECT语句时,才能找到包含WHERE子句的INSERT。
$query = "INSERT INTO db (role,rolesub) VALUES ('$varRole','$varRoleSub') WHERE user = $user";
$query = "INSERT INTO db (role,rolesub) VALUES (" . $varRole . ", " . $varRoleSub . ")";