Php 在较新的Zend Framework中选择与中断匹配
我们已经针对Zend Framework 1.12.7构建了一个应用程序-我们的一位开发人员安装了一个稍新的版本(1.12.9),Zend_Db_Table_Select(或Zend_Db_Select)的行为发生了一些变化,正在破坏我们的搜索 具体而言,我们有: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
$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)),
));