PHP MYSQLI_ASYNC 插入查询并继续

标签 php mysqli mariadb php-7.2

使用后有没有办法在PHP7.2脚本中继续

$sql = "INSERT INTO `table` SET `a` = 'aaa';
$result = mysqli_query($link,$sql,MYSQLI_ASYNC);
// $result is always 'true'

作为延迟插入的手段?

它现在给出Commands out of sync; you can't run this command now当我的脚本继续并执行下一个查询时。

我正在使用 innodb 所以一个 INSERT DELAYED不起作用,尽管我正在从 PHP 脚本的角度寻找相同的行为。 (部署查询,不要等待它被处理)

我是否需要使用单独的脚本和消息代理(例如 RabbitMQ)来实现 InnoDB 数据库?

最佳答案

是的,MYSQLI_ASYNC将立即从 mysqli_query() 返回.

但是当您运行下一个查询时,MySQL/MariaDB session 可能仍然很忙,这会给您一个“命令不同步”错误。

所以,你要照顾

  • 在运行进一步查询之前等待(未知)时间
  • 不打电话 mysqli_close()在该 session 上直到异步查询完成,否则连接 barfs
  • 甚至不要让 PHP 脚本结束,因为这会调用 mysqli_close()隐含地,据我所知。

  • 结论是:不要用MYSQLI_ASYNC ,除非您处于非常不常见的环境中,该环境使用多个并行连接,永远不会让连接结束,并且不会在同一 session 上触发进一步的查询。

    关于PHP MYSQLI_ASYNC 插入查询并继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49999254/

    相关文章:

    javascript - 在循环中使用 Jquery 检索 HTMl 元素的 PHP 变量值

    php - 如何通过 ajax 将文本区域中的换行符传递给 PHP

    mysql - MariaDB 性能

    php - codeigniter 在上传文件时出现错误?

    php - 如何使用 shell_exec 函数在 PHP 中测试 mysqldump 是否成功

    php - 通过过程或面向对象风格调用函数的区别

    php - 使用 mysqli 从数据库中获取单个结果

    php update ,更新一些值双倍

    mysql - 如何将这两个 SQL 语句合并为一个?

    php - 谁能解释 MariaDB 这种奇怪的行为?