gpt4 book ai didi

php - multi_query 在 mysqli 中无法通过 sphinxql 更新实时 sphinx 索引

转载 作者:行者123 更新时间:2023-11-29 01:56:16 25 4
gpt4 key购买 nike

我们正在使用 Sphinx 实时索引并通过 PHP 的 mysqli 驱动程序与它们通信。单个查询工作正常,但我们正在尝试使用 multi_query 实现批量更新过程。

查询看起来像这样:

UPDATE rt SET rank = 1 WHERE id = 881523;
UPDATE rt SET rank = 2 WHERE id = 881727;
UPDATE rt ...

(这是在用分号内爆之后,为了便于阅读添加了换行符)

我们得到的错误是:

sphinxql: syntax error, unexpected ';', expecting $end near ';UPDATE rt SET rank = 2 WHERE id = 881727'

如果我将查询复制/粘贴到 mysql CLI 客户端,没问题:

mysql> UPDATE rt SET rank = 1 WHERE id = 881523;UPDATE rt SET rank = 2 WHERE id = 882884;UPDATE rt SET rank = 3 WHERE id = 881727;
Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.01 sec)

这是 PHP 代码。 $conn 是来自 http://foolcode.github.io/SphinxQL-Query-Builder/ 的 Connection 类的一个实例,但我们正在使用 $conn->getConnection() 直接处理底层 mysqli 连接:

$query = implode(';', $queries);
if($conn->getConnection()->multi_query($query)) {
do { }
while($conn->getConnection()->next_result());
}
if($conn->getConnection()->error) {
error_log("query: " . $query);
error_log($conn->getConnection()->error);
die();
}

我尝试使用 SphinxQL 查询生成器连接类中的 multiQuery() 函数,结果相同。

声称分号是意外的错误消息对我来说似乎是最奇怪的部分。如果它想要 $end,是否意味着它不支持多个查询?如果它愿意通过 mysql 客户端进行相同的查询,为什么不呢?

$php -v
PHP 5.5.20 (cli) (built: Dec 29 2014 18:02:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

最佳答案

您收到的错误消息来自 searchd 服务器,因为它期望多个命令与 ;

查询在 CLI 中工作,因为 mysql 客户端 本身将其拆分为单独的查询并将它们一个接一个地发送到服务器(请参阅分隔符选项)。 https://mariadb.com/kb/en/mariadb/documentation/clients-and-utilities/mysql-client/delimiters-in-the-mysql-client/

mysqli,有类似的查询功能 http://php.net/manual/en/mysqli.multi-query.php这是硬编码使用;显然。事实证明, sphinx 不支持更新查询,仅支持查询 - 请参阅对主要问题的评论。

关于php - multi_query 在 mysqli 中无法通过 sphinxql 更新实时 sphinx 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com