我最近在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?还是我在这里想念其他东西?
答案 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);