【问题标题】:Comparing dates mysql/php doesn't work比较日期 mysql/php 不起作用
【发布时间】:2017-03-15 16:24:33
【问题描述】:

我有问题。我有一个 SQL 语句,它适用于 phpMyAdmin,但在 php 上它给出了一个空值。

具有正确值的 SQL 语句:

SELECT * FROM `CON_DECKEL` WHERE fecha < (SELECT STR_TO_DATE('2017-03-15T15:53','%Y-%m-%dT%H:%i')) LIMIT 3;

空值的 PHP 代码:

$sql = "SELECT * FROM `CON_DECKEL` WHERE fecha < (SELECT STR_TO_DATE('2017-03-15T15:53','%Y-%m-%dT%H:%i')) LIMIT 3;";

echo htmlspecialchars($sql);

if ($resultado = $conn->query(htmlspecialchars($sql))) {
    $query_success = true;
    $valores = array();
    var_dump($valores);
    while ($row = $resultado->fetch_object())
    {
        array_push($valores, array($row->canal1, $row->canal2, $row->canal3, $row->canal4, $row->fecha));
    }
    $resultado->close();
}
var_dump($valores);
$conn->close();
} else {
$msg = "Error de conexión: " . $conn->connect_error;
}

我得到带有“echo htmlspecialchars($sql);”的SQL语句,我将这句话粘贴到PHPMyAdmin上,它运行良好。

谁能帮帮我?我不知道为什么它在 PHP 上不起作用,我也不知道如何修复它。

谢谢! :)

【问题讨论】:

  • 好的,请问如何解决?
  • @Imrik,你明白问题出在哪里了吗?你觉得你会怎么解决?
  • 而不是var_dump() 输出一些有用的错误消息将ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 添加到脚本的顶部。这将强制任何mysqli_ 错误生成一个您不能错过或忽略的异常。
  • 哦,是的,我看到了问题所在。对不起,谢谢! :)
  • query(htmlspecialchars($sql) 我猜你想避免sql注入;我说的对吗?

标签: php mysql sql


【解决方案1】:

看到您自己弄清楚了问题所在,我只是添加一个答案以澄清一些事情。

使用htmlspecialchars() 非常好,但只能用于用户提交的值。

失败的原因是你在完整查询中使用它,将&amp;lt; 转换为&amp;lt;,这是 SQL 无法理解的。

【讨论】:

  • 我认为他们可能试图避免可能的 sql 注入; 蜘蛛侠的感觉令人刺痛。如果是这样,他们就做得不对。
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2019-09-18
相关资源
最近更新 更多