如何在SphinxSearch 3中使用PDO bindParam?

时间:2019-02-04 10:23:06

标签: pdo sphinx sphinxql

我最近在Ubuntu 18上安装了SphinxSearch 3.1.1,目前正在使用PHP 7.2创建一段代码。我在使bindParam工作时遇到麻烦。

这是我的代码:

$mytest = "hello";
$query = $conn->prepare("SELECT *, weight() FROM test WHERE MATCH('\"@title :mytest \"/1')");
$query->bindParam(':mytest', $mytest, PDO::PARAM_STR);
$query->execute();

当我尝试执行它时,结果为空。

但是,当我尝试直接将$ mytest放入语句中时,我得到了预期的结果

$query = $conn->prepare("SELECT *, weight() FROM test WHERE MATCH('\"@title". $mytest ."\"/1')");

这是否意味着,狮身人面像在MATCH()函数中不支持bindParam?还是我在这里想念其他东西?

1 个答案:

答案 0 :(得分:0)

http://php.net/manual/en/pdo.prepare.php的注释

  

参数标记只能代表完整的数据文字。文字,关键字,标识符,任意查询部分都不能使用参数进行绑定。

也就是说,您试图绑定在字符串文字中。从实际意义上讲,PHP(或mysql服务器)将在值周围添加'来进行声明。

...实际上将以sphinxql查询结束:

SELECT *, weight() FROM test WHERE MATCH('"@title 'hellow' "/1')

这显然是错误的!


代替绑定 whole 字符串文字。

$query = $conn->prepare("SELECT *, weight() FROM test WHERE MATCH(:mytest)");
$query->bindParam(':mytest',  '"@title '.$mytest.'"/1', PDO::PARAM_STR);

尽管看起来像是无效的Sphinx“扩展语法”查询,@ field限定词应位于定额之外,

$query->bindParam(':mytest',  '@title "'.$mytest.'"/1', PDO::PARAM_STR);