php - 尝试更新小时表中的 time_out 时出现语法错误

标签 php mysql

我试图将 time_out 时间更新为捕获用户 time_in 的最后一个 id,我的以下代码给了我这个错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

这是我的 logout.php

session_start();
if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) {
        header("location: index.php");
        exit();
}   

date_default_timezone_set('America/New_York');
$dt = date("Y-m-d h:i:s");      
$id = $_SESSION['MEMBER_ID'];
$sql = "UPDATE hours SET time_out = '".$dt."' WHERE member_id IN (SELECT MAX(hours_id) FROM hours WHERE member_id = '".$id."'";
mysql_query($sql) or die(mysql_error());

    //Unset the variables stored in session
    unset($_SESSION['MEMBER_ID']);
    unset($_SESSION['LOGIN_NAME']);
    unset($_SESSION['PASS']);

这是架构

 `hours_id` int(11) NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL,
  `member_name` varchar(32) NOT NULL,
  `team` varchar(32) NOT NULL,
  `time_in` datetime NOT NULL,
  `time_out` datetime DEFAULT NULL,
  `dated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    unset($_SESSION['TEAM']);   

某人的这个查询可能出了什么问题?

最佳答案

像这样关闭查询中的圆括号吗?

$sql = "UPDATE hours SET time_out = '".$dt."' WHERE member_id IN (SELECT MAX(hours_id) FROM hours WHERE member_id = '".$id."')";

注意:停止使用已弃用的 mysql_* 版本。有更好的选择,例如 mysqli 或 pdo

编辑

通过单个查询,您可以像这样解决问题

$sql = "UPDATE hours SET time_out = '".$dt."' WHERE member_id IN (SELECT MAX(hours_id) FROM (SELECT MAX(hours_id) FROM hours WHERE member_id = '".$id."') AS t)";

请告诉我它是否适合您

关于php - 尝试更新小时表中的 time_out 时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671027/

相关文章:

php - 使用单个命令备份本地数据库并恢复到远程服务器

php - 在 codeigniter 中组合日期和时间列进行查询

mysql - 在 Mysql 中获取那些 id 不同的行

php - to_route() 复制基本路径

java - c/c++/java/PHP有闭包吗?

php - 通过 AJAX、PHP 和 MYSQL 传递参数时返回多个值

mysql - 忘记添加主键

使用过程插入行时 PHP MYSQL PDO lastInsertId 返回 0

php - 如何在mysql查询中插入$_GET[variable]

sql - 非事务表中的原子事务