mysqli提供了异步执行sql的功能,类似于select轮询机制。先提交SQL到预发布,再去轮询查询是否ok。query的时候加上MYSQLI_ASYNC选项,query就直接提交到mysql,但是本身不等待执行结果。mysqli不亏是加强版的mysql扩展,可惜不是pdo
<?php
/**
* 执行SQL
* @param $sql
* @return mysqli
*/
function query($sql)
{
// 1.创建连接
$servername = "localhost";
$username = "root";
$password = "root";
$database = "test";
$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 2.异步提交SQL
$conn->query($sql, MYSQLI_ASYNC);
// 3.返回SQL连接
return $conn;
}
// 1.保存全部的Conn变量
$all_conn = [];
// 2.循环提交异步SQL
$i = 4;
while ($i--) {
$sql = "select scenes_name_cn from erp_allocation_scenes where id = $i";
$all_conn [] = query($sql, MYSQLI_ASYNC);
}
// 3.循环等待全部的结果
$allResult = [];
do {
$links = $errors = $reject = $all_conn;
if (!mysqli_poll($links, $errors, $reject, 1)) {
continue;
}
foreach ($all_conn as $conn) {
if ($result = $conn->reap_async_query()) {
$allResult[] = $result->fetch_row();
if (is_object($result)) {
$result->free();
}
} else {
throw new mysqli_sql_exception(sprintf("MySQLi Error: %s", mysqli_error($conn)));
}
}
} while (count($allResult) == 5);
// 4.输出查询结果
print_r($allResult); 理解抽象类最快的方法就是使用场景,最近在看布尔PHP视频中看到这样的讲解非常容易懂,分享出来。 假设如下场景: 团队准备开发某网站,表建好了,页面设计好了. ...
function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
(1).学习目标: 了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习: (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...
最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...
<?php /** * @throws Exception */ function curl() { throw new \Exception('err...