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的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...
<?php /* *算法学习自百度.只是学习和记录 */ header("Content-type:text/html;charset=utf-8"); //1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率 $arr =&n...
源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...
php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...
array_merge是最常用的数组合并方法,+号同样也可以,但是却有很大不同。array_merge遇到相同字符串key,后面数组的key会覆盖前面数组的key,+号正好相反。$a = [ 'one' => 'A on...
PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts { public f...