CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程


codeigniter 3 连接 sql server:正确获取查询结果的教程

本教程旨在指导开发者如何在 CodeIgniter 3 (CI3) 框架中使用 SQL Server 数据库驱动时,正确地从查询结果对象中提取数据。文章将详细解释 CI3 数据库查询结果对象的特性,提供 `result_array()` 等关键方法的用法,并通过完整的配置、模型和控制器示例,帮助您高效、准确地获取并处理 SQL Server 的查询结果。

在使用 CodeIgniter 3 (CI3) 框架与 SQL Server 数据库进行交互时,开发者可能会遇到执行数据库查询后,尽管连接成功,但无法直接从查询结果中提取数据的困惑。这通常不是连接或 SQL 语句本身的问题,而是对 CI3 数据库类返回的结果对象理解不足。本文将深入探讨如何在 CI3 中正确地从 SQL Server 查询结果对象中提取数据,并提供详细的配置、模型和控制器示例。

理解 CodeIgniter 数据库查询结果对象

当您在 CodeIgniter 3 中使用 $this->db->query($sql) 执行一条 SELECT 语句时,如果查询成功,CI3 不会直接返回一个包含数据的数组,而是返回一个 CI_DB_sqlsrv_result 类型的数据库结果对象。这个对象封装了查询的所有信息,包括查询到的行数、字段名以及实际的数据。要访问这些数据,您需要调用该结果对象上的特定方法。

关键结果获取方法

CI3 提供了多种方法来从结果对象中获取数据,最常用的是:

  • result(): 返回一个对象数组。每个对象代表一行数据,其属性对应数据库表的字段名。
  • result_array(): 返回一个关联数组的数组。每个内部关联数组代表一行数据,键名对应数据库表的字段名。
  • row(): 返回一个对象,代表查询结果的第一行。
  • row_array(): 返回一个关联数组,代表查询结果的第一行。
  • num_rows(): 返回查询结果的行数。

数据库配置示例 (config/database.php)

首先,确保您的 CodeIgniter 数据库配置正确指向 SQL Server 驱动。以下是一个典型的配置示例:

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'      => '',
    'hostname' => '10.xxx.xxx.x', // 您的 SQL Server IP 地址或主机名
    'username' => 'your_username', // 数据库用户名
    'password' => 'your_password', // 数据库密码
    'database' => 'your_database_name', // 数据库名称
    'dbdriver' => 'sqlsrv', // 关键:指定 SQL Server 驱动
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'), // 生产环境建议关闭调试
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8', // 根据您的数据库编码设置
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE, // 如果需要加密连接,请设置为 TRUE
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    's*e_queries' => TRUE // 建议在开发阶段设置为 TRUE 以便调试
);

模型中的正确数据获取示例 (application/models/Mod_login.php)

在模型中,执行查询后,需要调用结果对象的方法来获取实际数据。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Mod_login extends CI_Model {

    public function __construct() {
        parent::__construct();
        // 您可以在此处加载数据库或其他库
    }

    /**
     * 获取应用列表数据
     * @return array|false 返回应用数据数组,或在查询失败时返回 false
     */
    public function getAplikasiData() {
        $sql = "SELECT id, name, description FROM aplikasi"; // 示例 SQL 语句
        $query = $this->db->query($sql);

        // 检查查询是否成功,query() 方法在执行失败时可能返回 FALSE
        if ($query === FALSE) {
            // 记录错误或进行其他错误处理
            log_message('error', 'SQL Query Failed: ' . $this->db->error()['message']);
            return false;
        }

        // 获取查询结果为关联数组的数组
        // var_dump($query->result_array()); // 调试时可在此处查看结果
        // die(); // 调试时可在此处终止执行

        if ($query->num_rows() > 0) {
            return $query->result_array(); // 返回所有结果行作为关联数组
        } else {
            return []; // 没有结果时返回空数组
        }
    }

    /**
     * 获取单个应用数据 (示例)
     * @param int $id 应用ID
     * @return array|false 返回单个应用数据关联数组,或在查询失败/无结果时返回 false
     */
    public function getSingleAplikasi($id) {
        $sql = "SELECT id, name, description FROM aplikasi WHERE id = ?";
        // 使用占位符 '?' 进行查询绑定,防止 SQL 注入
        $query = $this->db->query($sql, array($id)); 

        if ($query === FALSE) {
            log_message('error', 'SQL Query Failed: ' . $this->db->error()['message']);
            return false;
        }

        if ($query->num_rows() > 0) {
            return $query->row_array(); // 返回第一行结果作为关联数组
        } else {
            return false; // 没有结果时返回 false
        }
    }
}

