我试图将变量插入到我的数据库中,其中用户数据来自$ _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子句在哪里失败。
任何帮助都将非常感谢!!!
答案 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 . ")";