PHP如何在只读MySQL服务器中引用交叉连接生成的结果表
只读权限下PHP复用交叉连接结果的实现方法
你不需要在数据库侧创建任何表存储交叉连接结果,只读权限完全不影响结果复用,核心思路是把查询出的结果转移到PHP侧的存储载体中使用即可,具体操作如下:
- 单次请求内复用:执行SQL后把全量结果读取到PHP数组变量中,后续业务逻辑直接调用这个数组即可
对应的实现代码:
后续你在同一段PHP代码的任意位置,需要用到交叉连接的数据时,直接遍历// 建立数据库连接,替换为你实际的连接配置 $conn = mysqli_connect('你的数据库主机', '数据库账号', '数据库密码', '使用的库名'); // 你原本编写的交叉连接查询SQL $sql = "SELECT * FROM club CROSS JOIN team WHERE club.cid=team.clubID"; $queryResult = mysqli_query($conn, $sql); // 将查询结果全部存入PHP数组,结果会暂存在PHP运行内存中供后续调用 $crossJoinRes = []; while ($row = mysqli_fetch_assoc($queryResult)) { $crossJoinRes[] = $row; } // 释放数据库结果集,减少连接资源占用 mysqli_free_result($queryResult);$crossJoinRes数组即可,不需要重复执行查询,也不需要对数据库做任何写入操作。 - 跨请求复用:如果需要在多个不同的用户请求中使用这份结果,不需要写入数据库,直接把
$crossJoinRes序列化后存储到本地文件、PHP内存缓存(如APCu)中即可,下次请求优先读取缓存内容,不需要重复查库。
注意:如果交叉连接的结果集数据量超过10万行级别,记得适当调整PHP的
memory_limit配置,避免出现内存溢出问题;常规业务量级的数据存在PHP数组中,读写性能远高于二次查库。
内容的提问来源于stack exchange,提问作者Veer Thakrar
相关产品推荐
相关产品推荐

