我在sql查询中传递了php日期函数以查找结果,但我的日期函数不起作用 在此处输入代码

我在sql查询中传递了php日期函数以查找结果,但我的日期函数不起作用 在此处输入代码,php,mysql,sql,Php,Mysql,Sql,试试这个 enter code here<?php public function totalExpense(){ $todays = date('d-m-y'); $sqlQuery = "SELECT SUM(amount) as value FROM price WHERE type='expense' AND time=".$todays; $sth = $this->dbh->query($sqlQuery); $sth->s

试试这个

enter code here<?php  public function totalExpense(){
    $todays = date('d-m-y');
    $sqlQuery = "SELECT SUM(amount) as value FROM price WHERE type='expense' AND time=".$todays;
    $sth = $this->dbh->query($sqlQuery);

    $sth->setFetchMode(PDO::FETCH_OBJ);

    $allData=  $sth->fetchAll();
    return $allData;
} ?>
这是准备语句()的正确方法。 对于MySql(来自您的标签),正确的格式是Y-m-d

[编辑] 为什么它是链接手册中的“正确方法”:

  • 查询只需要分析(或准备)一次,但可以使用相同或不同的参数执行多次。当
    准备好查询后,数据库将进行分析、编译和
    优化其执行查询的计划。对于复杂的查询,请执行以下操作
    这一过程可能会占用足够的时间,从而显著减慢速度
    如果需要多次重复同一查询,则应用程序
    具有不同的参数。通过使用预先准备好的语句,
    应用程序避免重复分析/编译/优化周期。这 意味着准备好的语句使用更少的资源,因此可以运行
    更快
  • 编制报表的参数不需要引用;司机会自动处理这个问题。如果应用程序专门使用 准备好语句后,开发人员可以确保没有SQL注入
    将发生(但是,如果正在生成查询的其他部分
    有了未切换的输入,SQL注入仍然是可能的)
取代

$sqlQuery = "SELECT SUM(amount) as value FROM price WHERE type='expense' AND time=".$todays;

由于时间是varchar,它应该在'或“

数据库中的
time
列的格式是什么?请尝试在查询中使用单引号,即
time='“$todays.”“
…但更好的是,学习如何使用参数化查询。此外,请使用非歧义格式,如y-m-d。现在如果你通过今天的日期(2018年5月11日),DB可能不知道你指的是5月11日还是11月5日-可能是d-m-y或m-d-y,mysql无法知道你的真实意图。时间列格式是varchar“时间列格式是varchar”…所以这是你的下一个错误。永远不要将日期和时间存储为文本。日期/时间不是文本。使用正确的datetime列类型。然后你可以对它运行查询,并正确地进行排序/过滤,而这仅仅是日期的字符串表示是无法做到的。是的……但你也应该添加一个解释,否则OP将无法理解为什么这是正确的。然后你会得到我的支持票。还请注意最近的评论,即日期作为文本存储在数据库中…值得一提的是,需要更正too@fahimhasan也许它适用于这种特殊情况,但它忽略了我的评论和杰克的回答中指出的你设计中的所有缺陷。将来您可能会有一些新的需求。例如,尝试编写一个查询来查找给定日期后发生的费用总额……使用SQL是不可能的(或者至少如果没有大量不必要且效率低下的字符串到日期的动态转换,就不可能做到这一点)因为您无法正确地相互比较日期字符串,以了解哪一个在另一个之前或之后。我重复一遍:日期不是文本。
$sqlQuery = "SELECT SUM(amount) as value FROM price WHERE type='expense' AND time=".$todays;
$sqlQuery = "SELECT SUM(amount) as value FROM price WHERE type='expense' AND time='{$todays}'";