php - ZF2 mysql带区间查询

标签 php mysql date zend-framework2

在我的应用程序中,我想打印一份包含最近 5 分钟在线的成员的列表。

我尝试使用下面的代码通过 mysql 间隔创建它;

    $interval = 5;
    $select->where(array('member_last_online > ?' => 'SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)'));

产生此通知;

Notice: Attempting to quote a value without specific driver level support can introduce security vulnerabilities in a production environment. in ..zf_path..

“getSqlSTring()”的输出是;

SELECT "members".* FROM "members" WHERE member_last_online > 'SUBDATE(NOW(), INTERVAL 5 MINUTE)'

如果我直接在表上执行下面的查询,它将返回接受的数据:

SELECT members.* FROM members WHERE member_last_online > SUBDATE(NOW(), INTERVAL 5 MINUTE)

我在这里做错了什么?

最佳答案

您需要将数据库平台传递给 getSqlString() 以避免警告(以便它知道如何引用值):

// assuming $db is the DB adapter instance
echo $select->getSqlString($db->getPlatform()); 

您的主要问题的解决方案是:

$select->where(new \Zend\Db\Sql\Predicate\Expression('SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)'));

或者更易读:

use Zend\Db\Sql\Predicate\Expression;

$select->where(new Expression('SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)'));

关于php - ZF2 mysql带区间查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23107636/

相关文章:

php - 在 Laravel 中生成可填写/可编辑的 PDF

mysql - SQL 按 2 个条件排序

php - 将 Angular 6 应用程序连接到 DreamHost 上托管的 php/mysql 数据库的服务

c++ - 如何模拟时间的流逝来调试程序?

javascript - 如何在 javascript/Node.js 中获取时间?

php - 删除内联样式php中的样式宽度图像

php - url 重定向到 "HOME"页面

php - 如何填充 Android ListView 中的所有列

php - 给数据查询

mysql - 足球队实体关系图