我的代码中具有以下功能。
private function getFormsOfWords($search){
$query = "SELECT display_term, source_term, occurrence FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, ?)', 2057, 0, 0)";
$stmt = sqlsrv_query($this->db, $query, array($search));
if( $stmt === false ) {
file_put_contents(LOG_DIR.'/search.txt', print_r(sqlsrv_errors(),true), FILE_APPEND);
die();
}
$highlight_words = array();
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$highlight_words[] = $row['display_term'];
}
return $highlight_words;
}
问题在于,当我进入sqlsrv_fetch_array部分时,没有任何结果。
调试器显示已填充$ search变量,并且确实达到了sqlsrv_fetch_array行。
我以完全相同的方式执行的所有其他查询在执行sqlsrv_fetch_array后均成功产生了结果。
我已经用手动替换的参数在数据库本身中测试了$ highlight_words_SQL查询,它工作正常。主要区别在于参数在手动执行时需要带引号才能起作用。我假设sqlsrv_query的param参数以可以满足此要求的方式进行处理,但是我也尝试了以下具有相同空白结果的查询:
$query = "SELECT display_term, source_term, occurrence FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, \"?\")', 2057, 0, 0)";
“ search.txt”错误日志未显示任何内容,其他任何Apache或php日志也未显示。
你知道是什么原因造成的吗?
编辑:
我也尝试了以下排列:
$query = "SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL,' + ? + ')', 2057, 0, 0)";
//Syntax error near 'initialized' in the full-text search condition 'FORMSOF(INFLECTIONAL,security initialized)'.
$query = "SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL,' + \"?\" + ')', 2057, 0, 0)";
//Invalid column name '?'
$query = "SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL,\'' + \"?\" + '\')', 2057, 0, 0)";
//Incorrect syntax near '\'.
此:
SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, '+'"security initialized"'+')', 2057, 0, 0)
或者这个:
SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "security initialized")', 2057, 0, 0)
是目标,因为它们是在SSMS中运行的查询。
答案 0 :(得分:0)
在查询中带引号的字符串中不会替换参数。您需要使用串联构建字符串。
$query = "SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL,' + ? + ')', 2057, 0, 0)";
答案 1 :(得分:0)
此版本的查询有效:
$query = "SELECT display_term, source_term, occurrence
FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL,\"' + ? + '\")', 2057, 0, 0)";