Zend framework 在mysql查询中使用php-DateTime对象

Zend framework 在mysql查询中使用php-DateTime对象,zend-framework,zend-db,php,Zend Framework,Zend Db,Php,我正试图创建一个查询,从我的数据库中提取卖家的信息,但前提是他们的店铺在过去3天内已经开业。我能想到的计算查询日期的最简单方法是使用newdatetime()对象。当我输出代码来测试它时,它是MySQL用来查询它的合适字符串,但是每当我尝试绑定变量时,我都会得到一个错误。我正在使用Zend_Db查询(PDO适配器) 行动: public function indexAction() { $dateMod = new DateTime(); $dateMod->modify(

我正试图创建一个查询,从我的数据库中提取卖家的信息,但前提是他们的店铺在过去3天内已经开业。我能想到的计算查询日期的最简单方法是使用
newdatetime()
对象。当我输出代码来测试它时,它是MySQL用来查询它的合适字符串,但是每当我尝试绑定变量时,我都会得到一个错误。我正在使用Zend_Db查询(PDO适配器)

行动:

public function indexAction()
{
    $dateMod = new DateTime();
    $dateMod->modify('-2 days');
    $dateMod->format('Y-m-d H:i:s');


    // get sellers initialized in last 3 days
    $sellerTable = new Application_Model_DbTable_Sellers();
    $select = $sellerTable->select()->setIntegrityCheck(false);
     $select->from(array('s' => 'seller'),array('sellerID', 'businessName'));
   // select firstName, lastName, picture from user table, and businessName and sellerID from seller table.  
   $select->join(array('u' => 'user'), 's.userID = u.userID', array('firstName', 'lastName', 'picture'));
   $select->where('s.active = 1 AND s.contentApproval = 1 AND s.paymentApproval = 1 AND s.featured = 1');
   $select->where('s.launchDate > ?', $dateMod);
   $select->order('s.launchDate DESC');
   $newSellers = $sellerTable->fetchAll($select);
当我将
$dateMod
分配给视图时,它会输出正确的
Y-m-d H:I:s
格式。但当我将其插入查询时,会出现以下错误:

Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY `b`.`launchDate` DESC' at line 2 
如果我以mysql时间戳格式将一个值硬编码到dateMod中,查询工作正常。如何仅访问DateTime对象中时间戳的字符串值
getTimestamp
返回unix格式的时间戳,即使在指定格式之后也是如此。

函数
format()
返回格式化日期,因此您需要将其指定给一个变量,以便在查询中使用:

$dateFormatted = $dateMod->format('Y-m-d H:i:s');

$select->where('s.launchDate > ?', $dateFormatted);

为什么不使用mysql自己的日期函数呢?为什么不使用mysql ADDDATE?我通常避免使用mysql函数来表示日期。我发现客户经常会改变他们对日期函数的看法,将其直接放入SQL意味着在进行更改时需要进行大量编辑。如果我使用PHP,我可以通过传递不同的参数将add time函数更改为sub time函数,并将其分配给站点管理员可以分配的前端功能,并且我可以在视图中非常轻松地使用计算。但是是的,那会有用的。