Php 基于zend的where子句
我在使用socialEngine DB类(基于zend框架)时遇到了一个奇怪的问题。 我写了这样的东西:Php 基于zend的where子句,php,mysql,sql,zend-framework,Php,Mysql,Sql,Zend Framework,我在使用socialEngine DB类(基于zend框架)时遇到了一个奇怪的问题。 我写了这样的东西: $statusTable = Engine_Api::_()->getDbtable('actions', 'activity'); $myPosts = $statusTable->fetchAll($statusTable->select() ->where('subject_id = ?',$id) ->where('comment_cou
$statusTable = Engine_Api::_()->getDbtable('actions', 'activity');
$myPosts = $statusTable->fetchAll($statusTable->select()
->where('subject_id = ?',$id)
->where('comment_count > ?',0)
->where('type = ?',$type)
->where('date > ?',$newer_than)
->order('date DESC')
->limit(intval($num_items)));
SELECT `engine4_activity_actions`.*
FROM `engine4_activity_actions`
WHERE (subject_id = 5) AND (comment_count > 0) AND (type = ) AND (date > )
ORDER BY `date` DESC LIMIT 10
这是一个插件的一部分,问题是生成的查询是这样的:
$statusTable = Engine_Api::_()->getDbtable('actions', 'activity');
$myPosts = $statusTable->fetchAll($statusTable->select()
->where('subject_id = ?',$id)
->where('comment_count > ?',0)
->where('type = ?',$type)
->where('date > ?',$newer_than)
->order('date DESC')
->limit(intval($num_items)));
SELECT `engine4_activity_actions`.*
FROM `engine4_activity_actions`
WHERE (subject_id = 5) AND (comment_count > 0) AND (type = ) AND (date > )
ORDER BY `date` DESC LIMIT 10
您可以看到$type和$newer\u than已经消失,即使它们有值($type='status',$newer\u than='01/01/2000'))
编辑:
它似乎只响应整数而不响应字符串,如果我将“status”替换为0,它将显示在查询中
服务器运行在PHP5.3.2上,where()方法上有第三个可选参数,它是参数的类型。根据您的DB适配器,它可能会告诉Zend_DB_Select查询生成器一件重要的事情。 所以你可以试试
->where('subject_id=?',$subject,'TEXT')
ZF API还指出,“请注意,在查询中对字符串以外的值使用命名绑定更为正确”,这有助于查询生成器获取参数的真实类型,因此您也可以这样尝试:
$myPosts = $statusTable->fetchAll($statusTable->select()
->where('subject_id=:psubject')
(...)
,array('psubject'=>$subject));
真奇怪。作为调试步骤,如果您硬编码$type和$u-than(->其中('type=?','status')的值,会发生什么情况。在运行此查询之前,请尝试打印$type和$newer\u,以验证它们是否有值。这与此相同,我注意到,如果我将$type替换为0(例如,查询中的值),则只会在字符串中发生这种情况。是不允许使用字符串还是我应该以某种方式将其转义?将
$type
转换为字符串。它可能不起作用,但尝试一下->,其中('type=?',(string)$type)代码>不,强制转换不起作用…好像它不接受字符串,只接受整数。在表架构中日期和类型可能是整数吗?不确定它是否会改变一些东西,但这是需要研究的东西。