Php 在较新的Zend Framework中选择与中断匹配

Php 在较新的Zend Framework中选择与中断匹配,php,zend-framework,pdo,Php,Zend Framework,Pdo,我们已经针对Zend Framework 1.12.7构建了一个应用程序-我们的一位开发人员安装了一个稍新的版本(1.12.9),Zend_Db_Table_Select(或Zend_Db_Select)的行为发生了一些变化,正在破坏我们的搜索 具体而言,我们有: $select->from("search", array( "*", "bodyScore" => $dbAdapter->quoteInto("MATCH(body) AGAINS

我们已经针对Zend Framework 1.12.7构建了一个应用程序-我们的一位开发人员安装了一个稍新的版本(1.12.9),Zend_Db_Table_Select(或Zend_Db_Select)的行为发生了一些变化,正在破坏我们的搜索

具体而言,我们有:

$select->from("search", array(
        "*",
        "bodyScore" => $dbAdapter->quoteInto("MATCH(body) AGAINST (?)", $search),
        "headingsScore" => $dbAdapter->quoteInto("MATCH(headings) AGAINST (?)", $search),
        "titleScore" => $dbAdapter->quoteInto("MATCH(title) AGAINST (?)", $search),
    ));
$search是字符串,$select是Zend_Db_Table_select,$dbAdapter是Zend_Db_适配器_Pdo_Mysql

在1.12.7中,这将生成以下查询:

SELECT 
  `search`.*, 
  MATCH(body) AGAINST ('neoral') AS `bodyScore`, 
  MATCH(headings) AGAINST ('neoral') AS `headingsScore`, 
  MATCH(title) AGAINST ('neoral') AS `titleScore` FROM `search` ...
在1.12.9中,它生成: 选择
search
*,
搜索
将(正文)与('neoral')匹配
作为
正文分数
搜索
将(标题)与('neoral')匹配作为
标题得分
搜索
将(标题)与('neoral')匹配作为
标题核心
搜索

我理解这背后的原则,它通常是更正确的语法。但是,对于这个特定的查询,它会导致列
MATCH(body)反对('neoral')
未在“field\u list”错误中找到


构造查询以使其在1.12.9中工作的方法(希望更正确)是什么?

在本例中,您将使用
Zend\u Db\u Expr
。例如,在您的代码中:

$select->from("search", array(
    "*",
    "bodyScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(body) AGAINST (?)", $search)),
    "headingsScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(headings) AGAINST (?)", $search)),
    "titleScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(title) AGAINST (?)", $search)),
));