如何将 PDO bindParam 用于 SphinxSearch 3?
How to use PDO bindParam for SphinxSearch 3?
我最近在 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')");
这是否意味着,sphinx 不支持 MATCH() 函数中的 bindParam?还是我在这里遗漏了其他东西。
来自 http://php.net/manual/en/pdo.prepare.php 的注释
Parameter markers can represent a complete data literal only. Neither part of literal, nor keyword, nor identifier, nor whatever arbitrary query part can be bound using parameters.
即您试图在字符串文字中进行绑定。在实际意义上 PHP(或 mysql 服务器)将在值周围添加 ' 以进行声明。
... 实际上会以 sphinxql 查询结束:
SELECT *, weight() FROM test WHERE MATCH('"@title 'hellow' "/1')
这显然是错误的!
而是绑定 整个 字符串文字。
$query = $conn->prepare("SELECT *, weight() FROM test WHERE MATCH(:mytest)");
$query->bindParam(':mytest', '"@title '.$mytest.'"/1', PDO::PARAM_STR);
虽然这看起来像一个无效的 Sphinx 'extended syntax' 查询,@field 限定符应该在法定人数之外,
$query->bindParam(':mytest', '@title "'.$mytest.'"/1', PDO::PARAM_STR);
我最近在 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')");
这是否意味着,sphinx 不支持 MATCH() 函数中的 bindParam?还是我在这里遗漏了其他东西。
来自 http://php.net/manual/en/pdo.prepare.php 的注释
Parameter markers can represent a complete data literal only. Neither part of literal, nor keyword, nor identifier, nor whatever arbitrary query part can be bound using parameters.
即您试图在字符串文字中进行绑定。在实际意义上 PHP(或 mysql 服务器)将在值周围添加 ' 以进行声明。
... 实际上会以 sphinxql 查询结束:
SELECT *, weight() FROM test WHERE MATCH('"@title 'hellow' "/1')
这显然是错误的!
而是绑定 整个 字符串文字。
$query = $conn->prepare("SELECT *, weight() FROM test WHERE MATCH(:mytest)");
$query->bindParam(':mytest', '"@title '.$mytest.'"/1', PDO::PARAM_STR);
虽然这看起来像一个无效的 Sphinx 'extended syntax' 查询,@field 限定符应该在法定人数之外,
$query->bindParam(':mytest', '@title "'.$mytest.'"/1', PDO::PARAM_STR);