查询不能按预期使用 bindParam 但它可以使用原始输入?
Query does not work as expected with bindParam but it does with raw input?
我有一个查询应该显示特定日期的所有内容,例如 "show me all articles from 01-01-2020 to now"。
日期在 unix 中。我正在使用 PHP 7.2.
如果我使用 bindParam 而不是实际数字,它也会显示该日期及更早的内容。
如果我只输入数字(unix日期),它显示内容ok,意味着内容都在日期范围内。
这是我的问题:
$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明白它确实是一个整数
我有一个查询应该显示特定日期的所有内容,例如 "show me all articles from 01-01-2020 to now"。
日期在 unix 中。我正在使用 PHP 7.2.
如果我使用 bindParam 而不是实际数字,它也会显示该日期及更早的内容。
如果我只输入数字(unix日期),它显示内容ok,意味着内容都在日期范围内。
这是我的问题:
$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明白它确实是一个整数