Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于zend的where子句_Php_Mysql_Sql_Zend Framework - Fatal编程技术网

Php 基于zend的where子句

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

我在使用socialEngine DB类(基于zend框架)时遇到了一个奇怪的问题。 我写了这样的东西:

$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)不,强制转换不起作用…好像它不接受字符串,只接受整数。在表架构中日期和类型可能是整数吗?不确定它是否会改变一些东西,但这是需要研究的东西。