在我的应用程序中,我想打印一份包含最近 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/