我正在研究学习计划。当登录用户尝试从欢迎页面保存学习计划时,下面的SQL查询应该运行。但是,代码没有做任何事情。输入值在提交时消失,没有初始化$result
变量,没有标志更改,并且当我通过NetBeans运行应用程序时没有任何错误打印输出...
// Set up a flag for monitoring the individual queries
$flag = true;
$query = "UPDATE
`modulecodes`
LEFT JOIN `moduletitles` ON `moduletitles`.`modulecodeid` = `modulecodes`.`modulecodeid`
LEFT JOIN `studyplans` ON `studyplans`.`modulecodeid` = `modulecodes`.`modulecodeid`
LEFT JOIN `comments` ON `comments`.`modulecodeid` = `modulecodes`.`modulecodeid`
SET
modulecode = '$moduleCode', moduletitle = '$moduleTitle', studydate = '$moduleStudyDate', numberofstudyhours = '$moduleAllocatedHours', comment = '$studyPlanComments'
WHERE userid = '$userid';";
// Execute the query and put the result in the variable $result
$result = mysqli_query($mysqli, $query);
if (!$result) {
$flag = false;
echo $flag;
echo "Error details for Result: " . mysqli_error($mysqli) . ".";
}
...使用硬编码值(如下所示)和phpMyAdmin中的直接测试,它会运行但会返回0行受影响。 (查询花了0.0069秒。)并且数据库中没有任何变化。所以,我觉得我的结构不好。有人可以指导我如何将查询转换为子查询或更有效和可靠的东西,请或者至少帮助指出我做错了什么?
我怀疑代码的其他部分,但事实是phpMyAdmin中的直接测试告诉我,问题在于SQL语句,除了我已经在其他地方和其他查询中使用了代码的其他部分,它运行细
UPDATE
`modulecodes`
LEFT JOIN `moduletitles` ON `moduletitles`.`modulecodeid` = `modulecodes`.`modulecodeid`
LEFT JOIN `studyplans` ON `studyplans`.`modulecodeid` = `modulecodes`.`modulecodeid`
LEFT JOIN `comments` ON `comments`.`modulecodeid` = `modulecodes`.`modulecodeid`
SET
modulecode = 'P00100', moduletitle = 'Java', studydate = '2017/04/10', numberofstudyhours = '1', comment = 'Java'
WHERE userid = 20;
数据库代码:
CREATE TABLE `comments` (
`commentid` int(10) NOT NULL,
`modulecodeid` int(10) NOT NULL,
`comment` text,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `modulecodes`
--
CREATE TABLE `modulecodes` (
`modulecodeid` int(10) NOT NULL,
`userid` int(10) NOT NULL,
`modulecode` varchar(10) NOT NULL,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `moduletitles`
--
CREATE TABLE `moduletitles` (
`moduletitleid` int(10) NOT NULL,
`modulecodeid` int(10) NOT NULL,
`moduletitle` varchar(100) NOT NULL,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `studyplans`
--
CREATE TABLE `studyplans` (
`studyplan` int(10) NOT NULL,
`modulecodeid` int(10) NOT NULL,
`studydate` date NOT NULL,
`numberofstudyhours` int(10) NOT NULL,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE `users` (
`userid` int(10) NOT NULL,
`firstname` varchar(100) NOT NULL,
`lastname` varchar(100) NOT NULL,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
答案 0 :(得分:0)
要测试关系,请查看是否返回了您希望更新的行:
var vIn = "true";
var vOut = vIn.toLowerCase()=="true"?1:0;
如果任何列为NULL(未找到连接的表行),则更新将失败。