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 】


相关推荐: 抖音网页版官方链接 抖音网页版官网链接入口  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  mysql中如何分析索引使用情况_mysql索引使用分析方法  TikTok视频播放中断怎么办 TikTok播放异常修复方法  qq音乐官方网站入口_qq音乐在线听歌网页版链接  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  学习通网页版个人登录_学习通网页版个人账户登录入口  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  三星M34录音变声问题_Samsung M34麦克风调整  江苏大剧院会员卡购买步骤  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  J*aScript包管理器_Npm与Yarn对比  iPhone12是否要更新ios16  海外搜索引擎推广效果怎么样,怎么分析效果!  百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  Python中处理嵌套字典与列表的数据提取与过滤教程  《盗墓笔记手游》技能介绍  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  天堂漫画网页版在线阅读 天堂漫画手机版入口  申通快递查询 申通物流快递单实时查询入口  响应式设计中动态背景颜色条的实现指南  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  PPT智能排版生成入口 免费PPT内容自动生成平台  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  《异星探险家》古怪的物品作用介绍  VS Code快捷键when上下文子句的妙用  windows10怎么开启wsl_windows10安装linux子系统教程  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  在Flask应用中安全高效地更新SQLAlchemy用户数据  《星露谷物语》克林特好感度事件介绍  Mac怎么关闭按键声音_Mac键盘打字音效设置  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  c++如何使用std::thread::join和detach_c++线程生命周期管理  包子漫画在线观看入口 包子漫画网正版全集链接  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  4399正版网页版入口高清直达链接  优化Flask模板中SQLAlchemy查询迭代标签:处理字符串空格问题  AO3中文版手机快速通道_AO3最新稳定链接更新  Linux如何自动分析系统异常日志_Linux日志智能检测  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  鲨鱼剧场app金币获取方法  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  123平台官方登录入口 123邮箱网页端在线沟通工具  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  C++ static关键字作用_C++静态成员变量与静态函数 

 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.