控制器中的调用示例 (application/controllers/Admin.php)

控制器负责调用模型方法,并将获取到的数据传递给视图。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Admin extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('Mod_login'); // 加载模型
        $this->load->helper('url'); // 加载 URL 辅助函数
        $this->load->library('session'); // 加载 session 库
    }

    public function index() {
        $logged_in = $this->session->userdata('logged_in');

        if ($logged_in === TRUE) {
            redirect('dashboard'); // 如果已登录,重定向到仪表盘
        } else {
            $data['aplikasi'] = $this->Mod_login->getAplikasiData(); // 调用模型方法获取数据

            // 检查模型返回的数据
            if ($data['aplikasi'] === false) {
                // 处理数据库查询失败的情况,例如显示错误消息
                $data['error_message'] = '无法加载应用数据,请稍后再试。';
                $this->load->view('admin/login_error_view', $data); // 加载错误视图
            } else {
                $this->load->view('admin/login_data', $data); // 将数据传递给视图
            }
        }
    }

    public function view_aplikasi($id) {
        $aplikasi_item = $this->Mod_login->getSingleAplikasi($id);

        if ($aplikasi_item === false) {
            show_404(); // 或者显示错误页面
        } else {
            $data['aplikasi_detail'] = $aplikasi_item;
            $this->load->view('admin/aplikasi_detail_view', $data);
        }
    }
}

视图中的数据展示 (application/views/admin/login_data.php)

在视图中,您可以像处理普通数组一样遍历并展示 $aplikasi 数据。

<!DOCTYPE html>
<html>
<head>
    <title>登录页面</title>
    <style>
        body { font-family: Arial, sans-serif; }
        ul { list-style-type: none; padding: 0; }
        li { margin-bottom: 10px; padding: 10px; border: 1px solid #eee; border-radius: 5px; }
        .error-message { color: red; font-weight: bold; }
    </style>
</head>
<body>
    <h1>应用列表</h1>
    <?php if (!empty($aplikasi)): ?>

以上就是CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程的详细内容,更多请关注php中文网其它相关文章!


# word  # html  # php  # 大疆公司营销推广  # 推广策划营销招聘  # 河南seo助手打造  # 龙岗seo博客  # 碑营销推广  # 石嘴山门户网站推广公司  # 江北区网站推广方式  # 内蒙古俄语网站建设公司  # 网店袜子营销推广方案  # 内蒙古移动营销推广  # 设置为  # 字段名  # 可在  # 您可以  # 象中  # 数据库查询  # 加载  # 您的  # 查询结果  # AI-powered  # red  # ai  # session  # access  # app  # 编码 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务  不吃碳水化合物是健康减肥的好办法吗  三星M34录音变声问题_Samsung M34麦克风调整  Symfony路由参数转换器:实体存在性验证与错误处理策略  邦丰播放器频道搜索设置  汽水音乐网页端访问 汽水音乐官方网页直达  poki官网最新入口 poki小游戏大全入口  从J*a应用程序中导出MySQL表数据的技术指南  《全民k歌》音乐怎么下载到本地2025  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  mail.qq.com登录入口 QQ邮箱网页版直达  C++ switch case字符串_C++如何实现字符串switch匹配  解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  excel怎么计算平均值 excel平均函数*ERAGE使用教学  MongoDB聚合管道:高效统计列表中各项的文档数量  深入理解J*aScript异步操作:setTimeout与调用栈的真相  WooCommerce 新客户订单自动添加管理员备注教程  Pydantic 中“schema”字段命名冲突的解决方案  J*aScript调试技巧_性能分析与内存快照  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  《爱笔思画x》魔棒工具抠图教程  《梦想世界:长风问剑录》药师一图流分享  解决jQuery多计算器输入字段冲突的教程  《三国:谋定天下》平民全阶段通用阵容  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  智慧职教mooc平台登录网址 智慧职教mooc官网直达  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  excel怎么制作考勤表 excel考勤模板与函数公式讲解  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  4399造梦西游3无敌版_4399游戏入口  盲鳗善于分泌黏液猜猜主要用来做什么  《土豆雅思》修改密码方法  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  智学网成绩单查询系统网_智学网学生平台登录  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  diskgenius分区工具如何设置Bios启动项  小红书网页版怎么进 小红书网页版通用入口  PDF如何批量加注释_PDF多文件批注高亮操作教程  餐馆菜篮选购指南  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.