如何将PHP中mysqli_fetch_array代码转换为CodeIgniter实现?
把原生mysqli查询转成CodeIgniter实现的方案
没问题,这就帮你把这段原生mysqli的数据库查询代码转换成CodeIgniter框架的实现,同时还会兼顾框架的安全规范和最佳实践~
先帮你理清楚原代码的核心功能:它会计算tkelas表中kelas_id的总数,除以tuser表中对应matpel_id = $idmatpel的user_id总数,最后对结果做向上取整,得到最终的jumlah值。
下面给你两种可行的实现方式:
方式一:使用CodeIgniter Query Builder(推荐)
这种方式更贴合CI的开发规范,可读性更强,也更容易维护:
// 第一步:先获取对应matpel_id的用户总数 $user_count = $this->db->where('matpel_id', $idmatpel)->count_all_results('tuser'); // 处理除数为0的边界情况(避免运行报错) if ($user_count === 0) { $cocok_kelas_maksimal = ['jumlah' => 0]; // 你可以根据业务需求调整这个默认值 } else { // 第二步:计算kelas总数除以用户总数的向上取整值 // 第二个参数false是告诉CI不要转义这个SELECT语句里的计算表达式 $this->db->select('CEIL(COUNT(kelas_id)/' . $user_count . ') as jumlah', false); $query = $this->db->get('tkelas'); // 获取结果数组,和原代码的mysqli_fetch_array效果一致 $cocok_kelas_maksimal = $query->row_array(); }
方式二:使用原生查询(保留原SQL结构)
如果你想尽量保留原SQL的结构,可以用CI的原生查询方法,同时通过参数绑定避免SQL注入风险:
// 用?作为占位符,后面传入参数数组,CI会自动处理转义 $sql = "SELECT CEIL(count(kelas_id)/(select count(user_id) from tuser where matpel_id = ?)) as jumlah from tkelas"; $query = $this->db->query($sql, [$idmatpel]); // 获取结果数组 $cocok_kelas_maksimal = $query->row_array();
两种方式最终得到的$cocok_kelas_maksimal都是包含jumlah键的关联数组,和原代码的输出效果完全一致。
内容的提问来源于stack exchange,提问作者241196
相关产品推荐
相关产品推荐

