我有一个查询应显示特定日期的所有内容,例如“向我显示2020年1月1日至今的所有文章”。
日期在unix中。而且我正在使用PHP 7.2。
如果我使用bindParam而不是实数,它会显示该日期或更早的内容。
如果我只输入数字(Unix日期),则显示内容确定,表示内容全部在日期范围内。
$y = $conectarDB->prepare("
SELECT DISTINCT SQL_CACHE
contenidos.contenidoID AS contID,
titulo,
fecha,
tipoContenidoID
WHERE fecha > ?
ORDER BY contenidoID DESC
");
$y->bindParam(1, $fecha);
$y->execute();
$resultado = $y->fetchAll(PDO::FETCH_ASSOC);
为了进行排序,我将日期($ fecha变量)强制为整数,以防万一问题是它被解释为字符串:
$fecha = (int)$fecha;
MySQL或PHP均显示任何错误,并且执行了查询,但同时显示了较旧的结果,未遵循该范围。
以防万一将来对某人有所帮助...
问题是数据库字段是字符类型,而不是整数。
因此,即使在PHP中进行了显式声明,MySQL仍将其内容视为字符串。
它被读为:
$y = $conectarDB->prepare("
SELECT DISTINCT SQL_CACHE
contenidos.contenidoID AS contID,
titulo,
fecha,
tipoContenidoID
WHERE fecha > '1577847600'
ORDER BY contenidoID DESC
");
而不是:
$y = $conectarDB->prepare("
SELECT DISTINCT SQL_CACHE
contenidos.contenidoID AS contID,
titulo,
fecha,
tipoContenidoID
WHERE fecha > 1577847600
ORDER BY contenidoID DESC
");
所以,不只是使用:
$y->bindParam(1, $fecha);
我将其更改为:
$y->bindParam(1, $fecha, PDO::PARAM_INT);
使MySQL理解它确实是整数。