查询mysql中的日期什么都没有返回?

时间:2016-10-02 18:20:48

标签: php mysql timestamp

我正在尝试查询具有类似值的数据库表

id = 1
tablename = 1 (bigint)
timestampstart = 2011-08-06 13:54:17 (timestamp)
timestampend = 2011-08-06 14:54:17 (timestamp)

所以我正在使用此函数尝试返回我提供的时间戳位于开始和结束时间戳之间的数据库名称

function getDatabase($timestamp){
    $link = new MySQLi($host, $root, $password, $database);
    $name = '';

$result = $link->query("SELECT `tablename` FROM `datas` WHERE `timestampstart` =< '$timestamp' AND `timestampend` >= '$timestamp'");
if($link->error){
    return $link->error;
}
if($result->num_rows > 0){
    while($row = $result->fetch_assoc()){
        $name .= $row['tablename'];
    }

    return $name;
}else{
    return 'no table';
}
}

所以我称之为

echo getDatabase('2011-08-06 13:54:50');

我得到的只是'没有桌子' 在我定义表格结构的顶部只有一行,非常感谢您的帮助。感谢您的时间。

1 个答案:

答案 0 :(得分:1)

UNIX_TIMESTAMP()查询中使用SELECT函数来比较时间戳。您的查询应该是这样的:

SELECT `tablename` 
FROM `datas` 
WHERE UNIX_TIMESTAMP(timestampstart) <= UNIX_TIMESTAMP('$timestamp') 
AND UNIX_TIMESTAMP(timestampend) >= UNIX_TIMESTAMP('$timestamp')

或者,(较短的查询)

SELECT `tablename` 
FROM `datas` 
WHERE UNIX_TIMESTAMP('$timestamp') BETWEEN UNIX_TIMESTAMP(timestampstart) AND UNIX_TIMESTAMP(timestampend)

除此之外,我还可以看到范围问题,因为$host$root$password$database在您的函数范围内不可用。使用global或将数据库凭据作为函数参数传递给getDatabase()函数。