我们正在使用 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代码。是来自http://foolcode.github.io/SphinxQL-Query-Builder/$conn
的 Connection 类的一个实例,但我们正在使用下面的 mysqli 连接直接使用:$conn->getConnection()
$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();
}
我尝试使用multiQuery()
SphinxQL Query Builder 连接类中的函数,结果相同。
声称分号意外的错误消息对我来说似乎是最奇怪的部分。如果它想要 $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