查询在bindParam中不能正常工作,但在原始输入中可以吗?

问题描述 投票:0回答:1

我有一个查询应显示特定日期的所有内容,例如“向我显示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 pdo bindparam
1个回答
0
投票

以防万一将来对某人有所帮助...

问题是数据库字段是字符类型,而不是整数。

因此,即使在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理解它确实是整数。

© www.soinside.com 2019 - 2024. All rights reserved.