3 回答
TA贡献1887条经验 获得超5个赞
另一个是尘埃落定,我放弃并定义了一个从 0 到 14 的 sql 查询数组,并将其作为 mysqli->query() 运行。感谢大家的评论和时间。
TA贡献1946条经验 获得超4个赞
请记住,multi_query()将一组 SQL 查询发送到 MySQL 服务器,但仅等待第一个查询的执行。如果您想使用执行 SQLmulti_query()并仅获取最后一个查询的结果而忽略前面的查询,那么您需要执行阻塞循环并将结果缓冲到 PHP 数组中。迭代所有结果,等待 MySQL 处理每个查询,一旦 MySQL 响应,就不再有结果,您可以保留最后获取的结果。
例如,考虑这个函数。它向 MySQL 服务器发送一堆串联的 SQL 查询,然后等待 MySQL 逐个处理每个查询。每个结果都被提取到 PHP 数组中,最后一个可用的数组从函数返回。
function executeMultiQueryAndGetOnlyLastResult(mysqli $mysqli):array {
$mysqli->multi_query('
SELECT "a";
SELECT 2;
SELECT "val";
');
$values = [];
do {
$result = $mysqli->use_result();
if ($result) {
// process the results here
$values = $result->fetch_all();
$result->free();
}
} while ($mysqli->next_result()); // next_result will block and wait for next query to finish on MySQL server
$mysqli->store_result(); // Needed to fetch the error as exception
return $values;
}
显然,将每个查询单独发送到 MySQL 会容易得多。multi_query()非常复杂并且用途非常有限。如果您有许多无法通过 PHP 单独执行的 SQL 查询,那么它会很有用,但大多数时候您应该使用准备好的语句并单独发送每个查询。
TA贡献1854条经验 获得超8个赞
.multi_query()
您可以尝试对操作中的所有查询使用除最后一个之外的所有查询,即返回您想要的 id 的 SELECT 。然后将该 SELECT 作为单个查询运行。
这是解决您的问题的强大解决方案:@
- 变量属于 MySql 连接并在这些连接的生命周期内持续存在。
而且,它可以使您的软件运行干净且可预测。当您需要将结果集返回到程序时,请使用单个查询。
- 3 回答
- 0 关注
- 95 浏览
添加回答
举报