Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP下的mysql_查询是一个阻塞函数吗?_Php_Mysql - Fatal编程技术网

PHP下的mysql_查询是一个阻塞函数吗?

PHP下的mysql_查询是一个阻塞函数吗?,php,mysql,Php,Mysql,假设我正在服务器上使用mysql\u query执行多个查询。每个查询的结果都会影响后续查询。在控制转移到下一个之前,mysql\u query的每个调用是否都会被完全执行 编辑:我忘了提一下,我没有使用事务存储引擎。是的,MySQL服务器必须返回数据并完成查询,然后PHP才能执行下一个操作,无论是分配返回值还是执行下一行代码 mysql_query( "INSERT INTO y VALUES (x,1)" ); mysql_query( "SELECT x FROM y WHERE z=1"

假设我正在服务器上使用
mysql\u query
执行多个查询。每个查询的结果都会影响后续查询。在控制转移到下一个之前,
mysql\u query
的每个调用是否都会被完全执行


编辑:我忘了提一下,我没有使用事务存储引擎。

是的,MySQL服务器必须返回数据并完成查询,然后PHP才能执行下一个操作,无论是分配返回值还是执行下一行代码

mysql_query( "INSERT INTO y VALUES (x,1)" );
mysql_query( "SELECT x FROM y WHERE z=1" );
mysql_query( "UPDATE y SET x=x+1 WHERE z=1" );
mysql_query( "SELECT x FROM y WHERE z=1" );

x将是1,然后是2,在执行第四条语句时,2将返回到脚本。不可能在单个PHP脚本中并行运行查询-这需要在另一种语言(即Java)中并行执行或线程化。

在相同的脚本和线程中,是的。来自其他PHP脚本的其他查询可能同时运行,但来自PHP脚本的所有查询都将被阻止


在继续之前,您将始终能够评估返回值。

当您不使用事务时,MySQL将立即提交每个查询,而不管您使用的是哪种编程语言。因此,是的,您可以依赖于查询的顺序性。

正如其他人已经提到的,PHP是一种顺序语言(即一条语句将在下一条语句之后执行),没有对线程的明确支持。但是,您可以使用它,它只会阻塞到返回结果的第一行(而不是像mysql\u query那样等待所有行)。

这并没有回答原始问题,而是与问题标题相关:

如果您想要非阻塞,有一个准选项可以工作:

  • 仅适用于插入件
  • 仅适用于MyISAM、内存和归档表
  • 插入时会有一些开销/可能的性能损失
  • 这是为了在查询中使用insertdelayed语法。然后,PHP将只等待mysql响应“OK”,而不会等待实际的插入发生


    多线程示例:注意:默认情况下,pcntl未启用,在Windows平台上无法工作。请注意,MySQL 5.6中已弃用延迟关键字,MySQL 8.0+中不再支持该关键字。